Skip to content

Commit 2526047

Browse files
committed
Conditionally enforcing acceptToc when creating account
1 parent 6d6fe00 commit 2526047

File tree

5 files changed

+854
-32
lines changed

5 files changed

+854
-32
lines changed

lib/create-app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ function initAppLocals (app, argv, ldp) {
124124
app.locals.authMethod = argv.auth
125125
app.locals.localAuth = argv.localAuth
126126
app.locals.tokenService = new TokenService()
127+
app.locals.enforceToc = argv.enforceToc
128+
app.locals.tocUri = argv.tocUri
127129

128130
if (argv.email && argv.email.host) {
129131
app.locals.emailService = new EmailService(argv.templates.email, argv.email)

lib/requests/auth-request.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class AuthRequest {
8888

8989
let authQueryParams = AuthRequest.extractAuthParams(req)
9090
let returnToUrl = AuthRequest.parseParameter(req, 'returnToUrl')
91+
const acceptToc = AuthRequest.parseParameter(req, 'acceptToc')
9192

9293
let options = {
9394
response: res,
@@ -96,7 +97,8 @@ class AuthRequest {
9697
accountManager,
9798
returnToUrl,
9899
authQueryParams,
99-
localAuth
100+
localAuth,
101+
acceptToc
100102
}
101103

102104
return options

lib/requests/create-account-request.js

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ class CreateAccountRequest extends AuthRequest {
2929
* this url on successful account creation
3030
* @param [options.enforceToc] {boolean} Whether or not to enforce the service provider's T&C
3131
* @param [options.tocUri] {string} URI to the service provider's T&C
32+
* @param [options.acceptToc] {boolean} Whether or not user has accepted T&C
3233
*/
3334
constructor (options) {
3435
super(options)
3536

3637
this.username = options.username
3738
this.userAccount = options.userAccount
39+
this.acceptToc = options.acceptToc === 'true'
3840
}
3941

4042
/**
@@ -48,7 +50,7 @@ class CreateAccountRequest extends AuthRequest {
4850
* `userAccountFrom()`), or it encounters an unsupported authentication
4951
* scheme.
5052
*
51-
* @return {CreateAccountRequest|CreateTlsAccountRequest}
53+
* @return {CreateOidcAccountRequest|CreateTlsAccountRequest}
5254
*/
5355
static fromParams (req, res) {
5456
let options = AuthRequest.requestOptions(req, res)
@@ -64,9 +66,8 @@ class CreateAccountRequest extends AuthRequest {
6466
options.userAccount = accountManager.userAccountFrom(body)
6567
}
6668

67-
const config = require('../../config')
68-
options.enforceToc = config.enforceToc
69-
options.tocUri = config.tocUri
69+
options.enforceToc = locals.enforceToc
70+
options.tocUri = locals.tocUri
7071

7172
switch (authMethod) {
7273
case 'oidc':
@@ -80,13 +81,15 @@ class CreateAccountRequest extends AuthRequest {
8081
}
8182
}
8283

83-
static post (req, res) {
84+
static async post (req, res) {
8485
let request = CreateAccountRequest.fromParams(req, res)
8586

86-
return Promise.resolve()
87-
.then(() => request.validate())
88-
.then(() => request.createAccount())
89-
.catch(error => request.error(error))
87+
try {
88+
request.validate()
89+
await request.createAccount()
90+
} catch (error) {
91+
request.error(error)
92+
}
9093
}
9194

9295
static get (req, res) {
@@ -251,6 +254,7 @@ class CreateOidcAccountRequest extends CreateAccountRequest {
251254
*
252255
* @param [options={}] {Object} See `CreateAccountRequest` constructor docstring
253256
* @param [options.password] {string} Password, as entered by the user at signup
257+
* @param [options.acceptToc] {boolean} Whether or not user has accepted T&C
254258
*/
255259
constructor (options) {
256260
super(options)
@@ -278,6 +282,13 @@ class CreateOidcAccountRequest extends CreateAccountRequest {
278282
error.statusCode = 400
279283
throw error
280284
}
285+
286+
// console.log(this.enforceToc, this.acceptToc)
287+
if (this.enforceToc && !this.acceptToc) {
288+
error = new Error('Accepting Terms & Conditions are required for this service')
289+
error.statusCode = 400
290+
throw error
291+
}
281292
}
282293

283294
/**
@@ -317,6 +328,7 @@ class CreateTlsAccountRequest extends CreateAccountRequest {
317328
*
318329
* @param [options={}] {Object} See `CreateAccountRequest` constructor docstring
319330
* @param [options.spkac] {string}
331+
* @param [options.acceptToc] {boolean} Whether or not user has accepted T&C
320332
*/
321333
constructor (options) {
322334
super(options)
@@ -326,7 +338,7 @@ class CreateTlsAccountRequest extends CreateAccountRequest {
326338
}
327339

328340
/**
329-
* Validates the Login request (makes sure required parameters are present),
341+
* Validates the Signup request (makes sure required parameters are present),
330342
* and throws an error if not.
331343
*
332344
* @throws {Error} If missing required params
@@ -339,6 +351,12 @@ class CreateTlsAccountRequest extends CreateAccountRequest {
339351
error.statusCode = 400
340352
throw error
341353
}
354+
355+
if (this.enforceToc && !this.acceptToc) {
356+
error = new Error('Accepting Terms & Conditions are required for this service')
357+
error.statusCode = 400
358+
throw error
359+
}
342360
}
343361

344362
/**

0 commit comments

Comments
 (0)