@verdaccio/server-fastify
Version:
fastify server api implementation
112 lines (109 loc) • 4.76 kB
JavaScript
;
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