Skip to content
Snippets Groups Projects
Commit e6fd645b authored by Alexander Olofsson's avatar Alexander Olofsson
Browse files

Fix up per-user settings

parent 3ead61af
Branches
Tags
No related merge requests found
......@@ -32,7 +32,7 @@
</div>
</transition>
<h2 class="mt-4 mb-3">Existing external users: ({{ external.length }}/{{ user.user_limit }})</h2>
<h2 class="mt-4 mb-3">Existing external users: ({{ external.length }}/<span v-if="user.user_limit > 0">{{ user.user_limit }}</span><span v-else>&infin;</span>)</h2>
<hr/>
<transition name="fade" mode="out-in">
<ul class="list-unstyled" is="transition-group" name="flip-list" v-if="external">
......
......@@ -34,21 +34,27 @@ module.exports = {
reset_password: true
},
// Can users deactivate external users created by them
can_user_deactivate: false,
// Default limit of external users
external_limit: 5,
user: {
// Can users deactivate external users created by them
can_deactivate: false,
// Default limit of external users
external_limit: 5,
}
// Apply configuration per user
//
// *user* will contain the parameters from https://gitlab.liu.se/help/api/users.md#for-admin
// *config* will contain the same as the `user` block
per_user: function(user, config) {
if (user.external) {
// Disallow creation by external users
config.external_limit = 0
} else if (user.username =~ /^[a-z]{4}[0-9]{2}$/) {
} else if (user.is_admin) {
// Unlimited external users
config.external_limit = null
config.external_limit = -1
} else if (user.username =~ /^[a-z]{4}[0-9]{2}$/) {
// More external users
config.external_limit = 15
}
}
}
......@@ -15,6 +15,13 @@ var _strategy = new GitLabStrategy({
baseURL: config.gitlab.url
}, (access, refresh, profile, cb) => {
var user = Object.assign({}, profile, { _token: access, _refresh: refresh });
var userConfig = Object.assign({}, config.user);
if (typeof(config.per_user) === 'function') {
config.per_user(Object.assign({}, user._json), userConfig);
}
user.eum_settings = userConfig
cb(null, user);
}
);
......@@ -40,7 +47,7 @@ router.get('/', (req, res) => {
console.log('GET: /auth');
if (req.user) {
res.send(Object.assign({}, req.user._json, { user_limit: config.external_limit }));
res.send(Object.assign({}, req.user._json, { eum_settings: req.user.eum_settings }));
} else {
res.status(401).send({ message: 'Not authenticated' });
}
......
......@@ -37,17 +37,19 @@ router.post('/', async (req, res) => {
.filter( key => ['email','username','name','skype','linkedin','twitter','website_url','organization','bio','location','avatar'].includes(key) )
.reduce( (rs, key) => (rs[key] = req.body[key], rs), {} );
try {
const queryText = 'SELECT * FROM external_users WHERE owner_id = $1';
const dbResponse = await db.query(queryText, [req.user.id]);
if (req.user.eum_settings.external_limit > 0) {
try {
const queryText = 'SELECT * FROM external_users WHERE owner_id = $1';
const dbResponse = await db.query(queryText, [req.user.id]);
if (dbResponse.rowCount >= config.external_limit) {
return res.status(403).send({ 'message': 'External user limit reached' });
if (dbResponse.rowCount >= req.user.eum_settings.external_limit) {
return res.status(403).send({ 'message': 'External user limit reached' });
}
} catch(err) {
console.log("> DB Error:");
console.log(err);
return res.status(500).send({ 'message': "Database error occured" });
}
} catch(err) {
console.log("> DB Error:");
console.log(err);
return res.status(500).send({ 'message': "Database error occured" });
}
// TODO: Apply further validation on input
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment