Increasing compatability with external oauth clients

This commit is contained in:
Fabian Stamm 2020-03-25 23:37:56 +01:00
parent 315cbb6bf5
commit 02f50caca2
2 changed files with 15 additions and 1 deletions

View File

@ -6,6 +6,7 @@ import { createJWT } from "../../keys";
import Client from "../../models/client"; import Client from "../../models/client";
import RequestError, { HttpStatusCode } from "../../helper/request_error"; import RequestError, { HttpStatusCode } from "../../helper/request_error";
import config from "../../config"; import config from "../../config";
import Mail from "../../models/mail";
const ClientRouter = Router(); const ClientRouter = Router();
@ -45,10 +46,15 @@ ClientRouter.get("/user", Stacker(GetClientAuthMiddleware(false), GetUserMiddlew
})); }));
ClientRouter.get("/account", Stacker(GetClientApiAuthMiddleware(), async (req: Request, res) => { ClientRouter.get("/account", Stacker(GetClientApiAuthMiddleware(), async (req: Request, res) => {
let mails = await Promise.all(req.user.mails.map(id => Mail.findById(id)));
let mail = mails.find(e => e.primary) || mails[0];
res.json({ res.json({
user: { user: {
username: req.user.username, username: req.user.username,
name: req.user.name, name: req.user.name,
email: mail
} }
}) })
})); }));

View File

@ -10,6 +10,7 @@ import { randomBytes } from "crypto";
// import { ObjectID } from "bson"; // import { ObjectID } from "bson";
import Grant, { IGrant } from "../../models/grants"; import Grant, { IGrant } from "../../models/grants";
import GetAuthPage from "../../views/authorize"; import GetAuthPage from "../../views/authorize";
import { ObjectID } from "mongodb";
// const AuthRoute = Stacker(GetUserMiddleware(true), async (req: Request, res: Response) => { // const AuthRoute = Stacker(GetUserMiddleware(true), async (req: Request, res: Response) => {
// let { response_type, client_id, redirect_uri, scope, state, nored } = req.query; // let { response_type, client_id, redirect_uri, scope, state, nored } = req.query;
@ -123,8 +124,15 @@ const GetAuthRoute = (view = false) =>
let proms: PromiseLike<void>[] = []; let proms: PromiseLike<void>[] = [];
if (scopes) { if (scopes) {
for (let perm of scopes.filter(e => e !== "read_user")) { for (let perm of scopes.filter(e => e !== "read_user")) {
let oid = undefined;
try {
oid = new ObjectID(perm);
} catch (err) {
Logging.error(err);
continue;
}
proms.push( proms.push(
Permission.findById(perm).then(p => { Permission.findById(oid).then(p => {
if (!p) return Promise.reject(new Error()); if (!p) return Promise.reject(new Error());
permissions.push(p); permissions.push(p);
}) })