renovate/lib/util/http/auth.spec.ts
2021-10-06 07:43:32 +02:00

298 lines
7 KiB
TypeScript

import { NormalizedOptions } from 'got';
import { partial } from '../../../test/util';
import { PlatformId } from '../../constants';
import { applyAuthorization, removeAuthorization } from './auth';
import { GotOptions } from './types';
describe('util/http/auth', () => {
describe('applyAuthorization', () => {
it('does nothing', () => {
const opts: GotOptions = {
headers: { authorization: 'token' },
hostname: 'amazon.com',
href: 'https://amazon.com',
};
applyAuthorization(opts);
expect(opts).toMatchInlineSnapshot(`
Object {
"headers": Object {
"authorization": "token",
},
"hostname": "amazon.com",
"href": "https://amazon.com",
}
`);
});
it('gitea password', () => {
const opts: GotOptions = {
headers: {},
hostType: PlatformId.Gitea,
password: 'XXXX',
};
applyAuthorization(opts);
expect(opts).toMatchInlineSnapshot(`
Object {
"headers": Object {
"authorization": "Basic OlhYWFg=",
},
"hostType": "gitea",
"password": "XXXX",
}
`);
});
it('gittea token', () => {
const opts: GotOptions = {
headers: {},
token: 'XXXX',
hostType: PlatformId.Gitea,
};
applyAuthorization(opts);
expect(opts).toMatchInlineSnapshot(`
Object {
"headers": Object {
"authorization": "token XXXX",
},
"hostType": "gitea",
"token": "XXXX",
}
`);
});
it('github token', () => {
const opts: GotOptions = {
headers: {},
token: 'XXX',
hostType: PlatformId.Github,
};
applyAuthorization(opts);
expect(opts).toEqual({
headers: {
authorization: 'token XXX',
},
hostType: 'github',
token: 'XXX',
});
});
it('github token for datasource using github api', () => {
const opts: GotOptions = {
headers: {},
token: 'ZZZZ',
hostType: 'github-releases',
};
applyAuthorization(opts);
expect(opts).toMatchInlineSnapshot(`
Object {
"headers": Object {
"authorization": "token ZZZZ",
},
"hostType": "github-releases",
"token": "ZZZZ",
}
`);
});
it(`gitlab personal access token`, () => {
const opts: GotOptions = {
headers: {},
// Personal Access Token is exactly 20 characters long
token: '0123456789012345test',
hostType: PlatformId.Gitlab,
};
applyAuthorization(opts);
expect(opts).toMatchInlineSnapshot(`
Object {
"headers": Object {
"Private-token": "0123456789012345test",
},
"hostType": "gitlab",
"token": "0123456789012345test",
}
`);
});
it(`gitlab oauth token`, () => {
const opts: GotOptions = {
headers: {},
token:
'a40bdd925a0c0b9c4cdd19d101c0df3b2bcd063ab7ad6706f03bcffcec01test',
hostType: PlatformId.Gitlab,
};
applyAuthorization(opts);
expect(opts).toMatchInlineSnapshot(`
Object {
"headers": Object {
"authorization": "Bearer a40bdd925a0c0b9c4cdd19d101c0df3b2bcd063ab7ad6706f03bcffcec01test",
},
"hostType": "gitlab",
"token": "a40bdd925a0c0b9c4cdd19d101c0df3b2bcd063ab7ad6706f03bcffcec01test",
}
`);
});
it(`npm basic token`, () => {
const opts: GotOptions = {
headers: {},
token: 'test',
hostType: 'npm',
context: {
authType: 'Basic',
},
};
applyAuthorization(opts);
expect(opts).toEqual({
context: {
authType: 'Basic',
},
headers: {
authorization: 'Basic test',
},
hostType: 'npm',
token: 'test',
});
});
it(`bare token`, () => {
const opts: GotOptions = {
headers: {},
token: 'test',
context: {
authType: 'Token-Only',
},
};
applyAuthorization(opts);
expect(opts).toEqual({
context: {
authType: 'Token-Only',
},
headers: {
authorization: 'test',
},
token: 'test',
});
});
});
describe('removeAuthorization', () => {
it('no authorization', () => {
const opts = partial<NormalizedOptions>({
hostname: 'amazon.com',
href: 'https://amazon.com',
search: 'something X-Amz-Algorithm something',
});
removeAuthorization(opts);
expect(opts).toEqual({
hostname: 'amazon.com',
href: 'https://amazon.com',
search: 'something X-Amz-Algorithm something',
});
});
it('Amazon', () => {
const opts = partial<NormalizedOptions>({
password: 'auth',
headers: {
authorization: 'auth',
},
hostname: 'amazon.com',
href: 'https://amazon.com',
search: 'something X-Amz-Algorithm something',
});
removeAuthorization(opts);
expect(opts).toEqual({
headers: {},
hostname: 'amazon.com',
href: 'https://amazon.com',
search: 'something X-Amz-Algorithm something',
});
});
it('Amazon ports', () => {
const opts = partial<NormalizedOptions>({
password: 'auth',
headers: {
authorization: 'auth',
},
hostname: 'amazon.com',
href: 'https://amazon.com',
port: 3000,
search: 'something X-Amz-Algorithm something',
});
removeAuthorization(opts);
expect(opts).toEqual({
headers: {},
hostname: 'amazon.com',
href: 'https://amazon.com',
search: 'something X-Amz-Algorithm something',
});
});
it('Azure blob', () => {
const opts = partial<NormalizedOptions>({
password: 'auth',
headers: {
authorization: 'auth',
},
hostname: 'store123.blob.core.windows.net',
href: 'https://<store>.blob.core.windows.net/<some id>//docker/registry/v2/blobs',
});
removeAuthorization(opts);
expect(opts).toEqual({
headers: {},
hostname: 'store123.blob.core.windows.net',
href: 'https://<store>.blob.core.windows.net/<some id>//docker/registry/v2/blobs',
});
});
it('keep auth', () => {
const opts = partial<NormalizedOptions>({
password: 'auth',
headers: {
authorization: 'auth',
},
hostname: 'renovate.com',
href: 'https://renovate.com',
search: 'something',
});
removeAuthorization(opts);
expect(opts).toEqual({
password: 'auth',
headers: {
authorization: 'auth',
},
hostname: 'renovate.com',
href: 'https://renovate.com',
search: 'something',
});
});
});
});