Adding new API for getting contact information of user
This commit is contained in:
parent
c8550b517a
commit
92cc97c396
@ -6,7 +6,7 @@ indent_size = 3
|
|||||||
end_of_line = crlf
|
end_of_line = crlf
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
insert_final_newline = false
|
insert_final_newline = true
|
||||||
|
|
||||||
[*.yml]
|
[*.yml]
|
||||||
indent_size = 2
|
indent_size = 2
|
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["esbenp.prettier-vscode"]
|
||||||
|
}
|
@ -37,5 +37,6 @@
|
|||||||
"No special token": "No special token",
|
"No special token": "No special token",
|
||||||
"Login token invalid": "Login token invalid",
|
"Login token invalid": "Login token invalid",
|
||||||
"No login token": "No login token",
|
"No login token": "No login token",
|
||||||
"You are not logged in or your login is expired (Login token invalid)": "You are not logged in or your login is expired (Login token invalid)"
|
"You are not logged in or your login is expired (Login token invalid)": "You are not logged in or your login is expired (Login token invalid)",
|
||||||
|
"You are not logged in or your login is expired (No special token)": "You are not logged in or your login is expired (No special token)"
|
||||||
}
|
}
|
2
package-lock.json
generated
2
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "open_auth_service",
|
"name": "open_auth_service",
|
||||||
"version": "1.0.0",
|
"version": "1.1.1",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
16
src/api/user/contact.ts
Normal file
16
src/api/user/contact.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import { Request, Response } from "express";
|
||||||
|
import Stacker from "../middlewares/stacker";
|
||||||
|
import { GetUserMiddleware } from "../middlewares/user";
|
||||||
|
import Mail from "../../models/mail";
|
||||||
|
|
||||||
|
export const GetContactInfos = Stacker(GetUserMiddleware(true, true), async (req: Request, res: Response) => {
|
||||||
|
let mails = await Promise.all(
|
||||||
|
req.user.mails.map(mail => Mail.findById(mail))
|
||||||
|
);
|
||||||
|
|
||||||
|
let contact = {
|
||||||
|
mails: mails.filter(e => !!e),
|
||||||
|
phones: req.user.phones
|
||||||
|
};
|
||||||
|
res.json({ contact });
|
||||||
|
});
|
@ -4,6 +4,7 @@ import Login from "./login";
|
|||||||
import TwoFactorRoute from "./twofactor";
|
import TwoFactorRoute from "./twofactor";
|
||||||
import { GetToken, DeleteToken } from "./token";
|
import { GetToken, DeleteToken } from "./token";
|
||||||
import { GetAccount } from "./account";
|
import { GetAccount } from "./account";
|
||||||
|
import { GetContactInfos } from "./contact";
|
||||||
|
|
||||||
const UserRoute: Router = Router();
|
const UserRoute: Router = Router();
|
||||||
|
|
||||||
@ -105,10 +106,24 @@ UserRoute.delete("/token/:id", DeleteToken);
|
|||||||
* @apiSuccess {Boolean} success
|
* @apiSuccess {Boolean} success
|
||||||
* @apiSuccess {Object[]} user
|
* @apiSuccess {Object[]} user
|
||||||
* @apiSuccess {String} user.id User ID
|
* @apiSuccess {String} user.id User ID
|
||||||
* @apiSuccess {String} token.name Full name of the user
|
* @apiSuccess {String} user.name Full name of the user
|
||||||
* @apiSuccess {String} token.username Username of user
|
* @apiSuccess {String} user.username Username of user
|
||||||
* @apiSuccess {Date} token.birthday Birthday
|
* @apiSuccess {Date} user.birthday Birthday
|
||||||
* @apiSuccess {Number} token.gender Gender of user (none = 0, male = 1, female = 2, other = 3)
|
* @apiSuccess {Number} user.gender Gender of user (none = 0, male = 1, female = 2, other = 3)
|
||||||
*/
|
*/
|
||||||
UserRoute.get("/account", GetAccount);
|
UserRoute.get("/account", GetAccount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @api {delete} /user/account
|
||||||
|
* @apiName UserGetAccount
|
||||||
|
*
|
||||||
|
* @apiGroup user
|
||||||
|
* @apiPermission user
|
||||||
|
*
|
||||||
|
* @apiSuccess {Boolean} success
|
||||||
|
* @apiSuccess {Object} contact
|
||||||
|
* @apiSuccess {Object[]} user.mail EMail addresses
|
||||||
|
* @apiSuccess {Object[]} user.phone Phone numbers
|
||||||
|
*/
|
||||||
|
UserRoute.get("/contact", GetContactInfos);
|
||||||
export default UserRoute;
|
export default UserRoute;
|
@ -11,10 +11,23 @@ import TwoFactor from "./models/twofactor";
|
|||||||
|
|
||||||
import * as speakeasy from "speakeasy";
|
import * as speakeasy from "speakeasy";
|
||||||
import LoginToken from "./models/login_token";
|
import LoginToken from "./models/login_token";
|
||||||
import { log } from "handlebars";
|
import Mail from "./models/mail";
|
||||||
|
|
||||||
export default async function TestData() {
|
export default async function TestData() {
|
||||||
await DB.db.dropDatabase();
|
await DB.db.dropDatabase();
|
||||||
|
|
||||||
|
let mail = await Mail.findOne({ mail: "test@test.de" });
|
||||||
|
if (!mail) {
|
||||||
|
mail = Mail.new({
|
||||||
|
mail: "test@test.de",
|
||||||
|
primary: true,
|
||||||
|
verified: true
|
||||||
|
})
|
||||||
|
|
||||||
|
await Mail.save(mail);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
let u = await User.findOne({ username: "test" });
|
let u = await User.findOne({ username: "test" });
|
||||||
if (!u) {
|
if (!u) {
|
||||||
Logging.log("Adding test user");
|
Logging.log("Adding test user");
|
||||||
@ -25,7 +38,12 @@ export default async function TestData() {
|
|||||||
name: "Test Test",
|
name: "Test Test",
|
||||||
password: "125d6d03b32c84d492747f79cf0bf6e179d287f341384eb5d6d3197525ad6be8e6df0116032935698f99a09e265073d1d6c32c274591bf1d0a20ad67cba921bc",
|
password: "125d6d03b32c84d492747f79cf0bf6e179d287f341384eb5d6d3197525ad6be8e6df0116032935698f99a09e265073d1d6c32c274591bf1d0a20ad67cba921bc",
|
||||||
salt: "test",
|
salt: "test",
|
||||||
admin: true
|
admin: true,
|
||||||
|
phones: [
|
||||||
|
{ phone: "+4915962855955", primary: true, verified: true },
|
||||||
|
{ phone: "+4915962855932", primary: false, verified: false }
|
||||||
|
],
|
||||||
|
mails: [mail._id]
|
||||||
})
|
})
|
||||||
await User.save(u);
|
await User.save(u);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
2
views/package-lock.json
generated
2
views/package-lock.json
generated
@ -243,7 +243,7 @@
|
|||||||
},
|
},
|
||||||
"duplexer": {
|
"duplexer": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
"resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
||||||
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
|
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 47f98674eae7bdb6a92917a57bf4fe46dd593e8b
|
Subproject commit e30b04f83c959e19393e82fc5ccc74a363aae53b
|
Loading…
Reference in New Issue
Block a user