Remove unused invite and SSH-key user features
Both were dead/incomplete: POST /api/user/key called a nonexistent User.addSSHkey, and the invite flow (POST /api/user/invite, User.invite, User.addByInvite, InviteToken) had no consumer or UI. Drop the routes, the InviteToken model, and the per-backing invite methods. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-24
@@ -61,27 +61,4 @@ class AuthToken extends Token{
|
|||||||
}
|
}
|
||||||
AuthToken.register();
|
AuthToken.register();
|
||||||
|
|
||||||
class InviteToken extends Token{
|
module.exports = {Token, AuthToken};
|
||||||
static _keyMap = {
|
|
||||||
...super._keyMap,
|
|
||||||
claimed_by: {default:"__NONE__", isRequired: false, type: 'string',},
|
|
||||||
}
|
|
||||||
|
|
||||||
async consume(data){
|
|
||||||
try{
|
|
||||||
if(this.is_valid){
|
|
||||||
data['is_valid'] = false;
|
|
||||||
|
|
||||||
await this.update(data);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}catch(error){
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
InviteToken.register();
|
|
||||||
|
|
||||||
module.exports = {Token, InviteToken, AuthToken};
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const { Client, Attribute, Change } = require('ldapts');
|
const { Client, Attribute, Change } = require('ldapts');
|
||||||
const {Token, InviteToken} = require('./token');
|
const {Token} = require('./token');
|
||||||
const conf = require('@simpleworkjs/conf').ldap;
|
const conf = require('@simpleworkjs/conf').ldap;
|
||||||
|
|
||||||
const client = new Client({
|
const client = new Client({
|
||||||
@@ -141,17 +141,6 @@ User.exists = async function(data){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
User.invite = async function(){
|
|
||||||
try{
|
|
||||||
let token = await InviteToken.add({created_by: this.username});
|
|
||||||
|
|
||||||
return token;
|
|
||||||
|
|
||||||
}catch(error){
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
User.login = async function(data){
|
User.login = async function(data){
|
||||||
try{
|
try{
|
||||||
let user = await this.get(data.username);
|
let user = await this.get(data.username);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const linuxUser = require('linux-sys-user').promise();
|
const linuxUser = require('linux-sys-user').promise();
|
||||||
const objValidate = require('../utils/object_validate');
|
const objValidate = require('../utils/object_validate');
|
||||||
const {Token, InviteToken} = require('./token');
|
const {Token} = require('./token');
|
||||||
const {promisify} = require('util');
|
const {promisify} = require('util');
|
||||||
const pam = require('authenticate-pam');
|
const pam = require('authenticate-pam');
|
||||||
const authenticate = promisify(pam.authenticate);
|
const authenticate = promisify(pam.authenticate);
|
||||||
@@ -90,31 +90,6 @@ User.create = async function(data) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
User.addByInvite = async function(data){
|
|
||||||
try{
|
|
||||||
let token = await InviteToken.get(data.token);
|
|
||||||
|
|
||||||
if(!token.is_valid){
|
|
||||||
let error = new Error('Token Invalid');
|
|
||||||
error.name = 'Token Invalid';
|
|
||||||
error.message = `Token is not valid or as allready been used. ${data.token}`;
|
|
||||||
error.status = 401;
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
|
|
||||||
let user = await this.add(data);
|
|
||||||
|
|
||||||
if(user){
|
|
||||||
await token.consume({claimed_by: user.username});
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
|
|
||||||
}catch(error){
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
User.remove = async function(data){
|
User.remove = async function(data){
|
||||||
try{
|
try{
|
||||||
return await linuxUser.removeUser(this.username);
|
return await linuxUser.removeUser(this.username);
|
||||||
@@ -133,17 +108,6 @@ User.setPassword = async function(data){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
User.invite = async function(){
|
|
||||||
try{
|
|
||||||
let token = await InviteToken.add({created_by: this.username});
|
|
||||||
|
|
||||||
return token;
|
|
||||||
|
|
||||||
}catch(error){
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
User.login = async function(data){
|
User.login = async function(data){
|
||||||
try{
|
try{
|
||||||
let auth = await authenticate(data.username, data.password);
|
let auth = await authenticate(data.username, data.password);
|
||||||
|
|||||||
+2
-30
@@ -13,8 +13,8 @@ function validatePassword(password){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// User management is global-admin-only, except the self-service routes below
|
// User management is global-admin-only, except the self-service routes below
|
||||||
// (GET /me, PUT /password, POST /key) which any authenticated user may call for
|
// (GET /me, PUT /password) which any authenticated user may call for their own
|
||||||
// their own account.
|
// account.
|
||||||
|
|
||||||
router.get('/', authz.requireAdmin, async function(req, res, next){
|
router.get('/', authz.requireAdmin, async function(req, res, next){
|
||||||
try{
|
try{
|
||||||
@@ -92,32 +92,4 @@ router.put('/password/:username', authz.requireAdmin, async function(req, res, n
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
router.post('/invite', authz.requireAdmin, async function(req, res, next){
|
|
||||||
try{
|
|
||||||
let token = await req.user.invite();
|
|
||||||
|
|
||||||
return res.json({token: token.token});
|
|
||||||
}catch(error){
|
|
||||||
next(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Self-service: add an SSH key to your own account.
|
|
||||||
router.post('/key', async function(req, res, next){
|
|
||||||
try{
|
|
||||||
let added = await User.addSSHkey({
|
|
||||||
username: authz.reqUsername(req),
|
|
||||||
key: req.body.key
|
|
||||||
});
|
|
||||||
|
|
||||||
return res.status(added === true ? 200 : 400).json({
|
|
||||||
message: added
|
|
||||||
});
|
|
||||||
|
|
||||||
}catch(error){
|
|
||||||
next(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
Reference in New Issue
Block a user