@medusajs/auth-github 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/services/github.d.ts +33 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +135 -0
- package/package.json +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Testing
|
|
2
|
+
|
|
3
|
+
In order to manually test the flow, you can do the following:
|
|
4
|
+
|
|
5
|
+
1. Register a Github App - https://docs.github.com/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app
|
|
6
|
+
2. Go to the app, fetch the clientId and create a new clientSecret
|
|
7
|
+
3. Replace the values in the test with your credentials
|
|
8
|
+
4. Remove the `server.listen()` call
|
|
9
|
+
5. Run the tests, get the `location` value from the `authenticate` test, open the browser
|
|
10
|
+
6. Once redirected, copy the `code` param from the URL, and add it in one of the `callback` success tests
|
|
11
|
+
7. Once you run the tests, you should get back an access token and so on.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAKvD,QAAA,MAAM,cAAc,EAAE,qBAErB,CAAA;AAED,eAAe,cAAc,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const github_1 = require("./services/github");
|
|
4
|
+
const services = [github_1.GithubAuthService];
|
|
5
|
+
const providerExport = {
|
|
6
|
+
services,
|
|
7
|
+
};
|
|
8
|
+
exports.default = providerExport;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSw4Q0FBcUQ7QUFFckQsTUFBTSxRQUFRLEdBQUcsQ0FBQywwQkFBaUIsQ0FBQyxDQUFBO0FBRXBDLE1BQU0sY0FBYyxHQUEwQjtJQUM1QyxRQUFRO0NBQ1QsQ0FBQTtBQUVELGtCQUFlLGNBQWMsQ0FBQSJ9
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AuthenticationInput, AuthenticationResponse, AuthIdentityProviderService, GithubAuthProviderOptions, Logger } from "@medusajs/types";
|
|
2
|
+
import { AbstractAuthModuleProvider } from "@medusajs/utils";
|
|
3
|
+
type InjectedDependencies = {
|
|
4
|
+
logger: Logger;
|
|
5
|
+
};
|
|
6
|
+
interface LocalServiceConfig extends GithubAuthProviderOptions {
|
|
7
|
+
}
|
|
8
|
+
export declare class GithubAuthService extends AbstractAuthModuleProvider {
|
|
9
|
+
protected config_: LocalServiceConfig;
|
|
10
|
+
protected logger_: Logger;
|
|
11
|
+
static validateOptions(options: GithubAuthProviderOptions): void;
|
|
12
|
+
constructor({ logger }: InjectedDependencies, options: GithubAuthProviderOptions);
|
|
13
|
+
register(_: any): Promise<AuthenticationResponse>;
|
|
14
|
+
authenticate(req: AuthenticationInput): Promise<AuthenticationResponse>;
|
|
15
|
+
validateCallback(req: AuthenticationInput, authIdentityService: AuthIdentityProviderService): Promise<AuthenticationResponse>;
|
|
16
|
+
upsert_(providerMetadata: {
|
|
17
|
+
access_token: string;
|
|
18
|
+
refresh_token: string;
|
|
19
|
+
access_token_expires_at: string;
|
|
20
|
+
refresh_token_expires_at: string;
|
|
21
|
+
}, authIdentityService: AuthIdentityProviderService): Promise<{
|
|
22
|
+
success: boolean;
|
|
23
|
+
error: any;
|
|
24
|
+
authIdentity?: undefined;
|
|
25
|
+
} | {
|
|
26
|
+
success: boolean;
|
|
27
|
+
authIdentity: any;
|
|
28
|
+
error?: undefined;
|
|
29
|
+
}>;
|
|
30
|
+
private getRedirect;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,EACzB,MAAM,EACP,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,0BAA0B,EAAe,MAAM,iBAAiB,CAAA;AAEzE,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,UAAU,kBAAmB,SAAQ,yBAAyB;CAAG;AAGjE,qBAAa,iBAAkB,SAAQ,0BAA0B;IAC/D,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACrC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAA;IAEzB,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,yBAAyB;gBAevD,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAChC,OAAO,EAAE,yBAAyB;IAO9B,QAAQ,CAAC,CAAC,KAAA,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAO5C,YAAY,CAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,sBAAsB,CAAC;IAW5B,gBAAgB,CACpB,GAAG,EAAE,mBAAmB,EACxB,mBAAmB,EAAE,2BAA2B,GAC/C,OAAO,CAAC,sBAAsB,CAAC;IAgE5B,OAAO,CACX,gBAAgB,EAAE;QAChB,YAAY,EAAE,MAAM,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;QACrB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,wBAAwB,EAAE,MAAM,CAAA;KACjC,EACD,mBAAmB,EAAE,2BAA2B;;;;;;;;;IAkDlD,OAAO,CAAC,WAAW;CAepB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GithubAuthService = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/utils");
|
|
5
|
+
// TODO: Add state param that is stored in Redis, to prevent CSRF attacks
|
|
6
|
+
class GithubAuthService extends utils_1.AbstractAuthModuleProvider {
|
|
7
|
+
static validateOptions(options) {
|
|
8
|
+
if (!options.clientId) {
|
|
9
|
+
throw new Error("Github clientId is required");
|
|
10
|
+
}
|
|
11
|
+
if (!options.clientSecret) {
|
|
12
|
+
throw new Error("Github clientSecret is required");
|
|
13
|
+
}
|
|
14
|
+
if (!options.callbackUrl) {
|
|
15
|
+
throw new Error("Github callbackUrl is required");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
constructor({ logger }, options) {
|
|
19
|
+
super({}, { provider: "github", displayName: "Github Authentication" });
|
|
20
|
+
this.config_ = options;
|
|
21
|
+
this.logger_ = logger;
|
|
22
|
+
}
|
|
23
|
+
async register(_) {
|
|
24
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Github does not support registration. Use method `authenticate` instead.");
|
|
25
|
+
}
|
|
26
|
+
async authenticate(req) {
|
|
27
|
+
if (req.query?.error) {
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
error: `${req.query.error_description}, read more at: ${req.query.error_uri}`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return this.getRedirect(this.config_);
|
|
34
|
+
}
|
|
35
|
+
async validateCallback(req, authIdentityService) {
|
|
36
|
+
if (req.query && req.query.error) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: `${req.query.error_description}, read more at: ${req.query.error_uri}`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const code = req.query?.code ?? req.body?.code;
|
|
43
|
+
if (!code) {
|
|
44
|
+
return { success: false, error: "No code provided" };
|
|
45
|
+
}
|
|
46
|
+
const params = `client_id=${this.config_.clientId}&client_secret=${this.config_.clientSecret}&code=${code}&redirect_uri=${encodeURIComponent(this.config_.callbackUrl)}`;
|
|
47
|
+
const exchangeTokenUrl = new URL(`https://github.com/login/oauth/access_token?${params}`);
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch(exchangeTokenUrl.toString(), {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: {
|
|
52
|
+
Accept: "application/json",
|
|
53
|
+
},
|
|
54
|
+
}).then((r) => {
|
|
55
|
+
if (!r.ok) {
|
|
56
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Could not exchange token, ${r.status}, ${r.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
return r.json();
|
|
59
|
+
});
|
|
60
|
+
const providerMetadata = {
|
|
61
|
+
access_token: response.access_token,
|
|
62
|
+
refresh_token: response.refresh_token,
|
|
63
|
+
// The response is in seconds
|
|
64
|
+
access_token_expires_at: new Date(Date.now() + response.expires_in * 1000).toISOString(),
|
|
65
|
+
refresh_token_expires_at: new Date(Date.now() + response.refresh_token_expires_in * 1000).toISOString(),
|
|
66
|
+
};
|
|
67
|
+
const { authIdentity, success } = await this.upsert_(providerMetadata, authIdentityService);
|
|
68
|
+
return {
|
|
69
|
+
success,
|
|
70
|
+
authIdentity,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return { success: false, error: error.message };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async upsert_(providerMetadata, authIdentityService) {
|
|
78
|
+
if (!providerMetadata?.access_token) {
|
|
79
|
+
return { success: false, error: "No access token found" };
|
|
80
|
+
}
|
|
81
|
+
const user = await fetch("https://api.github.com/user", {
|
|
82
|
+
headers: {
|
|
83
|
+
Accept: "application/json",
|
|
84
|
+
Authorization: `Bearer ${providerMetadata.access_token}`,
|
|
85
|
+
},
|
|
86
|
+
}).then((r) => r.json());
|
|
87
|
+
const entity_id = user.id.toString();
|
|
88
|
+
const userMetadata = {
|
|
89
|
+
profile_url: user.url,
|
|
90
|
+
avatar: user.avatar_url,
|
|
91
|
+
email: user.email,
|
|
92
|
+
name: user.name,
|
|
93
|
+
company: user.company,
|
|
94
|
+
two_factor_authentication: user.two_factor_authentication ?? false,
|
|
95
|
+
};
|
|
96
|
+
let authIdentity;
|
|
97
|
+
try {
|
|
98
|
+
// Update throws if auth identity not found
|
|
99
|
+
authIdentity = await authIdentityService.update(entity_id, {
|
|
100
|
+
provider_metadata: providerMetadata,
|
|
101
|
+
user_metadata: userMetadata,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error.type === utils_1.MedusaError.Types.NOT_FOUND) {
|
|
106
|
+
const createdAuthIdentity = await authIdentityService.create({
|
|
107
|
+
entity_id,
|
|
108
|
+
user_metadata: userMetadata,
|
|
109
|
+
provider_metadata: providerMetadata,
|
|
110
|
+
});
|
|
111
|
+
authIdentity = createdAuthIdentity;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return { success: false, error: error.message };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
success: true,
|
|
119
|
+
authIdentity,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
getRedirect({ clientId, callbackUrl }) {
|
|
123
|
+
const redirectUrlParam = `redirect_uri=${encodeURIComponent(callbackUrl)}`;
|
|
124
|
+
const clientIdParam = `client_id=${clientId}`;
|
|
125
|
+
const responseTypeParam = "response_type=code";
|
|
126
|
+
const authUrl = new URL(`https://github.com/login/oauth/authorize?${[
|
|
127
|
+
redirectUrlParam,
|
|
128
|
+
clientIdParam,
|
|
129
|
+
responseTypeParam,
|
|
130
|
+
].join("&")}`);
|
|
131
|
+
return { success: true, location: authUrl.toString() };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.GithubAuthService = GithubAuthService;
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2dpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSwyQ0FBeUU7QUFRekUseUVBQXlFO0FBQ3pFLE1BQWEsaUJBQWtCLFNBQVEsa0NBQTBCO0lBSS9ELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBa0M7UUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQ0UsRUFBRSxNQUFNLEVBQXdCLEVBQ2hDLE9BQWtDO1FBRWxDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNkLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLDBFQUEwRSxDQUMzRSxDQUFBO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQ2hCLEdBQXdCO1FBRXhCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNy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
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@medusajs/auth-github",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Github OAuth authentication provider for Medusa",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/medusajs/medusa",
|
|
9
|
+
"directory": "packages/modules/providers/auth-github"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20"
|
|
16
|
+
},
|
|
17
|
+
"author": "Medusa",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"scripts": {
|
|
20
|
+
"test": "jest --passWithNoTests src",
|
|
21
|
+
"test:integration": "jest --forceExit -- integration-tests/**/__tests__/**/*.spec.ts",
|
|
22
|
+
"build": "rimraf dist && tsc --build",
|
|
23
|
+
"watch": "tsc --watch"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@medusajs/types": "^1.11.16",
|
|
27
|
+
"@types/simple-oauth2": "^5.0.7",
|
|
28
|
+
"cross-env": "^5.2.1",
|
|
29
|
+
"jest": "^29.7.0",
|
|
30
|
+
"msw": "^2.3.0",
|
|
31
|
+
"rimraf": "^5.0.1",
|
|
32
|
+
"typescript": "^5.1.6"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@medusajs/utils": "^1.11.9"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"medusa-provider",
|
|
39
|
+
"medusa-provider-auth-github"
|
|
40
|
+
]
|
|
41
|
+
}
|