Skip to content

Commit 22adafc

Browse files
authored
Merge pull request #3371 from apinf/feature/add-authorized-user-by-username
Add Authorized users to API by using username
2 parents 5a8210d + 995485e commit 22adafc

File tree

11 files changed

+74
-97
lines changed

11 files changed

+74
-97
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/* Copyright 2017 Apinf Oy
2+
This file is covered by the EUPL license.
3+
You may obtain a copy of the licence at
4+
https://joinup.ec.europa.eu/community/eupl/og_page/european-union-public-licence-eupl-v11 */
5+
6+
// Meteor contributed packages imports
7+
import { AutoForm } from 'meteor/aldeed:autoform';
8+
import { TAPi18n } from 'meteor/tap:i18n';
9+
import { sAlert } from 'meteor/juliancwirko:s-alert';
10+
11+
AutoForm.hooks({
12+
authorizedUserForm: {
13+
onSuccess () {
14+
// Get success message translation
15+
const message = TAPi18n.__('authorizedUserForm_success_message');
16+
17+
// Alert user of success
18+
sAlert.success(message);
19+
},
20+
onError (formType, error) {
21+
// Get error type string from error object
22+
const errorType = error.error;
23+
24+
if (errorType === 'user-not-registered') {
25+
// Get error message translation
26+
const message = TAPi18n.__('authorizedUserForm_errorText_userNotRegistered');
27+
28+
// Display error
29+
sAlert.error(message, { timeout: 'none' });
30+
}
31+
32+
if (errorType === 'user-already-exist') {
33+
// Get error message translation
34+
const message = TAPi18n.__('authorizedUserForm_errorText_alreadyAuthorized');
35+
36+
// Display error
37+
sAlert.error(message, { timeout: 'none' });
38+
}
39+
},
40+
},
41+
});

apinf_packages/apis_authorization/client/form/form.html renamed to apinf_packages/apis/client/authorized_user/form/form.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ <h4>
1010
{{# autoForm
1111
schema=emailSchema
1212
id="authorizedUserForm"
13-
class="form-inline" }}
13+
class="form-inline"
14+
type="method"
15+
meteormethod="addAuthorizedUser"
16+
}}
1417
<fieldset>
15-
{{> afQuickField name='email' }}
16-
{{> afQuickField name='apiId' value=apiId type="hidden" }}
18+
<p>
19+
{{_ "apiUserAuthorizationForm_helpText_usernameEmail" }}
20+
</p>
21+
{{> afQuickField name='user' }}
22+
{{> afQuickField name='apiId' value=api._id type="hidden" }}
1723
</fieldset>
1824

1925
<button type="submit" class="btn btn-primary">

apinf_packages/apis_authorization/client/form/form.js renamed to apinf_packages/apis/client/authorized_user/form/form.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,7 @@ import { Template } from 'meteor/templating';
1010
import emailSchema from './schema';
1111

1212
Template.apiUserAuthorizationForm.helpers({
13-
apiId () {
14-
// Get API ID
15-
const apiId = Template.instance().data.api._id;
16-
17-
return apiId;
18-
},
1913
emailSchema () {
2014
return emailSchema;
2115
},
2216
});
23-
24-
Template.apiUserAuthorizationForm.events({
25-
'submit #authorizedUserForm': function (event) {
26-
// Prevent form from reloading page
27-
event.preventDefault();
28-
},
29-
});

apinf_packages/apis_authorization/client/form/schema.js renamed to apinf_packages/apis/client/authorized_user/form/schema.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ const emailSchema = new SimpleSchema({
1111
type: String,
1212
regEx: SimpleSchema.RegEx.Id,
1313
},
14-
email: {
14+
user: {
1515
type: String,
16-
regEx: SimpleSchema.RegEx.Email,
1716
},
1817
});
1918

apinf_packages/apis_authorization/client/remove/remove.js renamed to apinf_packages/apis/client/authorized_user/remove/remove.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Template } from 'meteor/templating';
1010
import { Modal } from 'meteor/peppelg:bootstrap-3-modal';
1111

1212
// Collection imports
13-
import Apis from '/apinf_packages/apis/collection';
13+
import Apis from '/apinf_packages/apis/collection/index';
1414

1515
Template.apiRemoveAuthorizedUser.events({
1616
'click #confirm-remove': function (event, templateInstance) {

apinf_packages/apis/server/methods/authorization.js

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,37 @@ import { check } from 'meteor/check';
1010
// Meteor contributed packages imports
1111
import { Accounts } from 'meteor/accounts-base';
1212
import { Roles } from 'meteor/alanning:roles';
13-
import { ValidEmail } from 'meteor/froatsnook:valid-email';
1413

1514
// Collection imports
1615
import Apis from '/apinf_packages/apis/collection';
1716
import Settings from '/apinf_packages/settings/collection';
1817

1918
Meteor.methods({
20-
addAuthorizedUserByEmail (apiId, email) {
21-
// Make sure apiId is a string
22-
check(apiId, String);
23-
24-
// Make sure email is a valid email
25-
check(email, ValidEmail);
19+
addAuthorizedUser (formData) {
20+
check(formData, Object);
2621

2722
// Get user with matching email
28-
const user = Accounts.findUserByEmail(email);
23+
const userByEmail = Accounts.findUserByEmail(formData.user);
24+
const userByUsername = Accounts.findUserByUsername(formData.user);
2925

30-
// Get API document
31-
const api = Apis.findOne(apiId);
26+
// "User" field can be e-mail value or username value
27+
const user = userByEmail || userByUsername;
3228

33-
// Check if user is already authorized
34-
const userAlreadyAuthorized = api.authorizedUserIds.includes(user._id);
29+
// No matching in both direction
30+
if (!user) {
31+
throw new Meteor.Error('user-not-registered');
32+
}
33+
34+
// Get API document
35+
const api = Apis.findOne(formData.apiId);
3536

3637
// Check if the user is already authorized
37-
if (!userAlreadyAuthorized) {
38-
// Add user ID to API authorized user IDs field
39-
Apis.update(apiId, { $push: { authorizedUserIds: user._id } });
38+
if (api.authorizedUserIds.includes(user._id)) {
39+
throw new Meteor.Error('user-already-exist');
4040
}
41+
42+
// Add user ID to API authorized user IDs field
43+
Apis.update(formData.apiId, { $push: { authorizedUserIds: user._id } });
4144
},
4245
currentUserCanViewApi (slug) {
4346
// Make sure apiId is a string

apinf_packages/apis_authorization/client/form/autoform.js

Lines changed: 0 additions & 61 deletions
This file was deleted.

0 commit comments

Comments
 (0)