viehlieb
ed4da96ab1
All checks were successful
continuous-integration/drone/push Build is passing
This change adds the ability to sync teams via a custom openid claim. Vikunja will automatically create and delete teams as necessary, it will also add and remove users when they log in. These teams are fully managed by Vikunja and cannot be updated by a user. Co-authored-by: kolaente <k@knt.li> Reviewed-on: #1393 Resolves #1279 Resolves https://github.com/go-vikunja/vikunja/issues/42 Resolves #950 Co-authored-by: viehlieb <pf@pragma-shift.net> Co-committed-by: viehlieb <pf@pragma-shift.net>
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import {createRandomID} from '@/helpers/randomId'
|
|
import type {IProvider} from '@/types/IProvider'
|
|
import {parseURL} from 'ufo'
|
|
|
|
export function getRedirectUrlFromCurrentFrontendPath(provider: IProvider): string {
|
|
// We're not using the redirect url provided by the server to allow redirects when using the electron app.
|
|
// The implications are not quite clear yet hence the logic to pass in another redirect url still exists.
|
|
const url = parseURL(window.location.href)
|
|
return `${url.protocol}//${url.host}/auth/openid/${provider.key}`
|
|
}
|
|
|
|
export const redirectToProvider = (provider: IProvider) => {
|
|
|
|
const redirectUrl = getRedirectUrlFromCurrentFrontendPath(provider)
|
|
const state = createRandomID(24)
|
|
localStorage.setItem('state', state)
|
|
|
|
let scope = 'openid email profile'
|
|
if (provider.scope !== null){
|
|
scope = provider.scope
|
|
}
|
|
window.location.href = `${provider.authUrl}?client_id=${provider.clientId}&redirect_uri=${redirectUrl}&response_type=code&scope=${scope}&state=${state}`
|
|
}
|
|
|
|
export const redirectToProviderOnLogout = (provider: IProvider) => {
|
|
if (provider.logoutUrl.length > 0) {
|
|
window.location.href = `${provider.logoutUrl}`
|
|
}
|
|
}
|