mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[MNT-24449] Validate ticket on config initialization (#9882)
* [MNT-24449] Validate ticket on config initialization * [MNT-24449] Added unit test
This commit is contained in:
@@ -69,6 +69,11 @@ export class AlfrescoApi implements Emitter, AlfrescoApiType {
|
||||
this.storage = Storage.getInstance();
|
||||
this.storage.setDomainPrefix(config.domainPrefix);
|
||||
|
||||
this.initConfig(config);
|
||||
this.validateTicket(config);
|
||||
}
|
||||
|
||||
private initConfig(config: AlfrescoApiConfig) {
|
||||
this.config = new AlfrescoApiConfig(config);
|
||||
|
||||
this.clientsFactory();
|
||||
@@ -81,8 +86,26 @@ export class AlfrescoApi implements Emitter, AlfrescoApiType {
|
||||
this.emitBuffer('logged-in');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return config;
|
||||
private validateTicket(config: AlfrescoApiConfig) {
|
||||
if (config.ticketEcm && !this.isOauthConfiguration()) {
|
||||
if (!this.contentAuth) {
|
||||
this.contentAuth = new ContentAuth(this.config, this, this.httpClient);
|
||||
}
|
||||
this.contentAuth
|
||||
.validateTicket()
|
||||
.then((ticket) => {
|
||||
config.ticketEcm = ticket;
|
||||
})
|
||||
.catch((error) => {
|
||||
if (error.status === 401) {
|
||||
config.ticketEcm = null;
|
||||
this.initConfig(config);
|
||||
this.emitBuffer('ticket_invalidated');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private initAuth(config: AlfrescoApiConfig): void {
|
||||
|
@@ -40,6 +40,26 @@ describe('Basic configuration test', () => {
|
||||
'https://testServer.com:1616/strangeContextRoot/api/-default-/public/alfresco/versions/1'
|
||||
);
|
||||
});
|
||||
|
||||
it('should detect invalid ticket and unset it', (done) => {
|
||||
const hostEcm = 'https://127.0.0.1:8080';
|
||||
const authEcmMock = new EcmAuthMock(hostEcm);
|
||||
|
||||
const config = {
|
||||
hostEcm,
|
||||
authType: 'BASIC',
|
||||
ticketEcm: 'wrong-ticket'
|
||||
};
|
||||
|
||||
authEcmMock.get401InvalidTicket();
|
||||
|
||||
const alfrescoApi = new AlfrescoApi(config);
|
||||
|
||||
alfrescoApi.on('ticket_invalidated', () => {
|
||||
assert.equal(alfrescoApi.config.ticketEcm, null);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('setconfig parameter ', () => {
|
||||
|
@@ -47,6 +47,20 @@ export class EcmAuthMock extends BaseMock {
|
||||
.reply(200, { entry: { id: returnMockTicket } });
|
||||
}
|
||||
|
||||
get401InvalidTicket(): void {
|
||||
nock(this.host, { encodedQueryParams: true })
|
||||
.get('/alfresco/api/-default-/public/authentication/versions/1/tickets/-me-')
|
||||
.reply(401, {
|
||||
error: {
|
||||
errorKey: 'framework.exception.ApiDefault',
|
||||
statusCode: 401,
|
||||
briefSummary: '05210059 Authentication failed for Web Script org/alfresco/api/ResourceWebScript.get',
|
||||
stackTrace: 'For security reasons the stack trace is no longer displayed, but the property is kept for previous versions.',
|
||||
descriptionURL: 'https://api-explorer.alfresco.com'
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
get403Response(): void {
|
||||
nock(this.host, { encodedQueryParams: true })
|
||||
.post('/alfresco/api/-default-/public/authentication/versions/1/tickets', {
|
||||
|
Reference in New Issue
Block a user