mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-12 13:13:45 +01:00
[web] Hook up project access controls and privileges to sharing link API GitOrigin-RevId: 05407476340cabf1ab56a18008f9f3fa978b9d79
108 lines
2.5 KiB
TypeScript
108 lines
2.5 KiB
TypeScript
import { ProjectMember } from '@/shared/context/types/project-metadata'
|
|
import {
|
|
deleteJSON,
|
|
getJSON,
|
|
postJSON,
|
|
putJSON,
|
|
} from '../../../infrastructure/fetch-json'
|
|
import { executeV2Captcha } from './captcha'
|
|
import getMeta from '@/utils/meta'
|
|
import { PermissionsLevel } from '@/features/ide-react/types/permissions'
|
|
|
|
export type SharingLinkPrivileges =
|
|
| 'readAndWrite'
|
|
| 'review'
|
|
| 'readOnly'
|
|
| false
|
|
|
|
export type SharingLinkData = {
|
|
_id: string
|
|
token: string
|
|
privileges: SharingLinkPrivileges
|
|
subscriptionId?: string
|
|
}
|
|
|
|
export function getSharingLink(projectId: string) {
|
|
return getJSON<SharingLinkData>(`/project/${projectId}/sharing-link`)
|
|
}
|
|
|
|
export function updateSharingLink(
|
|
projectId: string,
|
|
data: Pick<SharingLinkData, 'privileges' | 'subscriptionId'>
|
|
) {
|
|
return postJSON<SharingLinkData>(`/project/${projectId}/sharing-link`, {
|
|
body: data,
|
|
})
|
|
}
|
|
|
|
export function sendInvite(
|
|
projectId: string,
|
|
email: string,
|
|
privileges: PermissionsLevel
|
|
) {
|
|
return executeV2Captcha(
|
|
getMeta('ol-ExposedSettings').recaptchaDisabled?.invite
|
|
).then(grecaptchaResponse => {
|
|
return postJSON(`/project/${projectId}/invite`, {
|
|
body: {
|
|
email, // TODO: normalisedEmail?
|
|
privileges,
|
|
'g-recaptcha-response': grecaptchaResponse,
|
|
},
|
|
})
|
|
})
|
|
}
|
|
|
|
export function resendInvite(projectId: string, invite: ProjectMember) {
|
|
return postJSON(`/project/${projectId}/invite/${invite._id}/resend`)
|
|
}
|
|
|
|
export function revokeInvite(projectId: string, invite: ProjectMember) {
|
|
return deleteJSON(`/project/${projectId}/invite/${invite._id}`)
|
|
}
|
|
|
|
export function updateMember(
|
|
projectId: string,
|
|
member: ProjectMember,
|
|
data: { privilegeLevel: PermissionsLevel }
|
|
) {
|
|
return putJSON(`/project/${projectId}/users/${member._id}`, {
|
|
body: data,
|
|
})
|
|
}
|
|
|
|
export function removeMemberFromProject(
|
|
projectId: string,
|
|
member: ProjectMember
|
|
) {
|
|
return deleteJSON(`/project/${projectId}/users/${member._id}`)
|
|
}
|
|
|
|
export function transferProjectOwnership(
|
|
projectId: string,
|
|
member: ProjectMember
|
|
) {
|
|
return postJSON(`/project/${projectId}/transfer-ownership`, {
|
|
body: {
|
|
user_id: member._id,
|
|
},
|
|
})
|
|
}
|
|
|
|
export function setPublicAccessLevel(
|
|
projectId: string,
|
|
publicAccessLevel: string
|
|
) {
|
|
return postJSON(`/project/${projectId}/settings/admin`, {
|
|
body: { publicAccessLevel },
|
|
})
|
|
}
|
|
|
|
export function listProjectMembers(projectId: string) {
|
|
return getJSON(`/project/${projectId}/members`)
|
|
}
|
|
|
|
export function listProjectInvites(projectId: string) {
|
|
return getJSON(`/project/${projectId}/invites`)
|
|
}
|