mirror of
https://github.com/strapi/strapi.git
synced 2025-07-19 07:02:26 +00:00
129 lines
2.9 KiB
JavaScript
129 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
const passport = require('koa-passport');
|
|
const compose = require('koa-compose');
|
|
|
|
const {
|
|
validateRegistrationInput,
|
|
validateAdminRegistrationInput,
|
|
validateRegistrationInfoQuery,
|
|
} = require('../validation/authentication');
|
|
|
|
module.exports = {
|
|
login: compose([
|
|
(ctx, next) => {
|
|
return passport.authenticate('local', { session: false }, (err, user, info) => {
|
|
if (err) {
|
|
return ctx.badImplementation();
|
|
}
|
|
|
|
if (!user) {
|
|
return ctx.badRequest(info.message);
|
|
}
|
|
|
|
ctx.state.user = user;
|
|
return next();
|
|
})(ctx, next);
|
|
},
|
|
ctx => {
|
|
const { user } = ctx.state;
|
|
|
|
ctx.body = {
|
|
data: {
|
|
token: strapi.admin.services.token.createJwtToken(user),
|
|
user: strapi.admin.services.user.sanitizeUser(ctx.state.user), // TODO: fetch more detailed info
|
|
},
|
|
};
|
|
},
|
|
]),
|
|
|
|
renewToken(ctx) {
|
|
const { token } = ctx.request.body;
|
|
|
|
if (token === undefined) {
|
|
return ctx.badRequest('Missing token');
|
|
}
|
|
|
|
const { isValid, payload } = strapi.admin.services.token.decodeJwtToken(token);
|
|
|
|
if (!isValid) {
|
|
return ctx.badRequest('Invalid token');
|
|
}
|
|
|
|
ctx.body = {
|
|
data: {
|
|
token: strapi.admin.services.token.createJwtToken(payload.id),
|
|
},
|
|
};
|
|
},
|
|
|
|
async registrationInfo(ctx) {
|
|
try {
|
|
await validateRegistrationInfoQuery(ctx.request.query);
|
|
} catch (err) {
|
|
return ctx.badRequest('QueryError', err);
|
|
}
|
|
|
|
const { registrationToken } = ctx.request.query;
|
|
|
|
const registrationInfo = await strapi.admin.services.user.findRegistrationInfo(
|
|
registrationToken
|
|
);
|
|
|
|
if (!registrationInfo) {
|
|
return ctx.badRequest('Invalid registrationToken');
|
|
}
|
|
|
|
ctx.body = { data: registrationInfo };
|
|
},
|
|
|
|
async register(ctx) {
|
|
const input = ctx.request.body;
|
|
|
|
try {
|
|
await validateRegistrationInput(input);
|
|
} catch (err) {
|
|
return ctx.badRequest('ValidationError', err);
|
|
}
|
|
|
|
const user = await strapi.admin.services.user.register(input);
|
|
|
|
ctx.body = {
|
|
data: {
|
|
token: strapi.admin.services.token.createJwtToken(user),
|
|
user: strapi.admin.services.user.sanitizeUser(user),
|
|
},
|
|
};
|
|
},
|
|
|
|
async registerAdmin(ctx) {
|
|
const input = ctx.request.body;
|
|
|
|
try {
|
|
await validateAdminRegistrationInput(input);
|
|
} catch (err) {
|
|
return ctx.badRequest('ValidationError', err);
|
|
}
|
|
|
|
const hasAdmin = await strapi.admin.services.user.exists();
|
|
|
|
if (hasAdmin) {
|
|
return ctx.badRequest('You cannot register a new super admin');
|
|
}
|
|
|
|
// TODO: assign super admin role
|
|
const user = await strapi.admin.services.user.create({
|
|
...input,
|
|
registrationToken: null,
|
|
isActive: true,
|
|
});
|
|
|
|
ctx.body = {
|
|
data: {
|
|
token: strapi.admin.services.token.createJwtToken(user),
|
|
user: strapi.admin.services.user.sanitizeUser(user),
|
|
},
|
|
};
|
|
},
|
|
};
|