@nebular/auth
Version:
@nebular/auth
50 lines • 8.67 kB
JavaScript
import { HttpHeaders, HttpResponse } from '@angular/common/http';
import { deepExtend, getDeepFromObject } from '../helpers';
import { nbAuthCreateToken, NbAuthIllegalTokenError } from '../services/token/token';
export class NbAuthStrategy {
// we should keep this any and validation should be done in `register` method instead
// otherwise it won't be possible to pass an empty object
setOptions(options) {
this.options = deepExtend({}, this.defaultOptions, options);
}
getOption(key) {
return getDeepFromObject(this.options, key, null);
}
createToken(value, failWhenInvalidToken) {
const token = nbAuthCreateToken(this.getOption('token.class'), value, this.getName());
// At this point, nbAuthCreateToken failed with NbAuthIllegalTokenError which MUST be intercepted by strategies
// Or token is created. It MAY be created even if backend did not return any token, in this case it is !Valid
if (failWhenInvalidToken && !token.isValid()) {
// If we require a valid token (i.e. isValid), then we MUST throw NbAuthIllegalTokenError so that the strategies
// intercept it
throw new NbAuthIllegalTokenError('Token is empty or invalid.');
}
return token;
}
getName() {
return this.getOption('name');
}
createFailResponse(data) {
return new HttpResponse({ body: {}, status: 401 });
}
createSuccessResponse(data) {
return new HttpResponse({ body: {}, status: 200 });
}
getActionEndpoint(action) {
const actionEndpoint = this.getOption(`${action}.endpoint`);
const baseEndpoint = this.getOption('baseEndpoint');
return actionEndpoint ? baseEndpoint + actionEndpoint : '';
}
getHeaders() {
const customHeaders = this.getOption('headers') ?? {};
if (customHeaders instanceof HttpHeaders) {
return customHeaders;
}
let headers = new HttpHeaders();
Object.entries(customHeaders).forEach(([key, value]) => {
headers = headers.append(key, value);
});
return headers;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zdHJhdGVneS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mcmFtZXdvcmsvYXV0aC9zdHJhdGVnaWVzL2F1dGgtc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNELE9BQU8sRUFBZSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxHLE1BQU0sT0FBZ0IsY0FBYztJQUlsQyxxRkFBcUY7SUFDckYseURBQXlEO0lBQ3pELFVBQVUsQ0FBQyxPQUFZO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVztRQUNuQixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxXQUFXLENBQXdCLEtBQVUsRUFBRSxvQkFBOEI7UUFDM0UsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekYsK0dBQStHO1FBQy9HLDZHQUE2RztRQUM3RyxJQUFJLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDN0MsZ0hBQWdIO1lBQ2hILGVBQWU7WUFDZixNQUFNLElBQUksdUJBQXVCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBY1Msa0JBQWtCLENBQUMsSUFBVTtRQUNyQyxPQUFPLElBQUksWUFBWSxDQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRVMscUJBQXFCLENBQUMsSUFBVTtRQUN4QyxPQUFPLElBQUksWUFBWSxDQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRVMsaUJBQWlCLENBQUMsTUFBYztRQUN4QyxNQUFNLGNBQWMsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUNwRSxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVTLFVBQVU7UUFDbEIsTUFBTSxhQUFhLEdBQXFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hGLElBQUksYUFBYSxZQUFZLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNyRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmJBdXRoUmVzdWx0IH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC1yZXN1bHQnO1xuaW1wb3J0IHsgTmJBdXRoU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSAnLi9hdXRoLXN0cmF0ZWd5LW9wdGlvbnMnO1xuaW1wb3J0IHsgZGVlcEV4dGVuZCwgZ2V0RGVlcEZyb21PYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IE5iQXV0aFRva2VuLCBuYkF1dGhDcmVhdGVUb2tlbiwgTmJBdXRoSWxsZWdhbFRva2VuRXJyb3IgfSBmcm9tICcuLi9zZXJ2aWNlcy90b2tlbi90b2tlbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYkF1dGhTdHJhdGVneSB7XG4gIHByb3RlY3RlZCBkZWZhdWx0T3B0aW9uczogTmJBdXRoU3RyYXRlZ3lPcHRpb25zO1xuICBwcm90ZWN0ZWQgb3B0aW9uczogTmJBdXRoU3RyYXRlZ3lPcHRpb25zO1xuXG4gIC8vIHdlIHNob3VsZCBrZWVwIHRoaXMgYW55IGFuZCB2YWxpZGF0aW9uIHNob3VsZCBiZSBkb25lIGluIGByZWdpc3RlcmAgbWV0aG9kIGluc3RlYWRcbiAgLy8gb3RoZXJ3aXNlIGl0IHdvbid0IGJlIHBvc3NpYmxlIHRvIHBhc3MgYW4gZW1wdHkgb2JqZWN0XG4gIHNldE9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gZGVlcEV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRPcHRpb24oa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBnZXREZWVwRnJvbU9iamVjdCh0aGlzLm9wdGlvbnMsIGtleSwgbnVsbCk7XG4gIH1cblxuICBjcmVhdGVUb2tlbjxUIGV4dGVuZHMgTmJBdXRoVG9rZW4+KHZhbHVlOiBhbnksIGZhaWxXaGVuSW52YWxpZFRva2VuPzogYm9vbGVhbik6IFQge1xuICAgIGNvbnN0IHRva2VuID0gbmJBdXRoQ3JlYXRlVG9rZW48VD4odGhpcy5nZXRPcHRpb24oJ3Rva2VuLmNsYXNzJyksIHZhbHVlLCB0aGlzLmdldE5hbWUoKSk7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgbmJBdXRoQ3JlYXRlVG9rZW4gZmFpbGVkIHdpdGggTmJBdXRoSWxsZWdhbFRva2VuRXJyb3Igd2hpY2ggTVVTVCBiZSBpbnRlcmNlcHRlZCBieSBzdHJhdGVnaWVzXG4gICAgLy8gT3IgdG9rZW4gaXMgY3JlYXRlZC4gSXQgTUFZIGJlIGNyZWF0ZWQgZXZlbiBpZiBiYWNrZW5kIGRpZCBub3QgcmV0dXJuIGFueSB0b2tlbiwgaW4gdGhpcyBjYXNlIGl0IGlzICFWYWxpZFxuICAgIGlmIChmYWlsV2hlbkludmFsaWRUb2tlbiAmJiAhdG9rZW4uaXNWYWxpZCgpKSB7XG4gICAgICAvLyBJZiB3ZSByZXF1aXJlIGEgdmFsaWQgdG9rZW4gKGkuZS4gaXNWYWxpZCksIHRoZW4gd2UgTVVTVCB0aHJvdyBOYkF1dGhJbGxlZ2FsVG9rZW5FcnJvciBzbyB0aGF0IHRoZSBzdHJhdGVnaWVzXG4gICAgICAvLyBpbnRlcmNlcHQgaXRcbiAgICAgIHRocm93IG5ldyBOYkF1dGhJbGxlZ2FsVG9rZW5FcnJvcignVG9rZW4gaXMgZW1wdHkgb3IgaW52YWxpZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbignbmFtZScpO1xuICB9XG5cbiAgYWJzdHJhY3QgYXV0aGVudGljYXRlKGRhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPE5iQXV0aFJlc3VsdD47XG5cbiAgYWJzdHJhY3QgcmVnaXN0ZXIoZGF0YT86IGFueSk6IE9ic2VydmFibGU8TmJBdXRoUmVzdWx0PjtcblxuICBhYnN0cmFjdCByZXF1ZXN0UGFzc3dvcmQoZGF0YT86IGFueSk6IE9ic2VydmFibGU8TmJBdXRoUmVzdWx0PjtcblxuICBhYnN0cmFjdCByZXNldFBhc3N3b3JkKGRhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPE5iQXV0aFJlc3VsdD47XG5cbiAgYWJzdHJhY3QgbG9nb3V0KCk6IE9ic2VydmFibGU8TmJBdXRoUmVzdWx0PjtcblxuICBhYnN0cmFjdCByZWZyZXNoVG9rZW4oZGF0YT86IGFueSk6IE9ic2VydmFibGU8TmJBdXRoUmVzdWx0PjtcblxuICBwcm90ZWN0ZWQgY3JlYXRlRmFpbFJlc3BvbnNlKGRhdGE/OiBhbnkpOiBIdHRwUmVzcG9uc2U8T2JqZWN0PiB7XG4gICAgcmV0dXJuIG5ldyBIdHRwUmVzcG9uc2U8T2JqZWN0Pih7IGJvZHk6IHt9LCBzdGF0dXM6IDQwMSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVTdWNjZXNzUmVzcG9uc2UoZGF0YT86IGFueSk6IEh0dHBSZXNwb25zZTxPYmplY3Q+IHtcbiAgICByZXR1cm4gbmV3IEh0dHBSZXNwb25zZTxPYmplY3Q+KHsgYm9keToge30sIHN0YXR1czogMjAwIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEFjdGlvbkVuZHBvaW50KGFjdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBhY3Rpb25FbmRwb2ludDogc3RyaW5nID0gdGhpcy5nZXRPcHRpb24oYCR7YWN0aW9ufS5lbmRwb2ludGApO1xuICAgIGNvbnN0IGJhc2VFbmRwb2ludDogc3RyaW5nID0gdGhpcy5nZXRPcHRpb24oJ2Jhc2VFbmRwb2ludCcpO1xuICAgIHJldHVybiBhY3Rpb25FbmRwb2ludCA/IGJhc2VFbmRwb2ludCArIGFjdGlvbkVuZHBvaW50IDogJyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SGVhZGVycygpOiBIdHRwSGVhZGVycyB7XG4gICAgY29uc3QgY3VzdG9tSGVhZGVyczogTmJBdXRoU3RyYXRlZ3lPcHRpb25zWydoZWFkZXJzJ10gPSB0aGlzLmdldE9wdGlvbignaGVhZGVycycpID8/IHt9O1xuICAgIGlmIChjdXN0b21IZWFkZXJzIGluc3RhbmNlb2YgSHR0cEhlYWRlcnMpIHtcbiAgICAgIHJldHVybiBjdXN0b21IZWFkZXJzO1xuICAgIH1cblxuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgT2JqZWN0LmVudHJpZXMoY3VzdG9tSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cbn1cbiJdfQ==