diff --git a/apps/backend/src/api/routes/users.controller.ts b/apps/backend/src/api/routes/users.controller.ts index a048b748..f8623ad1 100644 --- a/apps/backend/src/api/routes/users.controller.ts +++ b/apps/backend/src/api/routes/users.controller.ts @@ -172,4 +172,39 @@ export class UsersController { response.status(200).send(); } + + @Post('/logout') + logout(@Res({ passthrough: true }) response: Response) { + response.cookie('auth', '', { + domain: + '.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname, + secure: true, + httpOnly: true, + maxAge: -1, + expires: new Date(0), + sameSite: 'none', + }); + + response.cookie('showorg', '', { + domain: + '.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname, + secure: true, + httpOnly: true, + maxAge: -1, + expires: new Date(0), + sameSite: 'none', + }); + + response.cookie('impersonate', '', { + domain: + '.' + new URL(removeSubdomain(process.env.FRONTEND_URL!)).hostname, + secure: true, + httpOnly: true, + maxAge: -1, + expires: new Date(0), + sameSite: 'none', + }); + + response.status(200).send(); + } } diff --git a/apps/frontend/src/components/layout/logout.component.tsx b/apps/frontend/src/components/layout/logout.component.tsx new file mode 100644 index 00000000..5ff59b78 --- /dev/null +++ b/apps/frontend/src/components/layout/logout.component.tsx @@ -0,0 +1,19 @@ +import { isGeneral } from '@gitroom/react/helpers/is.general'; +import { useCallback } from 'react'; +import { deleteDialog } from '@gitroom/react/helpers/delete.dialog'; +import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; + +export const LogoutComponent = () => { + const fetch = useFetch(); + const logout = useCallback(async () => { + if (await deleteDialog('Are you sure you want to logout?', 'Yes logout')) { + await fetch('/user/logout', { + method: 'POST', + }); + + window.location.href = '/'; + } + }, []); + + return
Logout from {isGeneral() ? 'Postiz' : 'Gitroom'}
; +}; diff --git a/apps/frontend/src/components/layout/settings.component.tsx b/apps/frontend/src/components/layout/settings.component.tsx index 090b7652..eb694f27 100644 --- a/apps/frontend/src/components/layout/settings.component.tsx +++ b/apps/frontend/src/components/layout/settings.component.tsx @@ -14,6 +14,7 @@ import clsx from 'clsx'; import { TeamsComponent } from '@gitroom/frontend/components/settings/teams.component'; import { isGeneral } from '@gitroom/react/helpers/is.general'; import { useUser } from '@gitroom/frontend/components/layout/user.context'; +import { LogoutComponent } from '@gitroom/frontend/components/layout/logout.component'; export const SettingsPopup: FC<{ getRef?: Ref }> = (props) => { const { getRef } = props; @@ -187,6 +188,7 @@ export const SettingsPopup: FC<{ getRef?: Ref }> = (props) => { )} {!!user?.tier?.team_members && isGeneral() && } +