mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-23 16:56:07 +00:00
Check already joined (#2262)
Signed-off-by: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com>
This commit is contained in:
parent
99880588fb
commit
251c67f9fe
@ -17,10 +17,11 @@
|
||||
import { fetchMetadataLocalStorage, getCurrentLocation, navigate, setMetadataLocalStorage } from '@anticrm/ui'
|
||||
|
||||
import Form from './Form.svelte'
|
||||
import { join, signUpJoin } from '../utils'
|
||||
import { checkJoined, join, signUpJoin } from '../utils'
|
||||
|
||||
import login from '../plugin'
|
||||
import { workbenchId } from '@anticrm/workbench'
|
||||
import { onMount } from 'svelte'
|
||||
|
||||
const location = getCurrentLocation()
|
||||
let page = 'login'
|
||||
@ -89,6 +90,27 @@
|
||||
$: secondaryButtonAction = () => {
|
||||
page = 'signUp'
|
||||
}
|
||||
|
||||
onMount(() => {
|
||||
check()
|
||||
})
|
||||
|
||||
async function check () {
|
||||
if (location.query?.inviteId === undefined || location.query?.inviteId === null) return
|
||||
status = new Status(Severity.INFO, login.status.ConnectingToServer, {})
|
||||
const [, result] = await checkJoined(location.query.inviteId)
|
||||
status = OK
|
||||
if (result !== undefined) {
|
||||
const tokens: Record<string, string> = fetchMetadataLocalStorage(login.metadata.LoginTokens) ?? {}
|
||||
setMetadata(login.metadata.LoginToken, result.token)
|
||||
tokens[result.workspace] = result.token
|
||||
setMetadataLocalStorage(login.metadata.LoginTokens, tokens)
|
||||
setMetadataLocalStorage(login.metadata.LoginEndpoint, result.endpoint)
|
||||
setMetadataLocalStorage(login.metadata.LoginEmail, result.email)
|
||||
|
||||
navigate({ path: [workbenchId, result.workspace] })
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<Form
|
||||
|
@ -268,6 +268,56 @@ export async function selectWorkspace (workspace: string): Promise<[Status, Work
|
||||
}
|
||||
}
|
||||
|
||||
export async function checkJoined (inviteId: string): Promise<[Status, WorkspaceLoginInfo | undefined]> {
|
||||
const accountsUrl = getMetadata(login.metadata.AccountsUrl)
|
||||
|
||||
if (accountsUrl === undefined) {
|
||||
throw new Error('accounts url not specified')
|
||||
}
|
||||
|
||||
const overrideToken = getMetadata(login.metadata.OverrideLoginToken)
|
||||
const email = fetchMetadataLocalStorage(login.metadata.LoginEmail) ?? ''
|
||||
if (overrideToken !== undefined) {
|
||||
const endpoint = getMetadata(login.metadata.OverrideEndpoint)
|
||||
if (endpoint !== undefined) {
|
||||
return [OK, { token: overrideToken, endpoint, email, workspace: DEV_WORKSPACE }]
|
||||
}
|
||||
}
|
||||
|
||||
let token = getMetadata(login.metadata.LoginToken)
|
||||
if (token === undefined) {
|
||||
const tokens: Record<string, string> = fetchMetadataLocalStorage(login.metadata.LoginTokens) ?? {}
|
||||
token = Object.values(tokens)[0]
|
||||
if (token === undefined) {
|
||||
const loc = getCurrentLocation()
|
||||
loc.path[1] = 'login'
|
||||
loc.path.length = 2
|
||||
navigate(loc)
|
||||
return [unknownStatus('Please login'), undefined]
|
||||
}
|
||||
}
|
||||
|
||||
const request: Request<[string]> = {
|
||||
method: 'checkJoin',
|
||||
params: [inviteId]
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(accountsUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: 'Bearer ' + token,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: serialize(request)
|
||||
})
|
||||
const result: Response<any> = await response.json()
|
||||
return [result.error ?? OK, result.result]
|
||||
} catch (err) {
|
||||
return [unknownError(err), undefined]
|
||||
}
|
||||
}
|
||||
|
||||
export async function getInviteLink (): Promise<string> {
|
||||
const accountsUrl = getMetadata(login.metadata.AccountsUrl)
|
||||
|
||||
|
@ -622,6 +622,16 @@ export async function removeWorkspace (db: Db, email: string, workspace: string)
|
||||
await db.collection(ACCOUNT_COLLECTION).updateOne({ _id: accountId }, { $pull: { workspaces: workspaceId } })
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
export async function checkJoin (db: Db, token: string, inviteId: ObjectId): Promise<WorkspaceLoginInfo> {
|
||||
const { email } = decodeToken(token)
|
||||
const invite = await getInvite(db, inviteId)
|
||||
const workspace = await checkInvite(invite, email)
|
||||
return await selectWorkspace(db, token, workspace)
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
@ -735,6 +745,7 @@ function wrap (f: (db: Db, ...args: any[]) => Promise<any>) {
|
||||
export const methods = {
|
||||
login: wrap(login),
|
||||
join: wrap(join),
|
||||
checkJoin: wrap(checkJoin),
|
||||
signUpJoin: wrap(signUpJoin),
|
||||
selectWorkspace: wrap(selectWorkspace),
|
||||
getUserWorkspaces: wrap(getUserWorkspaces),
|
||||
|
Loading…
Reference in New Issue
Block a user