UNPKG

@verdaccio/server-fastify

Version:

fastify server api implementation

112 lines (109 loc) 4.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _debug = _interopRequireDefault(require("debug")); var _lodash = _interopRequireDefault(require("lodash")); var _auth = require("@verdaccio/auth"); var _config = require("@verdaccio/config"); var _core = require("@verdaccio/core"); var _logger = require("@verdaccio/logger"); var _utils = require("@verdaccio/utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable no-console */ /* eslint-disable no-invalid-this */ const debug = (0, _debug.default)('verdaccio:fastify:user'); async function userRoute(fastify) { fastify.get('/:org_couchdb_user', async (request, reply) => { // @ts-ignore // TODO: compare org_couchdb_user with remote user name const message = (0, _utils.getAuthenticatedMessage)(request.userRemote.name); _logger.logger.info('user authenticated message %o', message); reply.code(fastify.statusCode.OK); return { ok: message }; }); fastify.delete('/token/:token', async (request, reply) => { debug('loging out'); const { token } = request.params; const userRemote = request.userRemote; await fastify.auth.invalidateToken(token); console.log('userRoute', userRemote); reply.code(fastify.statusCode.OK); return { ok: fastify.apiMessage.LOGGED_OUT }; }); fastify.put('/:username', async (request, reply) => { const { name, password } = request.body; const remoteName = request.userRemote.name; if (_lodash.default.isNil(remoteName) === false && _lodash.default.isNil(name) === false && remoteName === name) { // debug('login: no remote user detected'); fastify.auth.authenticate(name, password, async function callbackAuthenticate(err, user) { if (err) { _logger.logger.trace({ name, err }, 'authenticating for user @{username} failed. Error: @{err.message}'); reply.code(fastify.statusCode.UNAUTHORIZED).send(fastify.errorUtils.getCode(fastify.statusCode.UNAUTHORIZED, fastify.apiError.BAD_USERNAME_PASSWORD)); } const restoredRemoteUser = (0, _config.createRemoteUser)(name, (user === null || user === void 0 ? void 0 : user.groups) || []); const token = await (0, _auth.getApiToken)(fastify.auth, fastify.configInstance, restoredRemoteUser, password); debug('login: new token'); if (!token) { return reply.send(fastify.errorUtils.getUnauthorized()); } else { reply.code(fastify.statusCode.CREATED); const message = (0, _utils.getAuthenticatedMessage)(remoteName); debug('login: created user message %o', message); reply.send({ ok: message, token }); } }); } else { var _fastify$configInstan, _fastify$configInstan2; if (_core.validatioUtils.validatePassword(password, (_fastify$configInstan = fastify.configInstance) === null || _fastify$configInstan === void 0 ? void 0 : (_fastify$configInstan2 = _fastify$configInstan.server) === null || _fastify$configInstan2 === void 0 ? void 0 : _fastify$configInstan2.passwordValidationRegex) === false) { debug('adduser: invalid password'); reply.code(fastify.statusCode.BAD_REQUEST).send(fastify.errorUtils.getCode(fastify.statusCode.BAD_REQUEST, // eslint-disable-next-line new-cap fastify.apiError.PASSWORD_SHORT)); return; } fastify.auth.add_user(name, password, async function (err, user) { if (err) { if (err.status >= fastify.statusCode.BAD_REQUEST && err.status < fastify.statusCode.INTERNAL_ERROR) { debug('adduser: error on create user'); // With npm registering is the same as logging in, // and npm accepts only an 409 error. // So, changing status code here. const addUserError = fastify.errorUtils.getCode(err.status, err.message) || fastify.errorUtils.getConflict(err.message); reply.send(addUserError); return; } } const token = name && password ? await (0, _auth.getApiToken)(fastify.auth, fastify.configInstance, user, password) : undefined; debug('adduser: new token %o', token); if (!token) { return reply.send(fastify.errorUtils.getUnauthorized()); } debug('adduser: user has been created'); reply.code(fastify.statusCode.CREATED).send({ ok: `user '${name}' created`, token }); }); } }); } var _default = userRoute; exports.default = _default; //# sourceMappingURL=user.js.map