Skip to content

Commit

Permalink
fix(auth): fix token parceler suppressing getClassByName errors (#548)
Browse files Browse the repository at this point in the history
Closes #528
  • Loading branch information
nnixaa committed Jul 5, 2018
1 parent 402bca2 commit ac41765
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 45 deletions.
111 changes: 71 additions & 40 deletions src/framework/auth/services/token/token-parceler.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,54 +22,85 @@ describe('token-parceler', () => {
const wrappedNonExisting = `{"name":"non-existing","value":"${simpleToken.getValue()}"}`;
const wrappedInvalid = `{"name":"non-existing"`;

beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: NB_AUTH_FALLBACK_TOKEN, useValue: NbAuthSimpleToken },
{ provide: NB_AUTH_TOKENS, useValue: [NbAuthSimpleToken, NbAuthJWTToken] },
NbAuthTokenParceler,
],
describe('default configuration', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: NB_AUTH_FALLBACK_TOKEN, useValue: NbAuthSimpleToken },
{ provide: NB_AUTH_TOKENS, useValue: [NbAuthSimpleToken, NbAuthJWTToken] },
NbAuthTokenParceler,
],
});
});
});

beforeEach(async(inject(
[NbAuthTokenParceler],
(_tokenParceler) => {
tokenParceler = _tokenParceler;
},
)));

it('wraps simple', () => {
expect(tokenParceler.wrap(simpleToken))
.toEqual(wrappedSimple);
});
[NbAuthTokenParceler],
(_tokenParceler) => {
tokenParceler = _tokenParceler;
},
)));

it('wraps jwt', () => {
expect(tokenParceler.wrap(jwtToken))
.toEqual(wrappedJWT);
});
it('wraps simple', () => {
expect(tokenParceler.wrap(simpleToken))
.toEqual(wrappedSimple);
});

it('unwraps simple', () => {
expect(tokenParceler.unwrap(wrappedSimple))
.toEqual(simpleToken);
});
it('wraps jwt', () => {
expect(tokenParceler.wrap(jwtToken))
.toEqual(wrappedJWT);
});

it('unwraps jwt', () => {
expect(tokenParceler.unwrap(wrappedJWT))
.toEqual(jwtToken);
});
it('unwraps simple', () => {
expect(tokenParceler.unwrap(wrappedSimple))
.toEqual(simpleToken);
});

it('unwraps non existing', () => {
expect(tokenParceler.unwrap(wrappedNonExisting))
.toEqual(simpleToken);
});
it('unwraps jwt', () => {
expect(tokenParceler.unwrap(wrappedJWT))
.toEqual(jwtToken);
});

it('unwraps non existing', () => {
expect(tokenParceler.unwrap(wrappedNonExisting))
.toEqual(simpleToken);
});

it('unwraps invalid', () => {
const token = tokenParceler.unwrap(wrappedInvalid);
expect(token.getName())
.toEqual(simpleToken.getName());
expect(token.getValue())
.toEqual('');
it('unwraps invalid', () => {
const token = tokenParceler.unwrap(wrappedInvalid);
expect(token.getName())
.toEqual(simpleToken.getName());
expect(token.getValue())
.toEqual('');
});
});

describe('fail configuration', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: NB_AUTH_FALLBACK_TOKEN, useValue: NbAuthSimpleToken },
{ provide: NB_AUTH_TOKENS, useValue: [] },
NbAuthTokenParceler,
],
});
});

beforeEach(async(inject(
[NbAuthTokenParceler],
(_tokenParceler) => {
tokenParceler = _tokenParceler;
},
)));

it('unwraps jwt to fallback simple as none provided', () => {

const token = tokenParceler.unwrap(wrappedJWT);
expect(token.getName())
.toEqual(simpleToken.getName());

expect(token.getValue())
.toEqual(jwtToken.getValue());
});

});
});
15 changes: 10 additions & 5 deletions src/framework/auth/services/token/token-parceler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,13 @@ export class NbAuthTokenParceler {
}

unwrap(value: string): NbAuthToken {
let tokenClass: NbAuthTokenClass;
let tokenClass: NbAuthTokenClass = this.fallbackClass;
let tokenValue = '';

try {
const tokenPack: NbTokenPack = JSON.parse(value);
const tokenPack: NbTokenPack = this.parseTokenPack(value);
if (tokenPack) {
tokenClass = this.getClassByName(tokenPack.name) || this.fallbackClass;
tokenValue = tokenPack.value;
} catch (e) {
tokenClass = this.fallbackClass
}

return nbAuthCreateToken(tokenClass, tokenValue);
Expand All @@ -46,4 +44,11 @@ export class NbAuthTokenParceler {
protected getClassByName(name): NbAuthTokenClass {
return this.tokenClasses.find((tokenClass: NbAuthTokenClass) => tokenClass.NAME === name);
}

protected parseTokenPack(value): NbTokenPack {
try {
return JSON.parse(value);
} catch (e) { }
return null;
}
}

0 comments on commit ac41765

Please sign in to comment.