diff --git a/src/api/accounts.js b/src/api/accounts.js index b028673..217b905 100644 --- a/src/api/accounts.js +++ b/src/api/accounts.js @@ -31,6 +31,34 @@ export async function resetTwoFactor() { } } +// sessions api +export async function fetchUserSessions(id) { + try { + const { data } = await axios.get(`${baseUrl}/users/${id}/sessions/`); + return data; + } catch (e) { + console.error(e); + } +} + +export async function deleteAllUserSessions(id) { + try { + const { data } = await axios.delete(`${baseUrl}/users/${id}/sessions/`); + return data; + } catch (e) { + console.error(e); + } +} + +export async function deleteUserSession(id) { + try { + const { data } = await axios.delete(`${baseUrl}/sessions/${id}/`); + return data; + } catch (e) { + console.error(e); + } +} + // role api function export async function fetchRoles(params = {}) { try { diff --git a/src/api/core.ts b/src/api/core.ts index 6aa77b6..11e9130 100644 --- a/src/api/core.ts +++ b/src/api/core.ts @@ -8,8 +8,15 @@ import type { TestRunURLActionResponse, } from "@/types/core/urlactions"; +import type { CoreSetting } from "@/types/core/settings"; + const baseUrl = "/core"; +export async function fetchCoreSettings(params = {}): Promise { + const { data } = await axios.get("/core/settings/", { params: params }); + return data; +} + export async function fetchDashboardInfo(params = {}) { const { data } = await axios.get(`${baseUrl}/dashinfo/`, { params: params }); return data; diff --git a/src/components/AdminManager.vue b/src/components/AdminManager.vue index e6eaa4f..2e25bac 100644 --- a/src/components/AdminManager.vue +++ b/src/components/AdminManager.vue @@ -1,159 +1,191 @@ diff --git a/src/components/modals/coresettings/EditCoreSettings.vue b/src/components/modals/coresettings/EditCoreSettings.vue index e78b90c..d31e4dd 100644 --- a/src/components/modals/coresettings/EditCoreSettings.vue +++ b/src/components/modals/coresettings/EditCoreSettings.vue @@ -739,7 +739,6 @@ export default { URLActionsTable, APIKeysTable, SSOProvidersTable, - // ServerTasksTable, }, mixins: [mixins], data() { diff --git a/src/ee/sso/api/sso.ts b/src/ee/sso/api/sso.ts index d120bb1..0531232 100644 --- a/src/ee/sso/api/sso.ts +++ b/src/ee/sso/api/sso.ts @@ -34,16 +34,7 @@ function postForm(url: string, data: FormData) { f.submit(); } -export interface MetaIsAuthenticated { - is_authenticated: boolean; -} - // sso providers -export interface AllAuthResponse { - data: T; - status: number; - meta?: MetaIsAuthenticated; -} export async function fetchSSOProviders(): Promise { const { data } = await axios.get(`${baseUrl}/ssoproviders/`); @@ -65,6 +56,24 @@ export async function removeSSOProvider(id: number) { return data; } +export interface SSOSettings { + block_local_user_logon: boolean; +} + +export async function fetchSSOSettings(): Promise { + const { data } = await axios.get(`${baseUrl}/ssoproviders/settings/`); + return data; +} + +export async function updateSSOSettings(settings: SSOSettings) { + console.log(settings); + const { data } = await axios.post( + `${baseUrl}/ssoproviders/settings/`, + settings, + ); + return data; +} + export async function getSSOProviderToken() { const { data } = await axios.post( `${baseUrl}/ssoproviders/token/`, @@ -76,6 +85,17 @@ export async function getSSOProviderToken() { return data; } +// allauth +const allauthBase = "_allauth/browser/v1"; + +export interface AllAuthResponse { + data: T; + status: number; + meta?: { + is_autheticated: boolean; + }; +} + export interface SSOProviderConfig { client_id: string; flows: string[]; @@ -92,12 +112,29 @@ export interface SSOConfigResponse { export async function getSSOConfig(): Promise< AllAuthResponse > { - const { data } = await axios.get("_allauth/browser/v1/config"); + const { data } = await axios.get(`${allauthBase}/config`); + return data; +} + +export interface SSOAccountsResponse { + uid: string; + display: string; + provider: SSOProviderConfig; +} + +export async function disconnectSSOAccount( + provider: string, + account: string, +): Promise> { + const { data } = await axios.delete(`${allauthBase}/account/providers`, { + data: { provider, account }, + headers: { "X-CSRFToken": getCSRFToken() }, + }); return data; } export async function openSSOProviderRedirect(id: string) { - postForm(`${getBaseUrl()}/_allauth/browser/v1/auth/provider/redirect`, { + postForm(`${getBaseUrl()}/${allauthBase}/auth/provider/redirect`, { provider: id, process: "login", callback_url: `${location.origin}/account/provider/callback`, diff --git a/src/ee/sso/components/SSOAccountsTable.vue b/src/ee/sso/components/SSOAccountsTable.vue new file mode 100644 index 0000000..e982050 --- /dev/null +++ b/src/ee/sso/components/SSOAccountsTable.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/ee/sso/components/SSOProvidersForm.vue b/src/ee/sso/components/SSOProvidersForm.vue index b13f80b..3f77b71 100644 --- a/src/ee/sso/components/SSOProvidersForm.vue +++ b/src/ee/sso/components/SSOProvidersForm.vue @@ -1,3 +1,9 @@ + +