mirror of
https://github.com/makeplane/plane.git
synced 2025-12-24 07:39:32 +01:00
New Directory Setup (#2065)
* chore: moved app & space from apps to root * chore: modified workspace configuration * chore: modified dockerfiles for space and web * chore: modified icons for space * feat: updated files for new svg icons supported by next-images * chore: added /spaces base path for next * chore: added compose config for space * chore: updated husky configuration * chore: updated workflows for new configuration * chore: changed app name to web * fix: resolved build errors with web * chore: reset file tracing root for both projects * chore: added nginx config for deploy * fix: eslint and tsconfig settings for space app * husky setup fixes based on new dir * eslint fixes * prettier formatting --------- Co-authored-by: Henit Chobisa <chobisa.henit@gmail.com>
This commit is contained in:
committed by
GitHub
parent
20e36194b4
commit
1e152c666c
203
web/lib/auth.ts
Normal file
203
web/lib/auth.ts
Normal file
@@ -0,0 +1,203 @@
|
||||
// cookies
|
||||
import { convertCookieStringToObject } from "./cookie";
|
||||
// types
|
||||
import type { IProjectMember, IUser, IWorkspace, IWorkspaceMember } from "types";
|
||||
|
||||
export const requiredAuth = async (cookie?: string) => {
|
||||
const cookies = convertCookieStringToObject(cookie);
|
||||
const token = cookies?.accessToken;
|
||||
|
||||
if (!token) return null;
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || "https://api.plane.so";
|
||||
|
||||
let user: IUser | null = null;
|
||||
|
||||
try {
|
||||
const data = await fetch(`${baseUrl}/api/users/me/`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
})
|
||||
.then((res) => res.json())
|
||||
.then((data) => data);
|
||||
|
||||
user = data.user;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
user = null;
|
||||
}
|
||||
|
||||
return user;
|
||||
};
|
||||
|
||||
export const requiredAdmin = async (workspaceSlug: string, projectId: string, cookie?: string) => {
|
||||
const user = await requiredAuth(cookie);
|
||||
|
||||
if (!user) return null;
|
||||
|
||||
const cookies = convertCookieStringToObject(cookie);
|
||||
const token = cookies?.accessToken;
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || "https://api.plane.so";
|
||||
|
||||
let memberDetail: IProjectMember | null = null;
|
||||
|
||||
try {
|
||||
const data = await fetch(
|
||||
`${baseUrl}/api/workspaces/${workspaceSlug}/projects/${projectId}/project-members/me/`,
|
||||
{
|
||||
method: "GET",
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
}
|
||||
)
|
||||
.then((res) => res.json())
|
||||
.then((data) => data);
|
||||
|
||||
memberDetail = data;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
memberDetail = null;
|
||||
}
|
||||
|
||||
return memberDetail || null;
|
||||
};
|
||||
|
||||
export const requiredWorkspaceAdmin = async (workspaceSlug: string, cookie?: string) => {
|
||||
const user = await requiredAuth(cookie);
|
||||
|
||||
if (!user) return null;
|
||||
|
||||
const cookies = convertCookieStringToObject(cookie);
|
||||
const token = cookies?.accessToken;
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || "https://api.plane.so";
|
||||
|
||||
let memberDetail: IWorkspaceMember | null = null;
|
||||
|
||||
try {
|
||||
const data = await fetch(`${baseUrl}/api/workspaces/${workspaceSlug}/workspace-members/me/`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
})
|
||||
.then((res) => res.json())
|
||||
.then((data) => data);
|
||||
|
||||
memberDetail = data;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
memberDetail = null;
|
||||
}
|
||||
|
||||
return memberDetail || null;
|
||||
};
|
||||
|
||||
export const homePageRedirect = async (cookie?: string) => {
|
||||
const user = await requiredAuth(cookie);
|
||||
|
||||
if (!user)
|
||||
return {
|
||||
redirect: {
|
||||
destination: "/",
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
|
||||
if (!user.is_onboarded)
|
||||
return {
|
||||
redirect: {
|
||||
destination: "/onboarding",
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
|
||||
let workspaces: IWorkspace[] = [];
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || "https://api.plane.so";
|
||||
|
||||
const cookies = convertCookieStringToObject(cookie);
|
||||
const token = cookies?.accessToken;
|
||||
|
||||
try {
|
||||
const data = await fetch(`${baseUrl}/api/users/me/workspaces/`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
})
|
||||
.then((res) => res.json())
|
||||
.then((data) => data);
|
||||
|
||||
workspaces = data;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return {
|
||||
redirect: {
|
||||
destination: "/error",
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const lastActiveWorkspace = workspaces.find(
|
||||
(workspace) => workspace.id === user.last_workspace_id
|
||||
);
|
||||
|
||||
if (lastActiveWorkspace) {
|
||||
return {
|
||||
redirect: {
|
||||
destination: `/${lastActiveWorkspace.slug}`,
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
} else if (workspaces.length > 0) {
|
||||
return {
|
||||
redirect: {
|
||||
destination: `/${workspaces[0].slug}`,
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const invitations = await fetch(`${baseUrl}/api/users/me/invitations/workspaces/`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${token}`,
|
||||
},
|
||||
})
|
||||
.then((res) => res.json())
|
||||
.then((data) => data)
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
return {
|
||||
redirect: {
|
||||
destination: "/error",
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
if (invitations.length > 0)
|
||||
return {
|
||||
redirect: {
|
||||
destination: "/invitations",
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
else {
|
||||
return {
|
||||
redirect: {
|
||||
destination: "/create-workspace",
|
||||
permanent: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user