decentralized-internet
Version:
An NPM library of programs to create decentralized web and distributed computing projects
1 lines • 3.77 kB
JavaScript
module.exports=function(e,a){var r=require("./jwtauth.handlers")(e,a),t=require("@hapi/joi"),s=t.string().regex(/^(?=.*[\d])(?=.*[A-Z])(?=.*[a-z])[\w\d\/+!@#$%_-]{6,}$/);a.password&&(s=a.password);var o=t.object().keys({name:t.string().required(),email:t.string().email().required(),password:s}),i=t.object().keys({_id:t.string().alphanum().required(),_rev:t.string().required(),name:t.string().required(),email:t.string().email().required(),scope:t.array().items(t.string()),password:t.forbidden(),type:t.string().valid("user").required()}).unknown(),d=t.object().keys({_id:t.string().alphanum().required(),_rev:t.string().required(),name:t.string().required(),email:t.string().email().required(),scope:t.forbidden(),password:t.forbidden(),type:t.string().valid("user").required()}).unknown(),n=t.object().keys({_id:t.string().alphanum().required(),_rev:t.string().required(),type:t.string().valid("scopes").required(),scopes:t.array().items(t.string()).required()});a.user&&(o=a.user);var u=t.object().keys({email:t.string().email().required(),password:s});a.login&&(u=a.login),e.route({method:"POST",path:"/auth/user",handler:r.createUser,options:{auth:!1,validate:{query:!1,payload:o,params:null},response:{schema:t.object().keys({token:t.string().required()})},description:"Create new user, add it to the database with the password encrypted."}}),e.route({method:"GET",path:"/auth/users",config:{auth:{strategy:"token",scope:["admin"]},handler:r.getUsers,validate:{query:!1,payload:!1,params:null},response:{schema:t.array().items(i)},description:"Get all users information"}}),e.route({method:"DELETE",path:"/auth/users",config:{auth:{strategy:"token",scope:["admin"]},handler:r.deleteUser,validate:{query:!1,payload:i,params:null},description:"Admin deletes user from the db"}}),e.route({method:"PUT",path:"/auth/users",config:{auth:{strategy:"token",scope:["admin"]},handler:r.updateUser,validate:{query:!1,payload:i,params:null},response:{schema:t.object()},description:"Admin update user"}}),e.route({method:"PUT",path:"/auth/user",config:{auth:{strategy:"token",scope:["default"]},handler:r.updateUserBasic,validate:{query:!1,payload:d,params:null},response:{schema:t.object()},description:"User updates itself"}}),e.route({method:"GET",path:"/auth/user",config:{auth:{strategy:"token",scope:["default"]},handler:r.getUser,validate:{query:!1,payload:!1,params:null},response:{schema:i},description:"Get user information"}}),e.route({method:"DELETE",path:"/auth/user",config:{auth:{strategy:"token",scope:["default"]},handler:r.deleteUser,validate:{query:!1,payload:!1,params:null},description:"Delete user from the db"}}),e.route({method:"POST",path:"/auth/login",config:{auth:!1,validate:{query:!1,payload:u,params:null},handler:r.login,response:{schema:t.object().keys({token:t.string().required()})}}}),e.route({method:"PUT",path:"/auth/login",config:{auth:{strategy:"token",scope:["default"]},validate:{query:!1,payload:{password:s},params:null},handler:r.loginUpdate,response:{schema:t.object().keys({token:t.string().required()})},description:"Update user password."}}),e.route({method:"POST",path:"/auth/reset",config:{auth:!1,validate:{query:!1,payload:t.object().keys({email:t.string().email().required()}),params:null},handler:r.resetPassword,description:"Send user an email with a token. The token is valid for 30 min and it can be used to change the password."}}),e.route({method:"GET",path:"/auth/scopes",config:{auth:{strategy:"token",scope:["default"]},handler:r.getScopes,validate:{query:!1,payload:!1,params:null},description:"Get all scopes"}}),e.route({method:"PUT",path:"/auth/scopes",config:{auth:{strategy:"token",scope:["admin"]},handler:r.updateScopes,validate:{query:!1,payload:n,params:null},description:"Update scope list"}})};