|
|
@ -1,4 +1,4 @@
|
|
|
|
import { Router, IRouter, Request, static as ServeStatic } from "express"
|
|
|
|
import { Router, IRouter, Request, static as ServeStatic } from "express";
|
|
|
|
import GetLoginPage from "./login";
|
|
|
|
import GetLoginPage from "./login";
|
|
|
|
import GetAuthPage from "./authorize";
|
|
|
|
import GetAuthPage from "./authorize";
|
|
|
|
import promiseMiddleware from "../helper/promiseMiddleware";
|
|
|
|
import promiseMiddleware from "../helper/promiseMiddleware";
|
|
|
@ -17,105 +17,120 @@ import { UserMiddleware, GetUserMiddleware } from "../api/middlewares/user";
|
|
|
|
|
|
|
|
|
|
|
|
Handlebars.registerHelper("appname", () => config.core.name);
|
|
|
|
Handlebars.registerHelper("appname", () => config.core.name);
|
|
|
|
|
|
|
|
|
|
|
|
const cacheTime = config.core.dev ? moment.duration(1, "month").asSeconds() : 10;
|
|
|
|
const cacheTime = config.core.dev
|
|
|
|
|
|
|
|
? moment.duration(1, "month").asSeconds()
|
|
|
|
|
|
|
|
: 10;
|
|
|
|
|
|
|
|
|
|
|
|
const ViewRouter: IRouter = Router();
|
|
|
|
const ViewRouter: IRouter = Router();
|
|
|
|
ViewRouter.get("/", UserMiddleware, (req, res) => {
|
|
|
|
ViewRouter.get("/", UserMiddleware, (req, res) => {
|
|
|
|
res.send("This is the main page")
|
|
|
|
res.send("This is the main page");
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
ViewRouter.get("/register", (req, res) => {
|
|
|
|
ViewRouter.get("/register", (req, res) => {
|
|
|
|
res.setHeader("Cache-Control", "public, max-age=" + cacheTime);
|
|
|
|
res.setHeader("Cache-Control", "public, max-age=" + cacheTime);
|
|
|
|
res.send(GetRegistrationPage(req.__));
|
|
|
|
res.send(GetRegistrationPage(req.__));
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
ViewRouter.use("/login", ServeStatic("./views_repo/build/login"));
|
|
|
|
ViewRouter.use("/login", ServeStatic("./views_repo/build/login"));
|
|
|
|
|
|
|
|
|
|
|
|
// ViewRouter.use("/login", (req, res) => {
|
|
|
|
ViewRouter.use("/user", ServeStatic("./views_repo/build/user"));
|
|
|
|
// res.setHeader("Cache-Control", "public, max-age=" + cacheTime);
|
|
|
|
|
|
|
|
// res.send(GetLoginPage(req.__))
|
|
|
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ViewRouter.get("/code", (req, res) => {
|
|
|
|
ViewRouter.get("/code", (req, res) => {
|
|
|
|
res.setHeader("Cache-Control", "no-cache");
|
|
|
|
res.setHeader("Cache-Control", "no-cache");
|
|
|
|
if (req.query.error)
|
|
|
|
if (req.query.error) res.send("Some error occured: " + req.query.error);
|
|
|
|
res.send("Some error occured: " + req.query.error);
|
|
|
|
else res.send(`Your code is: ${req.query.code}`);
|
|
|
|
else
|
|
|
|
});
|
|
|
|
res.send(`Your code is: ${req.query.code}`);
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ViewRouter.get("/admin", GetUserMiddleware(false, true), (req: Request, res, next) => {
|
|
|
|
ViewRouter.get(
|
|
|
|
if (!req.isAdmin) res.sendStatus(HttpStatusCode.FORBIDDEN)
|
|
|
|
"/admin",
|
|
|
|
else next()
|
|
|
|
GetUserMiddleware(false, true),
|
|
|
|
}, (req, res) => {
|
|
|
|
(req: Request, res, next) => {
|
|
|
|
res.send(GetAdminPage(req.__))
|
|
|
|
if (!req.isAdmin) res.sendStatus(HttpStatusCode.FORBIDDEN);
|
|
|
|
})
|
|
|
|
else next();
|
|
|
|
|
|
|
|
},
|
|
|
|
// ViewRouter.get("/user", Stacker(GetUserMiddleware(false, true), (req, res) => {
|
|
|
|
(req, res) => {
|
|
|
|
// res.setHeader("Cache-Control", "public, max-age=" + cacheTime);
|
|
|
|
res.send(GetAdminPage(req.__));
|
|
|
|
// res.send(GetUserPage(req.__));
|
|
|
|
|
|
|
|
// }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ViewRouter.get("/auth", Stacker(GetUserMiddleware(false, true), async (req, res) => {
|
|
|
|
|
|
|
|
let { scope, redirect_uri, state, client_id }: { [key: string]: string } = req.query;
|
|
|
|
|
|
|
|
const sendError = (type) => {
|
|
|
|
|
|
|
|
res.redirect(redirect_uri += `?error=${type}&state=${state}`);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let client = await Client.findOne({ client_id: client_id })
|
|
|
|
|
|
|
|
if (!client) {
|
|
|
|
|
|
|
|
return sendError("unauthorized_client")
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
let permissions: IPermission[] = [];
|
|
|
|
ViewRouter.get(
|
|
|
|
let proms: PromiseLike<void>[] = [];
|
|
|
|
"/auth",
|
|
|
|
if (scope) {
|
|
|
|
Stacker(GetUserMiddleware(false, true), async (req, res) => {
|
|
|
|
for (let perm of scope.split(";").filter(e => e !== "read_user")) {
|
|
|
|
let {
|
|
|
|
proms.push(Permission.findById(perm).then(p => {
|
|
|
|
scope,
|
|
|
|
if (!p) return Promise.reject(new Error());
|
|
|
|
redirect_uri,
|
|
|
|
permissions.push(p);
|
|
|
|
state,
|
|
|
|
}));
|
|
|
|
client_id
|
|
|
|
|
|
|
|
}: { [key: string]: string } = req.query;
|
|
|
|
|
|
|
|
const sendError = type => {
|
|
|
|
|
|
|
|
res.redirect((redirect_uri += `?error=${type}&state=${state}`));
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
let client = await Client.findOne({ client_id: client_id });
|
|
|
|
|
|
|
|
if (!client) {
|
|
|
|
|
|
|
|
return sendError("unauthorized_client");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let err = false;
|
|
|
|
let permissions: IPermission[] = [];
|
|
|
|
await Promise.all(proms).catch(e => {
|
|
|
|
let proms: PromiseLike<void>[] = [];
|
|
|
|
err = true;
|
|
|
|
if (scope) {
|
|
|
|
|
|
|
|
for (let perm of scope.split(";").filter(e => e !== "read_user")) {
|
|
|
|
|
|
|
|
proms.push(
|
|
|
|
|
|
|
|
Permission.findById(perm).then(p => {
|
|
|
|
|
|
|
|
if (!p) return Promise.reject(new Error());
|
|
|
|
|
|
|
|
permissions.push(p);
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let err = false;
|
|
|
|
|
|
|
|
await Promise.all(proms).catch(e => {
|
|
|
|
|
|
|
|
err = true;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
Logging.debug(err);
|
|
|
|
|
|
|
|
if (err) {
|
|
|
|
|
|
|
|
return sendError("invalid_scope");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let scopes = await Promise.all(
|
|
|
|
|
|
|
|
permissions.map(async perm => {
|
|
|
|
|
|
|
|
let client = await Client.findById(perm.client);
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
name: perm.name,
|
|
|
|
|
|
|
|
description: perm.description,
|
|
|
|
|
|
|
|
logo: client.logo
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
res.send(GetAuthPage(req.__, client.name, scopes));
|
|
|
|
})
|
|
|
|
})
|
|
|
|
Logging.debug(err);
|
|
|
|
);
|
|
|
|
if (err) {
|
|
|
|
|
|
|
|
return sendError("invalid_scope")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
let scopes = await Promise.all(permissions.map(async perm => {
|
|
|
|
|
|
|
|
let client = await Client.findById(perm.client);
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
name: perm.name,
|
|
|
|
|
|
|
|
description: perm.description,
|
|
|
|
|
|
|
|
logo: client.logo
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
res.send(GetAuthPage(req.__, client.name, scopes));
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (config.core.dev) {
|
|
|
|
if (config.core.dev) {
|
|
|
|
const logo = "data:image/png;base64,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"
|
|
|
|
const logo =
|
|
|
|
|
|
|
|
"data:image/png;base64,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";
|
|
|
|
ViewRouter.get("/devauth", (req, res) => {
|
|
|
|
ViewRouter.get("/devauth", (req, res) => {
|
|
|
|
res.send(GetAuthPage(req.__, "Test 05265", [
|
|
|
|
res.send(
|
|
|
|
{
|
|
|
|
GetAuthPage(req.__, "Test 05265", [
|
|
|
|
name: "Access Profile",
|
|
|
|
{
|
|
|
|
description: "It allows the application to know who you are. Required for all applications. And a lot of more Text, because why not? This will not stop, till it is multiple lines long and maybe kill the layout, so keep reading as long as you like, but I promise it will get boring after some time. So this should be enougth.",
|
|
|
|
name: "Access Profile",
|
|
|
|
logo: logo
|
|
|
|
description:
|
|
|
|
},
|
|
|
|
"It allows the application to know who you are. Required for all applications. And a lot of more Text, because why not? This will not stop, till it is multiple lines long and maybe kill the layout, so keep reading as long as you like, but I promise it will get boring after some time. So this should be enougth.",
|
|
|
|
{
|
|
|
|
logo: logo
|
|
|
|
name: "Test 1",
|
|
|
|
},
|
|
|
|
description: "This is not an real permission. This is used just to verify the layout",
|
|
|
|
{
|
|
|
|
logo: logo
|
|
|
|
name: "Test 1",
|
|
|
|
},
|
|
|
|
description:
|
|
|
|
{
|
|
|
|
"This is not an real permission. This is used just to verify the layout",
|
|
|
|
name: "Test 2",
|
|
|
|
logo: logo
|
|
|
|
description: "This is not an real permission. This is used just to verify the layout",
|
|
|
|
},
|
|
|
|
logo: logo
|
|
|
|
{
|
|
|
|
}
|
|
|
|
name: "Test 2",
|
|
|
|
]))
|
|
|
|
description:
|
|
|
|
})
|
|
|
|
"This is not an real permission. This is used just to verify the layout",
|
|
|
|
|
|
|
|
logo: logo
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
])
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export default ViewRouter;
|
|
|
|
export default ViewRouter;
|
|
|
|