mirror of
https://github.com/jambonz/jambonz-api-server.git
synced 2026-07-24 04:52:03 +00:00
feature/user-api-calls (#80)
* initial changes for jwt auth * return permissions as an array of string * basic GET, POST, DELETE user api calls * add permission checks * hide hashed_password * cleanup * add check if admin user is active * return account and serviceProvider sid un user object * add more values to user PUT * logout user after self delete, fix scope assignment * add admin scope user tests * fix test case and align jwt and api key data model in req.user * fixes for ibm speech * add limits license_count and voice_call_minutes * update limits enum again * rebase to main * allow predefined carriers and speech credentials for Account user * reverse the hasAccountPermissions changes * SpeechCredentials permissions * fix /Users/me api non-saas jambonz Co-authored-by: Dave Horton <daveh@beachdognet.com> Co-authored-by: eglehelms <e.helms@cognigy.com>
This commit is contained in:
@@ -79,13 +79,14 @@ test('service provider tests', async(t) => {
|
||||
}
|
||||
});
|
||||
//console.log(`result: ${JSON.stringify(result)}`);
|
||||
t.ok(result.statusCode === 422, 'cannot add two service providers with the same name');
|
||||
t.ok(result.statusCode === 422, 'cannot add two service providers with the same root domain');
|
||||
|
||||
/* query all service providers */
|
||||
result = await request.get('/ServiceProviders', {
|
||||
auth: authAdmin,
|
||||
json: true,
|
||||
});
|
||||
console.log(JSON.stringify(result));
|
||||
t.ok(result.length === 2 , 'successfully queried all service providers');
|
||||
|
||||
/* query one service providers */
|
||||
|
||||
+170
-4
@@ -1,8 +1,10 @@
|
||||
const test = require('tape') ;
|
||||
const jwt = require('jsonwebtoken');
|
||||
const request = require('request-promise-native').defaults({
|
||||
baseUrl: 'http://127.0.0.1:3000/v1'
|
||||
});
|
||||
const exec = require('child_process').exec ;
|
||||
const {generateHashedPassword} = require('../lib/utils/password-utils');
|
||||
|
||||
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
@@ -21,7 +23,7 @@ test('add an admin user', (t) => {
|
||||
|
||||
test('user tests', async(t) => {
|
||||
const app = require('../app');
|
||||
let sid;
|
||||
const password = await generateHashedPassword('abcd1234-');
|
||||
try {
|
||||
let result;
|
||||
|
||||
@@ -35,16 +37,180 @@ test('user tests', async(t) => {
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 200 && result.body.token, 'successfully logged in as admin');
|
||||
const authAdmin = {bearer: result.body.token};
|
||||
const decodedJwt = jwt.verify(result.body.token, process.env.JWT_SECRET);
|
||||
|
||||
/* add admin user */
|
||||
result = await request.post(`/Users`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
body: {
|
||||
name: 'admin2',
|
||||
email: 'admin2@jambonz.com',
|
||||
is_active: true,
|
||||
force_change: true,
|
||||
initial_password: password,
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 201 && result.body.user_sid, 'admin user created');
|
||||
const admin_user_sid = result.body.user_sid;
|
||||
|
||||
/* add a service provider */
|
||||
result = await request.post('/ServiceProviders', {
|
||||
resolveWithFullResponse: true,
|
||||
auth: authAdmin,
|
||||
json: true,
|
||||
body: {
|
||||
name: 'sp',
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 201, 'successfully created service provider');
|
||||
const sp_sid = result.body.sid;
|
||||
|
||||
/* add service_provider user */
|
||||
result = await request.post(`/Users`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
body: {
|
||||
name: 'service_provider',
|
||||
email: 'sp@jambonz.com',
|
||||
is_active: true,
|
||||
force_change: true,
|
||||
initial_password: password,
|
||||
service_provider_sid: sp_sid,
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 201 && result.body.user_sid, 'service_provider scope user created');
|
||||
const sp_user_sid = result.body.sid;
|
||||
|
||||
/* add an account */
|
||||
result = await request.post('/Accounts', {
|
||||
resolveWithFullResponse: true,
|
||||
auth: authAdmin,
|
||||
json: true,
|
||||
body: {
|
||||
name: 'sample_account',
|
||||
service_provider_sid: sp_sid,
|
||||
registration_hook: {
|
||||
url: 'http://example.com/reg',
|
||||
method: 'get'
|
||||
},
|
||||
webhook_secret: 'foobar'
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 201, 'successfully created account');
|
||||
const account_sid = result.body.sid;
|
||||
|
||||
/* add account user */
|
||||
result = await request.post(`/Users`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
body: {
|
||||
name: 'account',
|
||||
email: 'account@jambonz.com',
|
||||
is_active: true,
|
||||
force_change: true,
|
||||
initial_password: password,
|
||||
service_provider_sid: sp_sid,
|
||||
account_sid: account_sid
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 201 && result.body.user_sid, 'account scope user created');
|
||||
const account_user_sid = result.body.sid;
|
||||
|
||||
/* retrieve list of users */
|
||||
const authAdmin = {bearer: result.body.token};
|
||||
result = await request.get(`/Users`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
});
|
||||
//console.log(result.body);
|
||||
t.ok(result.statusCode === 200 && result.body.length === 1, 'successfully user list');
|
||||
t.ok(result.statusCode === 200 && result.body.length, 'successfully user list');
|
||||
|
||||
/* delete account user */
|
||||
result = await request.delete(`/Users/${account_user_sid}`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
});
|
||||
t.ok(result.statusCode === 204, 'account scope user deleted');
|
||||
|
||||
/* delete sp user */
|
||||
result = await request.delete(`/Users/${sp_user_sid}`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
});
|
||||
t.ok(result.statusCode === 204, 'account scope user deleted');
|
||||
|
||||
/* delete admin user */
|
||||
result = await request.delete(`/Users/${admin_user_sid}`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
});
|
||||
t.ok(result.statusCode === 204, 'account scope user deleted');
|
||||
|
||||
// /* self delete as admin user */
|
||||
// result = await request.delete(`/Users/${decodedJwt.user_sid}`, {
|
||||
// resolveWithFullResponse: true,
|
||||
// json: true,
|
||||
// auth: authAdmin,
|
||||
// });
|
||||
// t.ok(result.statusCode === 500 && result.error.msg === 'cannot delete this admin user - there are no other active admin users');
|
||||
|
||||
/* add another service_provider user */
|
||||
result = await request.post(`/Users`, {
|
||||
resolveWithFullResponse: true,
|
||||
json: true,
|
||||
auth: authAdmin,
|
||||
body: {
|
||||
name: 'service_provider1',
|
||||
email: 'sp1@jambonz.com',
|
||||
is_active: true,
|
||||
force_change: false,
|
||||
initial_password: password,
|
||||
service_provider_sid: sp_sid,
|
||||
}
|
||||
});
|
||||
t.ok(result.statusCode === 201 && result.body.user_sid, 'service_provider scope user created');
|
||||
|
||||
/* logout as sp to get a jwt */
|
||||
result = await request.post('/logout', {
|
||||
resolveWithFullResponse: true,
|
||||
auth: authAdmin,
|
||||
json: true,
|
||||
});
|
||||
t.ok(result.statusCode === 204, 'successfully logged out');
|
||||
|
||||
// /* login as sp user to get a jwt */
|
||||
// result = await request.post('/login', {
|
||||
// resolveWithFullResponse: true,
|
||||
// json: true,
|
||||
// body: {
|
||||
// username: 'service_provider1',
|
||||
// password: 'abcd1234-',
|
||||
// }
|
||||
// });
|
||||
// t.ok(result.statusCode === 200 && result.body.token, 'successfully logged in as sp');
|
||||
// const authSPUser = {bearer: result.body.token};
|
||||
|
||||
// result = await request.post(`/Users`, {
|
||||
// resolveWithFullResponse: true,
|
||||
// json: true,
|
||||
// auth: authSPUser,
|
||||
// body: {
|
||||
// name: 'sp2',
|
||||
// email: 'sp2@jambonz.com',
|
||||
// is_active: true,
|
||||
// force_change: false,
|
||||
// initial_password: password,
|
||||
// }
|
||||
// });
|
||||
// t.ok(result.statusCode === 403, 'sp user cannot create admin users');
|
||||
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
t.end(err);
|
||||
|
||||
Reference in New Issue
Block a user