auth0-js
Version:
Auth0 headless browser sdk
195 lines (167 loc) • 5.01 kB
JavaScript
import urljoin from 'url-join';
import objectHelper from '../helper/object';
import assert from '../helper/assert';
import qs from 'qs';
import responseHandler from '../helper/response-handler';
function PasswordlessAuthentication(request, options) {
this.baseOptions = options;
this.request = request;
}
PasswordlessAuthentication.prototype.buildVerifyUrl = function(options) {
var params;
var qString;
/* eslint-disable */
assert.check(
options,
{ type: 'object', message: 'options parameter is not valid' },
{
connection: { type: 'string', message: 'connection option is required' },
verificationCode: { type: 'string', message: 'verificationCode option is required' },
phoneNumber: {
optional: false,
type: 'string',
message: 'phoneNumber option is required',
condition: function(o) {
return !o.email;
}
},
email: {
optional: false,
type: 'string',
message: 'email option is required',
condition: function(o) {
return !o.phoneNumber;
}
}
}
);
/* eslint-enable */
params = objectHelper
.merge(this.baseOptions, [
'clientID',
'responseType',
'responseMode',
'redirectUri',
'scope',
'audience',
'_csrf',
'state',
'_intstate',
'protocol',
'nonce'
])
.with(options);
// eslint-disable-next-line
if (this.baseOptions._sendTelemetry) {
params.auth0Client = this.request.getTelemetryData();
}
params = objectHelper.toSnakeCase(params, ['auth0Client']);
qString = qs.stringify(params);
return urljoin(this.baseOptions.rootUrl, 'passwordless', 'verify_redirect', '?' + qString);
};
PasswordlessAuthentication.prototype.start = function(options, cb) {
var url;
var body;
/* eslint-disable */
assert.check(
options,
{ type: 'object', message: 'options parameter is not valid' },
{
connection: { type: 'string', message: 'connection option is required' },
send: {
type: 'string',
message: 'send option is required',
values: ['link', 'code'],
value_message: 'send is not valid ([link, code])'
},
phoneNumber: {
optional: true,
type: 'string',
message: 'phoneNumber option is required',
condition: function(o) {
return o.send === 'code' || !o.email;
}
},
email: {
optional: true,
type: 'string',
message: 'email option is required',
condition: function(o) {
return o.send === 'link' || !o.phoneNumber;
}
},
authParams: { optional: true, type: 'object', message: 'authParams option is required' }
}
);
/* eslint-enable */
assert.check(cb, { type: 'function', message: 'cb parameter is not valid' });
url = urljoin(this.baseOptions.rootUrl, 'passwordless', 'start');
body = objectHelper
.merge(this.baseOptions, ['clientID', 'responseType', 'redirectUri', 'scope'])
.with(options);
if (body.scope) {
body.authParams = body.authParams || {};
body.authParams.scope = body.scope;
}
if (body.redirectUri) {
body.authParams = body.authParams || {};
body.authParams.redirect_uri = body.redirectUri;
}
if (body.responseType) {
body.authParams = body.authParams || {};
body.authParams.response_type = body.responseType;
}
delete body.redirectUri;
delete body.responseType;
delete body.scope;
body = objectHelper.toSnakeCase(body, ['auth0Client', 'authParams']);
return this.request
.post(url)
.send(body)
.end(responseHandler(cb));
};
PasswordlessAuthentication.prototype.verify = function(options, cb) {
var url;
var cleanOption;
/* eslint-disable */
assert.check(
options,
{ type: 'object', message: 'options parameter is not valid' },
{
connection: { type: 'string', message: 'connection option is required' },
verificationCode: { type: 'string', message: 'verificationCode option is required' },
phoneNumber: {
optional: false,
type: 'string',
message: 'phoneNumber option is required',
condition: function(o) {
return !o.email;
}
},
email: {
optional: false,
type: 'string',
message: 'email option is required',
condition: function(o) {
return !o.phoneNumber;
}
}
}
);
/* eslint-enable */
assert.check(cb, { type: 'function', message: 'cb parameter is not valid' });
cleanOption = objectHelper.pick(options, [
'connection',
'verificationCode',
'phoneNumber',
'email',
'auth0Client'
]);
cleanOption = objectHelper.toSnakeCase(cleanOption, ['auth0Client']);
url = urljoin(this.baseOptions.rootUrl, 'passwordless', 'verify');
return this.request
.post(url)
.send(cleanOption)
.end(responseHandler(cb));
};
export default PasswordlessAuthentication;