Skip to content

Commit b78ae3d

Browse files
authored
Merge pull request #333 from topcoder-platform/feature/primary-role
feat: primary role
2 parents a4b385a + 022de80 commit b78ae3d

File tree

7 files changed

+181
-201
lines changed

7 files changed

+181
-201
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ workflows:
7070
branches:
7171
only:
7272
- dev
73-
- jira-plat-742
73+
- feature/primary-role
7474

7575
# Production builds are exectuted only on tagged commits to the
7676
# master branch.

web-assets/auth0/dev-tenant/database/create.js

Lines changed: 53 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -21,133 +21,66 @@
2121
// callback(new ValidationError("user_exists", "my error message"));
2222
// 3. Something went wrong while trying to reach your database
2323
// callback(new Error("my error message"));
24-
2524
const msg = 'Please implement the Create script for this database connection ' +
2625
'at https://manage.auth0.com/#/connections/database';
2726
return callback(new Error(msg)); */
28-
function create(user, callback) {
29-
//console.log("landed here...................................");
30-
var countryObj = JSON.parse(user.user_metadata.country);
31-
var regSource = user.user_metadata.reg_source;
32-
var utmSource = user.user_metadata.utm_source;
33-
var utmMedium = user.user_metadata.utm_medium;
34-
var utmCampaign = user.user_metadata.utm_campaign;
35-
var retUrl = user.user_metadata.returnUrl;
36-
var afterActivationURL =
37-
retUrl !== null ? retUrl : "https://" + configuration.DOMAIN + "/home";
38-
if (regSource === configuration.REG_BUSINESS) {
39-
afterActivationURL = "https://connect." + configuration.DOMAIN;
40-
}
41-
var data = {
42-
param: {
43-
handle: user.username,
44-
email: user.email,
45-
credential: {
46-
password: user.password,
47-
},
48-
firstName: user.user_metadata.firstName,
49-
lastName: user.user_metadata.lastName,
50-
country: {
51-
code: countryObj.code,
52-
isoAlpha3Code: countryObj.alpha3,
53-
isoAlpha2Code: countryObj.alpha2,
54-
},
55-
regSource: regSource,
56-
utmSource: utmSource,
57-
utmMedium: utmMedium,
58-
utmCampaign: utmCampaign,
59-
},
60-
options: {
61-
afterActivationURL: encodeURIComponent(afterActivationURL),
62-
},
63-
};
64-
//console.log("SignUp....", user, data);
65-
request.post(
66-
{
67-
url: "https://api." + configuration.DOMAIN + "/v3/users",
68-
json: data,
69-
//for more options check:
70-
//https://github.com/mikeal/request#requestoptions-callback
71-
},
72-
function (err, response, body) {
73-
// console.log(err);
74-
// console.log(response.statusCode);
75-
// console.log(body.result.content);
76-
77-
if (err) return callback(err);
78-
console.log(body.result.content);
79-
if (response.statusCode !== 200) {
80-
//return callback(new ValidationError("lock.fallback",body.result.content));
81-
const error_message = body.result.content;
82-
let code = "lock.fallback";
27+
function create(user, callback) {
8328

84-
if (error_message.search("Handle may not contain a space") !== -1) {
85-
code = "handle_invalid_space";
86-
} else if (
87-
error_message.search(
88-
"Length of Handle in character should be between 2 and 15"
89-
) !== -1
90-
) {
91-
code = "handle_invalid_length";
92-
} else if (
93-
error_message.search(
94-
"Please choose another handle, not starting with admin"
95-
) !== -1
96-
) {
97-
code = "handle_invalid_startwith_admin";
98-
} else if (
99-
error_message.search(
100-
"Handle may contain only letters, numbers and"
101-
) !== -1
102-
) {
103-
code = "handle_invalid_constains_forbidden_char";
104-
} else if (
105-
error_message.search("Handle may not contain only punctuation") !== -1
106-
) {
107-
code = "handle_invalid_conatins_only_punctuation";
108-
} else if (error_message.search("The user already exists") !== -1) {
109-
code = "user_exists";
110-
} else if (error_message.search("has already been taken") !== -1) {
111-
code = "user_exists";
29+
var countryObj = JSON.parse(user.user_metadata.country);
30+
var regSource = user.user_metadata.regSource;
31+
var utmSource = user.user_metadata.utmSource;
32+
var utmMedium = user.user_metadata.utmMedium;
33+
var utmCampaign = user.user_metadata.utmCampaign;
34+
var retUrl = user.user_metadata.returnUrl;
35+
var afterActivationURL = retUrl ? retUrl : "https://www."+configuration.DOMAIN+"/start";
36+
if (regSource === configuration.REG_BUSINESS) {
37+
afterActivationURL = "https://connect."+configuration.DOMAIN;
38+
}
39+
var data = {
40+
"param": {
41+
"handle": user.username,
42+
"email": user.email,
43+
"credential": {
44+
"password": user.password
45+
},
46+
"firstName": user.user_metadata.firstName,
47+
"lastName": user.user_metadata.lastName,
48+
"country": {
49+
"code": countryObj.code,
50+
"isoAlpha3Code": countryObj.alpha3,
51+
"isoAlpha2Code": countryObj.alpha2
52+
},
53+
"primaryRole": user.user_metadata.primaryRole,
54+
"regSource": regSource,
55+
"utmSource": utmSource,
56+
"utmMedium": utmMedium,
57+
"utmCampaign": utmCampaign,
58+
},
59+
"options": {
60+
"afterActivationURL": encodeURIComponent(afterActivationURL)
11261
}
62+
};
63+
console.log("SignUp....", user, data);
64+
request.post({
65+
url: "http://api."+configuration.DOMAIN+"/v3/users",
66+
json: data
67+
//for more options check:
68+
//https://github.com/mikeal/request#requestoptions-callback
69+
}, function (err, response, body) {
11370

114-
return callback(new ValidationError(code, error_message));
71+
console.log(err);
72+
console.log(response.statusCode);
73+
console.log(body);
11574

116-
//return callback(new Error(body.result.content));
117-
}
118-
//if (response.statusCode === 401) return callback();
119-
/* const Analytics = require('analytics-node');
120-
const _ = require('lodash');
121-
var analytics = new Analytics('bkPtWMUMTYDhww2zsJluzxtdhtmSsyd9');
122-
analytics.identify({
123-
anonymousId: 'signup',
124-
traits: {
125-
user: _.omit(user, ['credential', 'password'])
126-
}
127-
});
128-
analytics.track({
129-
anonymousId: 'BXWXUWnilVUPdN01t2Se29Tw2ZYNGZvH',
130-
event: 'signUp',
131-
properties: _.omit(user, ['credential', 'password'])
132-
});*/
133-
/* const ua = require('universal-analytics');
134-
let visitor = ua('UA-6340959-1');
135-
visitor.pageview("/signup").send();
136-
var eParams = {
137-
ec: "utmCode",
138-
ea: "tracking",
139-
el: "tracking",
140-
cn: utmCampaign,
141-
cm: utmMedium,
142-
cs: utmSource,
143-
dp: "/signup"
144-
};
75+
if (err) return callback(err);
14576

146-
visitor.event(eParams).send(); */
147-
callback(null);
148-
}
149-
); //end post request
150-
//callback(null);
77+
if (response.statusCode !== 200) {
78+
return callback(new ValidationError('user_exists', body.result.content));
79+
}
80+
//if (response.statusCode === 401) return callback();
81+
callback(null);
82+
}); //end post request
83+
//callback(null);
15184
}
15285

153-
//}
86+
//}
Lines changed: 64 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
function (user, context, callback) {
1+
function OnboardingChecklist(user, context, callback) {
22
if (context.clientID === configuration.CLIENT_ACCOUNTS_LOGIN) {
33
console.log("rule:onboarding-checklist:enter");
4-
5-
if (context.redirect) {
4+
5+
if (context.redirect) {
66
console.log("rule:onboarding-checklist:exiting due to context being a redirect");
77
return callback(null, user, context);
88
}
@@ -24,10 +24,17 @@ function (user, context, callback) {
2424
const handle = context.idToken[global.AUTH0_CLAIM_NAMESPACE + 'handle'];
2525
console.log("rule:onboarding-checklist: fetch onboarding_checklist for email/handle: ", user.email, handle);
2626

27-
if (handle == null) {
27+
if (handle === null) {
2828
console.log("rule:onboarding-checklist: exiting due to handle being null.");
2929
return callback(null, user, context);
3030
}
31+
32+
const roles = context.idToken[global.AUTH0_CLAIM_NAMESPACE + 'roles'];
33+
34+
if (roles && roles.includes('Topcoder Customer')) {
35+
console.log("rule:onboarding-checklist:exiting due to user being a customer.");
36+
return callback(null, user, context);
37+
}
3138

3239
const createdAt = _.get(user, "created_at", null);
3340
const thresholdDate = moment(configuration.PROFILE_CREATION_DATE_THRESHOLD, "YYYY-MM-DD");
@@ -42,14 +49,14 @@ function (user, context, callback) {
4249
} catch (err) {
4350
console.log("rule:onboarding-checklist: failed to compare userCreationDate", createdAt, " with threshold. Error", err);
4451
}
45-
52+
4653
/**
4754
* Returns M2M token needed to fetch onboarding_checklist
4855
*/
49-
const getToken = function(callback) {
56+
const getToken = function (callback) {
5057
if (global.M2MToken) {
5158
console.log('rule:onboarding-checklist:M2M token is available');
52-
const jwt = require('jsonwebtoken');
59+
const jwt = require('jsonwebtoken');
5360
const decoded = jwt.decode(global.M2MToken);
5461
const exp = moment.unix(decoded.exp);
5562

@@ -72,7 +79,7 @@ function (user, context, callback) {
7279
}
7380
}, function (err, response, body) {
7481
if (err) {
75-
return callback(err);
82+
return callback(err);
7683
}
7784

7885
global.M2MToken = body.access_token;
@@ -81,83 +88,82 @@ function (user, context, callback) {
8188
});
8289
};
8390

84-
getToken(function(err, token) {
91+
getToken(function (err, token) {
8592
if (err) {
8693
console.log('rule:onboarding-checklist:failed to fetch M2M token.');
8794
return callback(null, user, context);
8895
}
8996
global.AUTH0_CLAIM_NAMESPACE = "https://" + configuration.DOMAIN + "/";
9097
const axios = require('[email protected]');
91-
98+
9299
const options = {
93100
method: 'GET',
94101
url: `https://api.${configuration.DOMAIN}/v5/members/${handle}/traits?traitIds=onboarding_checklist`,
95102
headers: {
96103
Authorization: `Bearer ${token}`
97104
}
98105
};
99-
106+
100107
// Fetch onboarding_checklist using v5 member Api.
101108
axios(options)
102-
.then(result => {
103-
try {
104-
const data = result.data;
105-
106-
if (data.length === 0) {
107-
// User doesn't have any traits with traitId onboarding_checklist and should be shown the onboarding wizard
108-
context.idToken[global.AUTH0_CLAIM_NAMESPACE + 'onboarding_wizard'] = 'show';
109-
console.log('rule:onboarding-checklist:Setting onboarding_wizard to show');
110-
return callback(null, user, context);
111-
}
109+
.then(result => {
110+
try {
111+
const data = result.data;
112+
113+
if (data.length === 0) {
114+
// User doesn't have any traits with traitId onboarding_checklist and should be shown the onboarding wizard
115+
context.idToken[global.AUTH0_CLAIM_NAMESPACE + 'onboarding_wizard'] = 'show';
116+
console.log('rule:onboarding-checklist:Setting onboarding_wizard to show');
117+
return callback(null, user, context);
118+
}
112119

113-
const onboardingChecklistTrait = data.filter((item) => item.traitId === 'onboarding_checklist')[0].traits;
114-
let override = 'show';
115-
116-
for (let checklistTrait of onboardingChecklistTrait.data) {
117-
if (checklistTrait.onboarding_wizard != null) {
118-
if ( checklistTrait.onboarding_wizard.status !== 'pending_at_user' || // any non pending_at_user status indicates OB was either seen or completed and can be skipped
119-
checklistTrait.onboarding_wizard.skip ||// for certain signup routes skip is set to true, and thus onboarding wizard needn't be shown
120-
checklistTrait.onboarding_wizard.override === 'skip')
121-
{
122-
return callback(null, user, context);
123-
} else if (checklistTrait.onboarding_wizard.override === 'useRetUrl') {
124-
override = 'useRetUrl';
120+
const onboardingChecklistTrait = data.filter((item) => item.traitId === 'onboarding_checklist')[0].traits;
121+
let override = 'show';
122+
123+
for (let checklistTrait of onboardingChecklistTrait.data) {
124+
if (checklistTrait.onboarding_wizard !== null) {
125+
if (checklistTrait.onboarding_wizard.status !== 'pending_at_user' || // any non pending_at_user status indicates OB was either seen or completed and can be skipped
126+
checklistTrait.onboarding_wizard.skip ||// for certain signup routes skip is set to true, and thus onboarding wizard needn't be shown
127+
checklistTrait.onboarding_wizard.override === 'skip') {
128+
return callback(null, user, context);
129+
} else if (checklistTrait.onboarding_wizard.override === 'useRetUrl') {
130+
override = 'useRetUrl';
131+
}
125132
}
126133
}
127-
}
128134

129-
const profileCompletedData = onboardingChecklistTrait.data.length > 0 ? onboardingChecklistTrait.data[0].profile_completed : null;
130-
131-
if (profileCompletedData) {
132-
if (profileCompletedData.status === "completed") {
133-
return callback(null, user, context);
134-
}
135-
136-
for (const item in profileCompletedData.metadata) {
137-
if (profileCompletedData.metadata[item]) {
135+
const profileCompletedData = onboardingChecklistTrait.data.length > 0 ? onboardingChecklistTrait.data[0].profile_completed : null;
136+
137+
if (profileCompletedData) {
138+
if (profileCompletedData.status === "completed") {
138139
return callback(null, user, context);
139140
}
141+
142+
for (const item in profileCompletedData.metadata) {
143+
if (profileCompletedData.metadata[item]) {
144+
return callback(null, user, context);
145+
}
146+
}
140147
}
141-
}
142-
143-
// All checks failed - indicating user newly registered and needs to be shown the onboarding wizard
144-
console.log('rule:onboarding-checklist: set onboarding_wizard ' + override);
145-
146-
context.idToken[global.AUTH0_CLAIM_NAMESPACE + 'onboarding_wizard'] = override;
147148

149+
// All checks failed - indicating user newly registered and needs to be shown the onboarding wizard
150+
console.log('rule:onboarding-checklist: set onboarding_wizard ' + override);
148151

152+
context.idToken[global.AUTH0_CLAIM_NAMESPACE + 'onboarding_wizard'] = override;
149153

154+
155+
156+
return callback(null, user, context);
157+
} catch (e) {
158+
console.log("rule:onboarding-checklist:Error in fetching onboarding_checklist", e);
159+
return callback(null, user, context);
160+
}
161+
}).catch(requestError => {
162+
console.log("rule:onboarding-checklist:Failed fetching onboarding_checklist with error", requestError.response.status);
150163
return callback(null, user, context);
151-
} catch (e) {
152-
console.log("rule:onboarding-checklist:Error in fetching onboarding_checklist", e);
153-
return callback(null, user, context);
154-
}
155-
}).catch(requestError => {
156-
console.log("rule:onboarding-checklist:Failed fetching onboarding_checklist with error", requestError.response.status);
157-
return callback(null, user, context);
158-
});
164+
});
159165
});
160166
} else {
161167
return callback(null, user, context);
162168
}
163-
}
169+
}

0 commit comments

Comments
 (0)