Client - revoke all token for a given client
This commit is contained in:
parent
e01248d0d1
commit
524a221725
@ -3,13 +3,22 @@
|
|||||||
<Modal
|
<Modal
|
||||||
v-if="displayModal"
|
v-if="displayModal"
|
||||||
:title="$t('common.CONFIRMATION')"
|
:title="$t('common.CONFIRMATION')"
|
||||||
:message="$t('oauth2.APP_DELETION_CONFIRMATION')"
|
:message="$t(messageToDisplay)"
|
||||||
@confirmAction="deleteClient(client.id)"
|
@confirmAction="confirmAction(client.id)"
|
||||||
@cancelAction="updateDisplayModal(false)"
|
@cancelAction="updateDisplayModal(false)"
|
||||||
/>
|
/>
|
||||||
<div v-if="client && client.client_id">
|
<div v-if="client && client.client_id">
|
||||||
<div class="info-box success-message" v-if="afterCreation">
|
<div
|
||||||
{{ $t('oauth2.APP_CREATED_SUCCESSFULLY') }}
|
class="info-box success-message"
|
||||||
|
v-if="afterCreation || revocationSuccessful"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
afterCreation
|
||||||
|
? 'oauth2.APP_CREATED_SUCCESSFULLY'
|
||||||
|
: 'oauth2.TOKENS_REVOKED'
|
||||||
|
)
|
||||||
|
}}
|
||||||
</div>
|
</div>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>{{ $t('oauth2.APP.CLIENT_ID') }}:</dt>
|
<dt>{{ $t('oauth2.APP.CLIENT_ID') }}:</dt>
|
||||||
@ -55,7 +64,10 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="app-buttons">
|
<div class="app-buttons">
|
||||||
<button class="danger" @click="updateDisplayModal(true)">
|
<button class="danger" @click="updateMessageToDisplay(false)">
|
||||||
|
{{ $t('oauth2.REVOKE_ALL_TOKENS') }}
|
||||||
|
</button>
|
||||||
|
<button class="danger" @click="updateMessageToDisplay(true)">
|
||||||
{{ $t('oauth2.DELETE_APP') }}
|
{{ $t('oauth2.DELETE_APP') }}
|
||||||
</button>
|
</button>
|
||||||
<button @click="$router.push('/profile/apps')">
|
<button @click="$router.push('/profile/apps')">
|
||||||
@ -84,6 +96,7 @@
|
|||||||
ref,
|
ref,
|
||||||
onUnmounted,
|
onUnmounted,
|
||||||
withDefaults,
|
withDefaults,
|
||||||
|
watch,
|
||||||
} from 'vue'
|
} from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
|
||||||
@ -107,7 +120,11 @@
|
|||||||
const client: ComputedRef<IOAuth2Client> = computed(
|
const client: ComputedRef<IOAuth2Client> = computed(
|
||||||
() => store.getters[OAUTH2_STORE.GETTERS.CLIENT]
|
() => store.getters[OAUTH2_STORE.GETTERS.CLIENT]
|
||||||
)
|
)
|
||||||
|
const revocationSuccessful: ComputedRef<boolean> = computed(
|
||||||
|
() => store.getters[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]
|
||||||
|
)
|
||||||
let displayModal: Ref<boolean> = ref(false)
|
let displayModal: Ref<boolean> = ref(false)
|
||||||
|
let messageToDisplay: Ref<string | null> = ref(null)
|
||||||
|
|
||||||
onBeforeMount(() => {
|
onBeforeMount(() => {
|
||||||
loadClient()
|
loadClient()
|
||||||
@ -123,16 +140,39 @@
|
|||||||
store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)
|
store.dispatch(OAUTH2_STORE.ACTIONS.GET_CLIENT_BY_ID, +route.params.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function deleteClient(clientId: number) {
|
function updateMessageToDisplay(forDelete: boolean) {
|
||||||
store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)
|
messageToDisplay.value = forDelete
|
||||||
|
? 'oauth2.APP_DELETION_CONFIRMATION'
|
||||||
|
: 'oauth2.TOKENS_REVOCATION_CONFIRMATION'
|
||||||
|
updateDisplayModal(true)
|
||||||
}
|
}
|
||||||
function updateDisplayModal(value: boolean) {
|
function updateDisplayModal(value: boolean) {
|
||||||
displayModal.value = value
|
displayModal.value = value
|
||||||
|
if (!value) {
|
||||||
|
messageToDisplay.value = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function confirmAction(clientId: number) {
|
||||||
|
if (messageToDisplay.value === 'oauth2.APP_DELETION_CONFIRMATION') {
|
||||||
|
store.dispatch(OAUTH2_STORE.ACTIONS.DELETE_CLIENT, clientId)
|
||||||
|
} else {
|
||||||
|
store.dispatch(OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS, clientId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)
|
store.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)
|
||||||
store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)
|
store.commit(OAUTH2_STORE.MUTATIONS.EMPTY_CLIENT)
|
||||||
|
store.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => revocationSuccessful.value,
|
||||||
|
(newValue) => {
|
||||||
|
if (newValue) {
|
||||||
|
updateDisplayModal(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
@ -23,5 +23,8 @@
|
|||||||
"NEW_APP": "New OAuth App",
|
"NEW_APP": "New OAuth App",
|
||||||
"NO_DESCRIPTION": "no description",
|
"NO_DESCRIPTION": "no description",
|
||||||
"NO_APP": "Application not found!",
|
"NO_APP": "Application not found!",
|
||||||
"NO_APPS": "no applications"
|
"NO_APPS": "no applications",
|
||||||
|
"REVOKE_ALL_TOKENS": "Revoke all tokens",
|
||||||
|
"TOKENS_REVOCATION_CONFIRMATION": "Are you sure you want to revoke all tokens?",
|
||||||
|
"TOKENS_REVOKED": "All existing associated tokens have been revoked."
|
||||||
}
|
}
|
@ -23,5 +23,8 @@
|
|||||||
"NEW_APP": "Ajouter une App OAuth",
|
"NEW_APP": "Ajouter une App OAuth",
|
||||||
"NO_DESCRIPTION": "pas de description",
|
"NO_DESCRIPTION": "pas de description",
|
||||||
"NO_APP": "Application introuvable !",
|
"NO_APP": "Application introuvable !",
|
||||||
"NO_APPS": "pas de applications"
|
"NO_APPS": "pas de applications",
|
||||||
|
"REVOKE_ALL_TOKENS": "Révoquer tous les jetons",
|
||||||
|
"TOKENS_REVOCATION_CONFIRMATION": "Êtes-vous sûr de vouloir révoquer tous les jetons ?",
|
||||||
|
"TOKENS_REVOKED": "Tous les jetons associés existants ont été révoqués."
|
||||||
}
|
}
|
@ -134,4 +134,21 @@ export const actions: ActionTree<IOAuth2State, IRootState> & IOAuth2Actions = {
|
|||||||
})
|
})
|
||||||
.catch((error) => handleError(context, error))
|
.catch((error) => handleError(context, error))
|
||||||
},
|
},
|
||||||
|
[OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](
|
||||||
|
context: ActionContext<IOAuth2State, IRootState>,
|
||||||
|
id: number
|
||||||
|
): void {
|
||||||
|
context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)
|
||||||
|
context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, false)
|
||||||
|
authApi
|
||||||
|
.post(`oauth/apps/${id}/revoke`)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.data.status === 'success') {
|
||||||
|
context.commit(OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL, true)
|
||||||
|
} else {
|
||||||
|
handleError(context, null)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => handleError(context, error))
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,14 @@ export enum OAuth2Actions {
|
|||||||
GET_CLIENTS = 'GET_CLIENTS',
|
GET_CLIENTS = 'GET_CLIENTS',
|
||||||
GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',
|
GET_CLIENT_BY_CLIENT_ID = 'GET_CLIENT_BY_CLIENT_ID',
|
||||||
GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',
|
GET_CLIENT_BY_ID = 'GET_CLIENT_BY_ID',
|
||||||
|
REVOKE_ALL_TOKENS = 'REVOKE_ALL_TOKENS',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum OAuth2Getters {
|
export enum OAuth2Getters {
|
||||||
CLIENT = 'CLIENT',
|
CLIENT = 'CLIENT',
|
||||||
CLIENTS = 'CLIENTS',
|
CLIENTS = 'CLIENTS',
|
||||||
CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',
|
CLIENTS_PAGINATION = 'CLIENTS_PAGINATION',
|
||||||
|
REVOCATION_SUCCESSFUL = 'REVOCATION_SUCCESSFUL',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum OAuth2Mutations {
|
export enum OAuth2Mutations {
|
||||||
@ -18,4 +20,5 @@ export enum OAuth2Mutations {
|
|||||||
SET_CLIENT = 'SET_CLIENT',
|
SET_CLIENT = 'SET_CLIENT',
|
||||||
SET_CLIENTS = 'SET_CLIENTS',
|
SET_CLIENTS = 'SET_CLIENTS',
|
||||||
SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',
|
SET_CLIENTS_PAGINATION = 'SET_CLIENTS_PAGINATION',
|
||||||
|
SET_REVOCATION_SUCCESSFUL = 'SET_REVOCATION_SUCCESSFUL',
|
||||||
}
|
}
|
||||||
|
@ -9,4 +9,6 @@ export const getters: GetterTree<IOAuth2State, IRootState> & IOAuth2Getters = {
|
|||||||
[OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,
|
[OAUTH2_STORE.GETTERS.CLIENTS]: (state: IOAuth2State) => state.clients,
|
||||||
[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>
|
[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION]: (state: IOAuth2State) =>
|
||||||
state.pagination,
|
state.pagination,
|
||||||
|
[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL]: (state: IOAuth2State) =>
|
||||||
|
state.revocationSuccessful,
|
||||||
}
|
}
|
||||||
|
@ -27,4 +27,10 @@ export const mutations: MutationTree<IOAuth2State> & TOAuth2Mutations = {
|
|||||||
) {
|
) {
|
||||||
state.pagination = pagination
|
state.pagination = pagination
|
||||||
},
|
},
|
||||||
|
[OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](
|
||||||
|
state: IOAuth2State,
|
||||||
|
revocationSuccessful: boolean
|
||||||
|
) {
|
||||||
|
state.revocationSuccessful = revocationSuccessful
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
@ -6,4 +6,5 @@ export const oAuth2State: IOAuth2State = {
|
|||||||
client: <IOAuth2Client>{},
|
client: <IOAuth2Client>{},
|
||||||
clients: [],
|
clients: [],
|
||||||
pagination: <IPagination>{},
|
pagination: <IPagination>{},
|
||||||
|
revocationSuccessful: false,
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ export interface IOAuth2State {
|
|||||||
client: IOAuth2Client
|
client: IOAuth2Client
|
||||||
clients: IOAuth2Client[]
|
clients: IOAuth2Client[]
|
||||||
pagination: IPagination
|
pagination: IPagination
|
||||||
|
revocationSuccessful: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IOAuth2Actions {
|
export interface IOAuth2Actions {
|
||||||
@ -46,12 +47,17 @@ export interface IOAuth2Actions {
|
|||||||
context: ActionContext<IOAuth2State, IRootState>,
|
context: ActionContext<IOAuth2State, IRootState>,
|
||||||
payload: IOauth2ClientsPayload
|
payload: IOauth2ClientsPayload
|
||||||
): void
|
): void
|
||||||
|
[OAUTH2_STORE.ACTIONS.REVOKE_ALL_TOKENS](
|
||||||
|
context: ActionContext<IOAuth2State, IRootState>,
|
||||||
|
id: number
|
||||||
|
): void
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IOAuth2Getters {
|
export interface IOAuth2Getters {
|
||||||
[OAUTH2_STORE.GETTERS.CLIENT](state: IOAuth2State): IOAuth2Client
|
[OAUTH2_STORE.GETTERS.CLIENT](state: IOAuth2State): IOAuth2Client
|
||||||
[OAUTH2_STORE.GETTERS.CLIENTS](state: IOAuth2State): IOAuth2Client[]
|
[OAUTH2_STORE.GETTERS.CLIENTS](state: IOAuth2State): IOAuth2Client[]
|
||||||
[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION](state: IOAuth2State): IPagination
|
[OAUTH2_STORE.GETTERS.CLIENTS_PAGINATION](state: IOAuth2State): IPagination
|
||||||
|
[OAUTH2_STORE.GETTERS.REVOCATION_SUCCESSFUL](state: IOAuth2State): boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TOAuth2Mutations<S = IOAuth2State> = {
|
export type TOAuth2Mutations<S = IOAuth2State> = {
|
||||||
@ -62,6 +68,10 @@ export type TOAuth2Mutations<S = IOAuth2State> = {
|
|||||||
state: S,
|
state: S,
|
||||||
pagination: IPagination
|
pagination: IPagination
|
||||||
): void
|
): void
|
||||||
|
[OAUTH2_STORE.MUTATIONS.SET_REVOCATION_SUCCESSFUL](
|
||||||
|
state: S,
|
||||||
|
revocationSuccessful: boolean
|
||||||
|
): void
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TOAuth2StoreModule<S = IOAuth2State> = Omit<
|
export type TOAuth2StoreModule<S = IOAuth2State> = Omit<
|
||||||
|
Loading…
Reference in New Issue
Block a user