5dcc75195c
- Use published @simpleworkjs/orm ^0.2.8 (fixes redis adapter write path)
and model-redis ^1.6.0 instead of a local file: link that broke docker
npm ci with a misleading "no lockfile" error.
- OtpToken.issue/verify: replace nonexistent find()/listDetail() with
list({where}).
- routes/auth.js: ImpersonationToken.listDetail() -> list({where}).
- routes/token.js: drop listDetail() call; 404 on missing token instead
of returning {results: null} with 200 (orm get() returns null, does
not throw like model-redis Table.get did).
- OAuthClient: Resource has no is_valid column, so every client read as
disabled and all /oauth/authorize requests 400'd — validity now lives
in metadata (absent = valid). Also generate a unique slug on create
(Resource.slug is required+unique) and use Resource.get() for lookup.
- User.login: 401 cleanly when neither uid nor username is supplied.
- models/index.js: log ORM init and surface init failures.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
79 lines
1.7 KiB
JavaScript
79 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
const router = require('express').Router();
|
|
const {AuthToken} = require('../models/auth');
|
|
var tokens = require('../models/token');
|
|
// const {Token, InviteToken, PasswordResetToken} = require('../models/token');
|
|
|
|
delete tokens.Token;
|
|
|
|
// const tokens = {
|
|
// auth: AuthToken,
|
|
// invite: InviteToken,
|
|
// password: PasswordResetToken,
|
|
// }
|
|
|
|
router.get('/', async function(req, res, next){
|
|
try{
|
|
return res.json({results: Object.keys(tokens)})
|
|
}catch(error){
|
|
throw(error);
|
|
}
|
|
});
|
|
|
|
router.get('/:name', async function(req, res, next){
|
|
try{
|
|
// ORM models: list() on the redis adapter always returns full rows;
|
|
// detail is handled by serialization (isPrivate fields are excluded).
|
|
return res.json({
|
|
results: await tokens[req.params.name].list()
|
|
});
|
|
}catch(error){
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
|
|
router.get('/:name/:token', async function(req, res, next){
|
|
try{
|
|
const result = await tokens[req.params.name].get(req.params.token);
|
|
if (!result) {
|
|
const error = new Error('Token not found');
|
|
error.status = 404;
|
|
throw error;
|
|
}
|
|
return res.json({ results: result });
|
|
}catch(error){
|
|
next(error);
|
|
}
|
|
});
|
|
|
|
// router.delete('/:username', async function(req, res, next){
|
|
// try{
|
|
// let user = await User.get(req.params.username);
|
|
|
|
// return res.json({username: req.params.username, results: await user.remove()})
|
|
// }catch(error){
|
|
// next(error);
|
|
// }
|
|
// });
|
|
|
|
module.exports = router;
|
|
|
|
/*
|
|
verify public ssh key
|
|
*/
|
|
// router.post('/verifykey', async function(req, res){
|
|
// let key = req.body.key;
|
|
|
|
// try{
|
|
// return res.json({
|
|
// info: await Users.verifyKey(key)
|
|
// });
|
|
// }catch(error){
|
|
// return res.status(400).json({
|
|
// message: 'Key is not a public key file!'
|
|
// });
|
|
// }
|
|
|
|
// });
|