Skip to content

Commit 45f8dcc

Browse files
committed
Authenticates Linear trhough GKDev
(#4543, #4579)
1 parent 4d88368 commit 45f8dcc

File tree

4 files changed

+19
-54
lines changed

4 files changed

+19
-54
lines changed

src/config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type { DateTimeFormat } from './system/date';
44
import type { LogLevel } from './system/logger.constants';
55

66
export interface Config {
7-
readonly 'temporary-configured-linear-config': string | null;
87
readonly advanced: AdvancedConfig;
98
readonly ai: AIConfig;
109
readonly autolinks: AutolinkConfig[] | null;

src/constants.integrations.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ export type IssuesHostIntegrationIds = IssuesCloudHostIntegrationId;
3131

3232
export type IntegrationIds = GitHostIntegrationIds | IssuesHostIntegrationIds;
3333

34-
export const supportedOrderedCloudIssuesIntegrationIds = [IssuesCloudHostIntegrationId.Jira];
34+
export const supportedOrderedCloudIssuesIntegrationIds = [
35+
IssuesCloudHostIntegrationId.Jira,
36+
IssuesCloudHostIntegrationId.Linear,
37+
];
3538
export const supportedOrderedCloudIntegrationIds = [
3639
GitCloudHostIntegrationId.GitHub,
3740
GitSelfManagedHostIntegrationId.CloudGitHubEnterprise,
@@ -42,6 +45,7 @@ export const supportedOrderedCloudIntegrationIds = [
4245
GitCloudHostIntegrationId.Bitbucket,
4346
GitSelfManagedHostIntegrationId.BitbucketServer,
4447
IssuesCloudHostIntegrationId.Jira,
48+
IssuesCloudHostIntegrationId.Linear,
4549
];
4650

4751
export const integrationIds = [
@@ -56,6 +60,7 @@ export const integrationIds = [
5660
GitSelfManagedHostIntegrationId.GitHubEnterprise,
5761
GitSelfManagedHostIntegrationId.GitLabSelfHosted,
5862
IssuesCloudHostIntegrationId.Jira,
63+
IssuesCloudHostIntegrationId.Linear,
5964
IssuesCloudHostIntegrationId.Trello,
6065
];
6166

@@ -143,4 +148,11 @@ export const supportedCloudIntegrationDescriptors: IntegrationDescriptor[] = [
143148
supports: ['issues'],
144149
requiresPro: true,
145150
},
151+
{
152+
id: IssuesCloudHostIntegrationId.Linear,
153+
name: 'Linear',
154+
icon: 'gl-provider-linear',
155+
supports: ['issues'],
156+
requiresPro: true,
157+
},
146158
];

src/plus/integrations/authentication/integrationAuthenticationService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export class IntegrationAuthenticationService implements Disposable {
151151
case IssuesCloudHostIntegrationId.Linear:
152152
provider = new (
153153
await import(/* webpackChunkName: "integrations" */ './linear')
154-
).LinearAuthenticationProvider();
154+
).LinearAuthenticationProvider(this.container, this, this.configuredIntegrationService);
155155
break;
156156
default:
157157
provider = new BuiltInAuthenticationProvider(
Lines changed: 5 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,8 @@
1-
import type { Disposable, Event } from 'vscode';
2-
import type { Sources } from '../../../constants.telemetry';
3-
import { configuration } from '../../../system/-webview/configuration';
4-
import type {
5-
IntegrationAuthenticationProvider,
6-
IntegrationAuthenticationSessionDescriptor,
7-
} from './integrationAuthenticationProvider';
8-
import type { ProviderAuthenticationSession } from './models';
1+
import { IssuesCloudHostIntegrationId } from '../../../constants.integrations';
2+
import { CloudIntegrationAuthenticationProvider } from './integrationAuthenticationProvider';
93

10-
export class LinearAuthenticationProvider implements IntegrationAuthenticationProvider {
11-
// I want to read the token from the config "temporary-configured-linear-config":
12-
private currentToken: string | undefined =
13-
(configuration.get('temporary-configured-linear-config') as string) ?? undefined;
14-
15-
deleteSession(_descriptor: IntegrationAuthenticationSessionDescriptor): Promise<void> {
16-
//throw new Error('Method not implemented.');
17-
this.currentToken = undefined;
18-
return Promise.resolve();
19-
}
20-
deleteAllSessions(): Promise<void> {
21-
//throw new Error('Method not implemented.');
22-
this.currentToken = undefined;
23-
return Promise.resolve();
24-
}
25-
getSession(
26-
_descriptor: IntegrationAuthenticationSessionDescriptor,
27-
_options?:
28-
| { createIfNeeded?: boolean; forceNewSession?: boolean; sync?: never; source?: Sources }
29-
| { createIfNeeded?: never; forceNewSession?: never; sync: boolean; source?: Sources },
30-
): Promise<ProviderAuthenticationSession | undefined> {
31-
return Promise.resolve(
32-
this.currentToken
33-
? {
34-
accessToken: this.currentToken,
35-
id: 'linear',
36-
account: {
37-
id: 'linear',
38-
label: 'Linear',
39-
},
40-
scopes: ['read'],
41-
cloud: true,
42-
expiresAt: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
43-
domain: 'linear.app',
44-
}
45-
: undefined,
46-
);
47-
}
48-
get onDidChange(): Event<void> {
49-
return (_listener: (e: void) => any, _thisArgs?: any, _disposables?: Disposable[]): Disposable => {
50-
return { dispose: () => {} };
51-
};
4+
export class LinearAuthenticationProvider extends CloudIntegrationAuthenticationProvider<IssuesCloudHostIntegrationId.Linear> {
5+
protected override get authProviderId(): IssuesCloudHostIntegrationId.Linear {
6+
return IssuesCloudHostIntegrationId.Linear;
527
}
53-
dispose(): void {}
548
}

0 commit comments

Comments
 (0)