@metaplay/metaplay-auth 1.2.1 → 1.3.0
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/CHANGELOG.md +11 -0
- package/README.md +0 -42
- package/dist/index.js +90 -45
- package/dist/index.js.map +1 -1
- package/dist/src/auth.js +27 -1
- package/dist/src/auth.js.map +1 -1
- package/dist/src/stackapi.js +147 -16
- package/dist/src/stackapi.js.map +1 -1
- package/index.ts +87 -55
- package/package.json +7 -5
- package/src/auth.ts +32 -1
- package/src/stackapi.ts +209 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.3.0] - 2024-04-18
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
* Introduce new option `-t dynamic` for `metaplay-auth get-kubeconfig` that generates a `kubeconfig` which invokes the `metaplay-auth` itself to get the credentials. This way, the `kubeconfig` is longer-lived and no longer contains the sensitive access token.
|
|
8
|
+
* Support specifying target environment/gameserver address using the format '\<organization\>-\<project\>-\<environment\>', e.g., `metaplay-auth get-environment metaplay-idler-develop`.
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
* The `kubeconfig` files generated default to the environment's namespace so it doesn't need to be specified manually. The cluster, user, and context names were changed to be more meaningful.
|
|
13
|
+
|
|
3
14
|
## [1.2.1] - 2024-04-05
|
|
4
15
|
|
|
5
16
|
### Changed
|
package/README.md
CHANGED
|
@@ -20,48 +20,6 @@ npx @metaplay/metaplay-auth@latest show-tokens
|
|
|
20
20
|
npx @metaplay/metaplay-auth@latest logout
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
## Running locally
|
|
24
|
-
|
|
25
|
-
When making changes to the `metaplay-auth`, it's easiest to test by running it locally:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
AuthCLI$ pnpm dev login
|
|
29
|
-
AuthCLI$ pnpm dev show-tokens
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Building from sources
|
|
33
|
-
|
|
34
|
-
The tool is also provided as part of the Metaplay SDK package (available via the [Metaplay Portal](https://portal.metaplay.dev/) under `AuthCLI/` and utilizes the same TypeScript toolchains as other components in the Metaplay SDK.
|
|
35
|
-
|
|
36
|
-
You can build the tool using [Moon](https://www.npmjs.com/package/@moonrepo/cli):
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
AuthCLI$ moon run build
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Now, you can run the application with node:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
AuthCLI$ node dist/index.js
|
|
46
|
-
Usage: metaplay-auth [options] [command]
|
|
47
|
-
|
|
48
|
-
Authenticate with Metaplay and get AWS and Kubernetes credentials for game servers.
|
|
49
|
-
|
|
50
|
-
Options:
|
|
51
|
-
-V, --version output the version number
|
|
52
|
-
-d, --debug enable debug output
|
|
53
|
-
-h, --help display help for command
|
|
54
|
-
|
|
55
|
-
Commands:
|
|
56
|
-
login login to your Metaplay account
|
|
57
|
-
logout log out of your Metaplay account
|
|
58
|
-
show-tokens show loaded tokens
|
|
59
|
-
get-kubeconfig [options] [gameserver] get kubeconfig for deployment
|
|
60
|
-
get-aws-credentials [options] [gameserver] get AWS credentials for deployment
|
|
61
|
-
get-environment [options] [gameserver] get environment details for deployment
|
|
62
|
-
help [command] display help for command
|
|
63
|
-
```
|
|
64
|
-
|
|
65
23
|
## License
|
|
66
24
|
|
|
67
25
|
See the LICENSE file.
|
package/dist/index.js
CHANGED
|
@@ -4,13 +4,39 @@ import { loginAndSaveTokens, machineLoginAndSaveTokens, extendCurrentSession, lo
|
|
|
4
4
|
import { StackAPI } from './src/stackapi.js';
|
|
5
5
|
import { checkGameServerDeployment } from './src/deployment.js';
|
|
6
6
|
import { logger, setLogLevel } from './src/logging.js';
|
|
7
|
+
import { isValidFQDN } from './src/utils.js';
|
|
7
8
|
import { exit } from 'process';
|
|
8
9
|
import { ECRClient, GetAuthorizationTokenCommand } from '@aws-sdk/client-ecr';
|
|
10
|
+
/**
|
|
11
|
+
* Helper for parsing the GameserverId type from the command line arguments. Accepts either the gameserver address or the
|
|
12
|
+
* (organization, project, environment) tuple from options.
|
|
13
|
+
*/
|
|
14
|
+
function resolveGameserverId(address, options) {
|
|
15
|
+
// If address is specified, use it, otherwise assume options has organization, project, and environment
|
|
16
|
+
if (address) {
|
|
17
|
+
if (isValidFQDN(address)) {
|
|
18
|
+
return { gameserver: address };
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const parts = address.split('-');
|
|
22
|
+
if (parts.length !== 3) {
|
|
23
|
+
throw new Error('Invalid gameserver address syntax: specify either <organiation>-<project>-<environment> or a fully-qualified domain name (eg, idler-develop.p1.metaplay.io)');
|
|
24
|
+
}
|
|
25
|
+
return { organization: parts[0], project: parts[1], environment: parts[2] };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (options.organization && options.project && options.environment) {
|
|
29
|
+
return { organization: options.organization, project: options.project, environment: options.environment };
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error('Could not determine target environment from arguments: You need to specify either a gameserver address or an organization, project, and environment. Run this command with --help flag for more information.');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
9
35
|
const program = new Command();
|
|
10
36
|
program
|
|
11
37
|
.name('metaplay-auth')
|
|
12
38
|
.description('Authenticate with Metaplay and get AWS and Kubernetes credentials for game servers.')
|
|
13
|
-
.version('1.
|
|
39
|
+
.version('1.3.0')
|
|
14
40
|
.option('-d, --debug', 'enable debug output')
|
|
15
41
|
.hook('preAction', (thisCommand) => {
|
|
16
42
|
// Handle debug flag for all commands.
|
|
@@ -88,39 +114,76 @@ program.command('show-tokens')
|
|
|
88
114
|
}
|
|
89
115
|
});
|
|
90
116
|
program.command('get-kubeconfig')
|
|
91
|
-
.description('get kubeconfig for
|
|
92
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
117
|
+
.description('get kubeconfig for target environment')
|
|
118
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
93
119
|
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
94
120
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
95
121
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
96
122
|
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
123
|
+
.option('-t, --type <format>', 'output format (static or dynamic)', 'static')
|
|
97
124
|
.hook('preAction', async () => {
|
|
98
125
|
await extendCurrentSession();
|
|
99
126
|
})
|
|
100
127
|
.action(async (gameserver, options) => {
|
|
101
128
|
try {
|
|
102
129
|
const tokens = await loadTokens();
|
|
103
|
-
|
|
104
|
-
|
|
130
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi);
|
|
131
|
+
const gameserverId = resolveGameserverId(gameserver, options);
|
|
132
|
+
if (options.type === 'dynamic') {
|
|
133
|
+
const credentials = await stackApi.getKubeConfigExecCredential(gameserverId);
|
|
134
|
+
console.log(credentials);
|
|
135
|
+
}
|
|
136
|
+
else if (options.type === 'static') {
|
|
137
|
+
const credentials = await stackApi.getKubeConfig(gameserverId);
|
|
138
|
+
console.log(credentials);
|
|
105
139
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
140
|
+
else {
|
|
141
|
+
throw new Error('Invalid type; must be one of static or dynamic');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
if (error instanceof Error) {
|
|
146
|
+
console.error('Error getting KubeConfig:', error);
|
|
109
147
|
}
|
|
110
|
-
|
|
111
|
-
|
|
148
|
+
exit(1);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* Get the Kubernetes credentials in the execcredential format which can be used within the `kubeconfig` file:
|
|
153
|
+
* The kubeconfig can invoke this command to fetch the Kubernetes credentials just-in-time which allows us to
|
|
154
|
+
* generate kubeconfig files that don't contain access tokens and are longer-lived (the authentication is the
|
|
155
|
+
* same as that of metaplay-auth itself). Use `metaplay-auth get-kubeconfig -t dynamic ...` to create a
|
|
156
|
+
* kubeconfig that uses this command.
|
|
157
|
+
*/
|
|
158
|
+
// todo: maybe this should be a hidden command as it's not very useful for end users and clutters help?
|
|
159
|
+
program.command('get-kubernetes-execcredential')
|
|
160
|
+
.description('get kubernetes credentials in execcredential format (only intended to be used within a kubeconfig)')
|
|
161
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
162
|
+
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
163
|
+
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
164
|
+
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
165
|
+
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
166
|
+
.hook('preAction', async () => {
|
|
167
|
+
await extendCurrentSession();
|
|
168
|
+
})
|
|
169
|
+
.action(async (gameserver, options) => {
|
|
170
|
+
try {
|
|
171
|
+
const tokens = await loadTokens();
|
|
172
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi);
|
|
173
|
+
const gameserverId = resolveGameserverId(gameserver, options);
|
|
174
|
+
const credentials = await stackApi.getKubeExecCredential(gameserverId);
|
|
112
175
|
console.log(credentials);
|
|
113
176
|
}
|
|
114
177
|
catch (error) {
|
|
115
178
|
if (error instanceof Error) {
|
|
116
|
-
console.error(`Error getting
|
|
179
|
+
console.error(`Error getting Kubernetes ExecCredential: ${error.message}`);
|
|
117
180
|
}
|
|
118
181
|
exit(1);
|
|
119
182
|
}
|
|
120
183
|
});
|
|
121
184
|
program.command('get-aws-credentials')
|
|
122
|
-
.description('get AWS credentials for
|
|
123
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
185
|
+
.description('get AWS credentials for target environment')
|
|
186
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
124
187
|
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
125
188
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
126
189
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
@@ -135,15 +198,9 @@ program.command('get-aws-credentials')
|
|
|
135
198
|
throw new Error('Invalid format; must be one of json or env');
|
|
136
199
|
}
|
|
137
200
|
const tokens = await loadTokens();
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const stackApi = new StackAPI(tokens.access_token);
|
|
142
|
-
if (options.stackApi) {
|
|
143
|
-
stackApi.stack_api_base_uri = options.stackApi;
|
|
144
|
-
}
|
|
145
|
-
const payload = gameserver ? { gameserver } : { organization: options.organization, project: options.project, environment: options.environment };
|
|
146
|
-
const credentials = await stackApi.getAwsCredentials(payload);
|
|
201
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi);
|
|
202
|
+
const gameserverId = resolveGameserverId(gameserver, options);
|
|
203
|
+
const credentials = await stackApi.getAwsCredentials(gameserverId);
|
|
147
204
|
if (options.format === 'env') {
|
|
148
205
|
console.log(`export AWS_ACCESS_KEY_ID=${credentials.AccessKeyId}`);
|
|
149
206
|
console.log(`export AWS_SECRET_ACCESS_KEY=${credentials.SecretAccessKey}`);
|
|
@@ -164,8 +221,8 @@ program.command('get-aws-credentials')
|
|
|
164
221
|
}
|
|
165
222
|
});
|
|
166
223
|
program.command('get-docker-login')
|
|
167
|
-
.description('get docker login credentials for pushing the server image')
|
|
168
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
224
|
+
.description('get docker login credentials for pushing the server image to target environment')
|
|
225
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
169
226
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
170
227
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
171
228
|
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
@@ -179,20 +236,14 @@ program.command('get-docker-login')
|
|
|
179
236
|
throw new Error('Invalid format; must be one of json or env');
|
|
180
237
|
}
|
|
181
238
|
const tokens = await loadTokens();
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
const stackApi = new StackAPI(tokens.access_token);
|
|
186
|
-
if (options.stackApi) {
|
|
187
|
-
stackApi.stack_api_base_uri = options.stackApi;
|
|
188
|
-
}
|
|
239
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi);
|
|
240
|
+
const gameserverId = resolveGameserverId(gameserver, options);
|
|
189
241
|
// Fetch AWS credentials from Metaplay cloud
|
|
190
242
|
logger.debug('Get AWS credentials from Metaplay');
|
|
191
|
-
const
|
|
192
|
-
const credentials = await stackApi.getAwsCredentials(payload);
|
|
243
|
+
const credentials = await stackApi.getAwsCredentials(gameserverId);
|
|
193
244
|
// Get environment info (region is needed for ECR)
|
|
194
245
|
logger.debug('Get environment info');
|
|
195
|
-
const environment = await stackApi.getEnvironmentDetails(
|
|
246
|
+
const environment = await stackApi.getEnvironmentDetails(gameserverId);
|
|
196
247
|
const awsRegion = environment.deployment.aws_region;
|
|
197
248
|
const dockerRepo = environment.deployment.ecr_repo;
|
|
198
249
|
// Create ECR client with credentials
|
|
@@ -239,8 +290,8 @@ program.command('get-docker-login')
|
|
|
239
290
|
}
|
|
240
291
|
});
|
|
241
292
|
program.command('get-environment')
|
|
242
|
-
.description('get
|
|
243
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
293
|
+
.description('get details of an environment')
|
|
294
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
244
295
|
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
245
296
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
246
297
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
@@ -251,15 +302,9 @@ program.command('get-environment')
|
|
|
251
302
|
.action(async (gameserver, options) => {
|
|
252
303
|
try {
|
|
253
304
|
const tokens = await loadTokens();
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
const stackApi = new StackAPI(tokens.access_token);
|
|
258
|
-
if (options.stackApi) {
|
|
259
|
-
stackApi.stack_api_base_uri = options.stackApi;
|
|
260
|
-
}
|
|
261
|
-
const payload = gameserver ? { gameserver } : { organization: options.organization, project: options.project, environment: options.environment };
|
|
262
|
-
const environment = await stackApi.getEnvironmentDetails(payload);
|
|
305
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi);
|
|
306
|
+
const gameserverId = resolveGameserverId(gameserver, options);
|
|
307
|
+
const environment = await stackApi.getEnvironmentDetails(gameserverId);
|
|
263
308
|
console.log(JSON.stringify(environment));
|
|
264
309
|
}
|
|
265
310
|
catch (error) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/auth.js
CHANGED
|
@@ -5,7 +5,7 @@ import open from 'open';
|
|
|
5
5
|
import { randomBytes, createHash } from 'node:crypto';
|
|
6
6
|
import jwt from 'jsonwebtoken';
|
|
7
7
|
import jwkToPem from 'jwk-to-pem';
|
|
8
|
-
import { Configuration, WellknownApi } from '@ory/client';
|
|
8
|
+
import { Configuration, WellknownApi, OidcApi } from '@ory/client';
|
|
9
9
|
import { setSecret, getSecret, removeSecret } from './secret_store.js';
|
|
10
10
|
import { logger } from './logging.js';
|
|
11
11
|
// oauth2 client details (maybe move these to be discovered from some online location to make changes easier to manage?)
|
|
@@ -16,6 +16,9 @@ const tokenEndpoint = `${baseURL}/oauth2/token`;
|
|
|
16
16
|
const wellknownApi = new WellknownApi(new Configuration({
|
|
17
17
|
basePath: baseURL,
|
|
18
18
|
}));
|
|
19
|
+
const oidcApi = new OidcApi(new Configuration({
|
|
20
|
+
basePath: baseURL,
|
|
21
|
+
}));
|
|
19
22
|
/**
|
|
20
23
|
* A helper function which generates a code verifier and challenge for exchaning code from Ory server.
|
|
21
24
|
* @returns
|
|
@@ -25,6 +28,29 @@ function generateCodeVerifierAndChallenge() {
|
|
|
25
28
|
const challenge = createHash('sha256').update(verifier).digest('base64url');
|
|
26
29
|
return { verifier, challenge };
|
|
27
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* A helper function which fetches the user's info from an OIDC userinfo endpoint for the given token.
|
|
33
|
+
* @param token The token to fetch the userinfo for.
|
|
34
|
+
* @returns An object containing the user's info.
|
|
35
|
+
*/
|
|
36
|
+
export async function getUserinfo(token) {
|
|
37
|
+
logger.debug('Trying to find OIDC well-known endpoints...');
|
|
38
|
+
const oidcRes = await oidcApi.discoverOidcConfiguration();
|
|
39
|
+
const userinfoEndpoint = oidcRes.data?.userinfo_endpoint;
|
|
40
|
+
if (!userinfoEndpoint) {
|
|
41
|
+
throw new Error('No userinfo endpoint found in OIDC configuration');
|
|
42
|
+
}
|
|
43
|
+
logger.debug(`Found userinfo endpoint: ${userinfoEndpoint}`);
|
|
44
|
+
const userinfoRes = await fetch(userinfoEndpoint, {
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Bearer ${token}`
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
if (userinfoRes.status < 200 || userinfoRes.status >= 300) {
|
|
50
|
+
throw new Error(`Failed to fetch userinfo: ${userinfoRes.status} ${userinfoRes.statusText}`);
|
|
51
|
+
}
|
|
52
|
+
return await userinfoRes.json();
|
|
53
|
+
}
|
|
28
54
|
/**
|
|
29
55
|
* A helper function which finds an local available port to listen on.
|
|
30
56
|
* @returns A promise that resolves to an available port.
|
package/dist/src/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stackapi.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { isValidFQDN, getGameserverAdminUrl } from './utils.js';
|
|
2
2
|
import { logger } from './logging.js';
|
|
3
|
+
import { dump } from 'js-yaml';
|
|
4
|
+
import { getUserinfo } from './auth.js';
|
|
3
5
|
export class StackAPI {
|
|
4
6
|
accessToken;
|
|
5
|
-
|
|
6
|
-
constructor(accessToken) {
|
|
7
|
+
_stackApiBaseUrl;
|
|
8
|
+
constructor(accessToken, stackApiBaseUrl) {
|
|
7
9
|
if (accessToken == null) {
|
|
8
10
|
throw new Error('accessToken must be provided');
|
|
9
11
|
}
|
|
10
12
|
this.accessToken = accessToken;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
uri = uri.replace(/\/$/, ''); // Remove trailing slash
|
|
18
|
-
this._stack_api_base_uri = uri;
|
|
13
|
+
if (stackApiBaseUrl) {
|
|
14
|
+
this._stackApiBaseUrl = stackApiBaseUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
this._stackApiBaseUrl = 'https://infra.p1.metaplay.io/stackapi';
|
|
18
|
+
}
|
|
19
19
|
}
|
|
20
20
|
async getAwsCredentials(gs) {
|
|
21
21
|
let url = '';
|
|
@@ -25,11 +25,11 @@ export class StackAPI {
|
|
|
25
25
|
url = `https://${adminUrl}/.infra/credentials/aws`;
|
|
26
26
|
}
|
|
27
27
|
else {
|
|
28
|
-
url = `${this.
|
|
28
|
+
url = `${this._stackApiBaseUrl}/v0/credentials/${gs.gameserver}/aws`;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
32
|
-
url = `${this.
|
|
32
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/aws`;
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
35
|
throw new Error('Invalid arguments for getAwsCredentials');
|
|
@@ -55,11 +55,11 @@ export class StackAPI {
|
|
|
55
55
|
url = `https://${adminUrl}/.infra/credentials/k8s`;
|
|
56
56
|
}
|
|
57
57
|
else {
|
|
58
|
-
url = `${this.
|
|
58
|
+
url = `${this._stackApiBaseUrl}/v0/credentials/${gs.gameserver}/k8s`;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
62
|
-
url = `${this.
|
|
62
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/k8s`;
|
|
63
63
|
}
|
|
64
64
|
else {
|
|
65
65
|
throw new Error('Invalid arguments for getKubeConfig');
|
|
@@ -77,6 +77,137 @@ export class StackAPI {
|
|
|
77
77
|
}
|
|
78
78
|
return await response.text();
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Get a `kubeconfig` payload which invokes `metaplay-auth get-kubernetes-execcredential` to get the actual
|
|
82
|
+
* access credentials each time the kubeconfig is used.
|
|
83
|
+
* @param gs Game server environment to get credentials for.
|
|
84
|
+
* @returns The kubeconfig YAML.
|
|
85
|
+
*/
|
|
86
|
+
async getKubeConfigExecCredential(gs) {
|
|
87
|
+
let url = '';
|
|
88
|
+
let gsSlug = '';
|
|
89
|
+
const execArgs = ['get-kubernetes-execcredential'];
|
|
90
|
+
if (gs.gameserver != null) {
|
|
91
|
+
const adminUrl = getGameserverAdminUrl(gs.gameserver);
|
|
92
|
+
url = `https://${adminUrl}/.infra/credentials/k8s?type=execcredential`;
|
|
93
|
+
gsSlug = gs.gameserver;
|
|
94
|
+
execArgs.push('--gameserver', gs.gameserver);
|
|
95
|
+
}
|
|
96
|
+
else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
97
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/k8s?type=execcredential`;
|
|
98
|
+
gsSlug = `${gs.organization}.${gs.project}.${gs.environment}`;
|
|
99
|
+
execArgs.push('--organization', gs.organization, '--project', gs.project, '--environment', gs.environment);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
throw new Error('Invalid arguments for getKubeConfigExecCredential');
|
|
103
|
+
}
|
|
104
|
+
logger.debug(`Getting Kubernetes KubeConfig from ${url}...`);
|
|
105
|
+
const response = await fetch(url, {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: {
|
|
108
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
109
|
+
'Content-Type': 'application/json'
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
if (response.status !== 200) {
|
|
113
|
+
throw new Error(`Failed to fetch Kubernetes KubeConfig: ${response.statusText}`);
|
|
114
|
+
}
|
|
115
|
+
// get the execcredential and morph it into a kubeconfig which calls metaplay-auth for the token
|
|
116
|
+
let kubeExecCredential;
|
|
117
|
+
try {
|
|
118
|
+
kubeExecCredential = await response.json();
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
throw new Error('Failed to fetch Kubernetes KubeConfig: the server response is not JSON');
|
|
122
|
+
}
|
|
123
|
+
if (!kubeExecCredential.spec.cluster) {
|
|
124
|
+
throw new Error('Received kubeExecCredential with missing spec.cluster');
|
|
125
|
+
}
|
|
126
|
+
let namespace = 'default';
|
|
127
|
+
let user = 'user';
|
|
128
|
+
try {
|
|
129
|
+
const environment = await this.getEnvironmentDetails(gs);
|
|
130
|
+
namespace = environment.deployment?.kubernetes_namespace ?? namespace;
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
logger.debug('Failed to get environment details, using defaults', e);
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
const userinfo = await getUserinfo(this.accessToken);
|
|
137
|
+
user = userinfo.sub ?? user;
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
logger.debug('Failed to get userinfo, using defaults', e);
|
|
141
|
+
}
|
|
142
|
+
const kubeConfig = {
|
|
143
|
+
apiVersion: 'v1',
|
|
144
|
+
kind: 'Config',
|
|
145
|
+
'current-context': gsSlug,
|
|
146
|
+
clusters: [
|
|
147
|
+
{
|
|
148
|
+
cluster: {
|
|
149
|
+
'certificate-authority-data': kubeExecCredential.spec.cluster.certificateAuthorityData,
|
|
150
|
+
server: kubeExecCredential.spec.cluster.server
|
|
151
|
+
},
|
|
152
|
+
name: kubeExecCredential.spec.cluster.server
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
contexts: [
|
|
156
|
+
{
|
|
157
|
+
context: {
|
|
158
|
+
cluster: kubeExecCredential.spec.cluster.server,
|
|
159
|
+
namespace,
|
|
160
|
+
user
|
|
161
|
+
},
|
|
162
|
+
name: gsSlug,
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
users: [
|
|
166
|
+
{
|
|
167
|
+
name: user,
|
|
168
|
+
user: {
|
|
169
|
+
exec: {
|
|
170
|
+
apiVersion: 'client.authentication.k8s.io/v1beta1',
|
|
171
|
+
command: 'metaplay-auth',
|
|
172
|
+
args: execArgs,
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
// return as yaml for easier consumption
|
|
179
|
+
return dump(kubeConfig);
|
|
180
|
+
}
|
|
181
|
+
async getKubeExecCredential(gs) {
|
|
182
|
+
let url = '';
|
|
183
|
+
if (gs.gameserver != null) {
|
|
184
|
+
if (isValidFQDN(gs.gameserver)) {
|
|
185
|
+
const adminUrl = getGameserverAdminUrl(gs.gameserver);
|
|
186
|
+
url = `https://${adminUrl}/.infra/credentials/k8s?type=execcredential`;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
url = `${this._stackApiBaseUrl}/v0/credentials/${gs.gameserver}/k8s?type=execcredential`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
193
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/k8s?type=execcredential`;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
throw new Error('Invalid arguments for getKubeConfig');
|
|
197
|
+
}
|
|
198
|
+
logger.debug(`Getting Kubernetes ExecCredential from ${url}...`);
|
|
199
|
+
const response = await fetch(url, {
|
|
200
|
+
method: 'POST',
|
|
201
|
+
headers: {
|
|
202
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
203
|
+
'Content-Type': 'application/json'
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
if (response.status !== 200) {
|
|
207
|
+
throw new Error(`Failed to fetch Kubernetes ExecCredential: ${response.statusText}`);
|
|
208
|
+
}
|
|
209
|
+
return await response.text();
|
|
210
|
+
}
|
|
80
211
|
async getEnvironmentDetails(gs) {
|
|
81
212
|
let url = '';
|
|
82
213
|
if (gs.gameserver != null) {
|
|
@@ -85,11 +216,11 @@ export class StackAPI {
|
|
|
85
216
|
url = `https://${adminUrl}/.infra/environment`;
|
|
86
217
|
}
|
|
87
218
|
else {
|
|
88
|
-
url = `${this.
|
|
219
|
+
url = `${this._stackApiBaseUrl}/v0/deployments/${gs.gameserver}`;
|
|
89
220
|
}
|
|
90
221
|
}
|
|
91
222
|
else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
92
|
-
url = `${this.
|
|
223
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}`;
|
|
93
224
|
}
|
|
94
225
|
else {
|
|
95
226
|
throw new Error('Invalid arguments for environment details');
|
package/dist/src/stackapi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stackapi.js","sourceRoot":"","sources":["../../src/stackapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"stackapi.js","sourceRoot":"","sources":["../../src/stackapi.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -2,17 +2,42 @@
|
|
|
2
2
|
import { Command } from 'commander'
|
|
3
3
|
import { loginAndSaveTokens, machineLoginAndSaveTokens, extendCurrentSession, loadTokens, removeTokens } from './src/auth.js'
|
|
4
4
|
import { StackAPI } from './src/stackapi.js'
|
|
5
|
+
import type { GameserverId } from './src/stackapi.js'
|
|
5
6
|
import { checkGameServerDeployment } from './src/deployment.js'
|
|
6
7
|
import { logger, setLogLevel } from './src/logging.js'
|
|
8
|
+
import { isValidFQDN } from './src/utils.js'
|
|
7
9
|
import { exit } from 'process'
|
|
8
10
|
import { ECRClient, GetAuthorizationTokenCommand } from '@aws-sdk/client-ecr'
|
|
9
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Helper for parsing the GameserverId type from the command line arguments. Accepts either the gameserver address or the
|
|
14
|
+
* (organization, project, environment) tuple from options.
|
|
15
|
+
*/
|
|
16
|
+
function resolveGameserverId (address: string | undefined, options: any): GameserverId {
|
|
17
|
+
// If address is specified, use it, otherwise assume options has organization, project, and environment
|
|
18
|
+
if (address) {
|
|
19
|
+
if (isValidFQDN(address)) {
|
|
20
|
+
return { gameserver: address }
|
|
21
|
+
} else {
|
|
22
|
+
const parts = address.split('-')
|
|
23
|
+
if (parts.length !== 3) {
|
|
24
|
+
throw new Error('Invalid gameserver address syntax: specify either <organiation>-<project>-<environment> or a fully-qualified domain name (eg, idler-develop.p1.metaplay.io)')
|
|
25
|
+
}
|
|
26
|
+
return { organization: parts[0], project: parts[1], environment: parts[2] }
|
|
27
|
+
}
|
|
28
|
+
} else if (options.organization && options.project && options.environment) {
|
|
29
|
+
return { organization: options.organization, project: options.project, environment: options.environment }
|
|
30
|
+
} else {
|
|
31
|
+
throw new Error('Could not determine target environment from arguments: You need to specify either a gameserver address or an organization, project, and environment. Run this command with --help flag for more information.')
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
10
35
|
const program = new Command()
|
|
11
36
|
|
|
12
37
|
program
|
|
13
38
|
.name('metaplay-auth')
|
|
14
39
|
.description('Authenticate with Metaplay and get AWS and Kubernetes credentials for game servers.')
|
|
15
|
-
.version('1.
|
|
40
|
+
.version('1.3.0')
|
|
16
41
|
.option('-d, --debug', 'enable debug output')
|
|
17
42
|
.hook('preAction', (thisCommand) => {
|
|
18
43
|
// Handle debug flag for all commands.
|
|
@@ -94,43 +119,76 @@ program.command('show-tokens')
|
|
|
94
119
|
})
|
|
95
120
|
|
|
96
121
|
program.command('get-kubeconfig')
|
|
97
|
-
.description('get kubeconfig for
|
|
98
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
122
|
+
.description('get kubeconfig for target environment')
|
|
123
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
99
124
|
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
100
125
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
101
126
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
102
127
|
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
128
|
+
.option('-t, --type <format>', 'output format (static or dynamic)', 'static')
|
|
103
129
|
.hook('preAction', async () => {
|
|
104
130
|
await extendCurrentSession()
|
|
105
131
|
})
|
|
106
132
|
.action(async (gameserver, options) => {
|
|
107
133
|
try {
|
|
108
134
|
const tokens = await loadTokens()
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
135
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi)
|
|
136
|
+
const gameserverId = resolveGameserverId(gameserver, options)
|
|
137
|
+
|
|
138
|
+
if (options.type === 'dynamic') {
|
|
139
|
+
const credentials = await stackApi.getKubeConfigExecCredential(gameserverId)
|
|
140
|
+
console.log(credentials)
|
|
141
|
+
} else if (options.type === 'static') {
|
|
142
|
+
const credentials = await stackApi.getKubeConfig(gameserverId)
|
|
143
|
+
console.log(credentials)
|
|
144
|
+
} else {
|
|
145
|
+
throw new Error('Invalid type; must be one of static or dynamic')
|
|
112
146
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
stackApi.stack_api_base_uri = options.stackApi
|
|
147
|
+
} catch (error) {
|
|
148
|
+
if (error instanceof Error) {
|
|
149
|
+
console.error('Error getting KubeConfig:', error)
|
|
117
150
|
}
|
|
151
|
+
exit(1)
|
|
152
|
+
}
|
|
153
|
+
})
|
|
118
154
|
|
|
119
|
-
|
|
155
|
+
/**
|
|
156
|
+
* Get the Kubernetes credentials in the execcredential format which can be used within the `kubeconfig` file:
|
|
157
|
+
* The kubeconfig can invoke this command to fetch the Kubernetes credentials just-in-time which allows us to
|
|
158
|
+
* generate kubeconfig files that don't contain access tokens and are longer-lived (the authentication is the
|
|
159
|
+
* same as that of metaplay-auth itself). Use `metaplay-auth get-kubeconfig -t dynamic ...` to create a
|
|
160
|
+
* kubeconfig that uses this command.
|
|
161
|
+
*/
|
|
162
|
+
// todo: maybe this should be a hidden command as it's not very useful for end users and clutters help?
|
|
163
|
+
program.command('get-kubernetes-execcredential')
|
|
164
|
+
.description('get kubernetes credentials in execcredential format (only intended to be used within a kubeconfig)')
|
|
165
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
166
|
+
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
167
|
+
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
168
|
+
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
169
|
+
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
170
|
+
.hook('preAction', async () => {
|
|
171
|
+
await extendCurrentSession()
|
|
172
|
+
})
|
|
173
|
+
.action(async (gameserver, options) => {
|
|
174
|
+
try {
|
|
175
|
+
const tokens = await loadTokens()
|
|
176
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi)
|
|
177
|
+
const gameserverId = resolveGameserverId(gameserver, options)
|
|
120
178
|
|
|
121
|
-
const credentials = await stackApi.
|
|
179
|
+
const credentials = await stackApi.getKubeExecCredential(gameserverId)
|
|
122
180
|
console.log(credentials)
|
|
123
181
|
} catch (error) {
|
|
124
182
|
if (error instanceof Error) {
|
|
125
|
-
console.error(`Error getting
|
|
183
|
+
console.error(`Error getting Kubernetes ExecCredential: ${error.message}`)
|
|
126
184
|
}
|
|
127
185
|
exit(1)
|
|
128
186
|
}
|
|
129
187
|
})
|
|
130
188
|
|
|
131
189
|
program.command('get-aws-credentials')
|
|
132
|
-
.description('get AWS credentials for
|
|
133
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
190
|
+
.description('get AWS credentials for target environment')
|
|
191
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
134
192
|
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
135
193
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
136
194
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
@@ -146,19 +204,10 @@ program.command('get-aws-credentials')
|
|
|
146
204
|
}
|
|
147
205
|
|
|
148
206
|
const tokens = await loadTokens()
|
|
207
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi)
|
|
208
|
+
const gameserverId = resolveGameserverId(gameserver, options)
|
|
149
209
|
|
|
150
|
-
|
|
151
|
-
throw new Error('Could not determine a deployment to fetch the AWS credentials from. You need to specify either a gameserver or an organization, project, and environment')
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const stackApi = new StackAPI(tokens.access_token)
|
|
155
|
-
if (options.stackApi) {
|
|
156
|
-
stackApi.stack_api_base_uri = options.stackApi
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
const payload = gameserver ? { gameserver } : { organization: options.organization, project: options.project, environment: options.environment }
|
|
160
|
-
|
|
161
|
-
const credentials = await stackApi.getAwsCredentials(payload)
|
|
210
|
+
const credentials = await stackApi.getAwsCredentials(gameserverId)
|
|
162
211
|
|
|
163
212
|
if (options.format === 'env') {
|
|
164
213
|
console.log(`export AWS_ACCESS_KEY_ID=${credentials.AccessKeyId}`)
|
|
@@ -179,8 +228,8 @@ program.command('get-aws-credentials')
|
|
|
179
228
|
})
|
|
180
229
|
|
|
181
230
|
program.command('get-docker-login')
|
|
182
|
-
.description('get docker login credentials for pushing the server image')
|
|
183
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
231
|
+
.description('get docker login credentials for pushing the server image to target environment')
|
|
232
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
184
233
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
185
234
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
186
235
|
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
@@ -195,24 +244,16 @@ program.command('get-docker-login')
|
|
|
195
244
|
}
|
|
196
245
|
|
|
197
246
|
const tokens = await loadTokens()
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
throw new Error('Could not determine a game server deployment. You need to specify either a gameserver or an organization, project, and environment')
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
const stackApi = new StackAPI(tokens.access_token)
|
|
204
|
-
if (options.stackApi) {
|
|
205
|
-
stackApi.stack_api_base_uri = options.stackApi
|
|
206
|
-
}
|
|
247
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi)
|
|
248
|
+
const gameserverId = resolveGameserverId(gameserver, options)
|
|
207
249
|
|
|
208
250
|
// Fetch AWS credentials from Metaplay cloud
|
|
209
251
|
logger.debug('Get AWS credentials from Metaplay')
|
|
210
|
-
const
|
|
211
|
-
const credentials = await stackApi.getAwsCredentials(payload)
|
|
252
|
+
const credentials = await stackApi.getAwsCredentials(gameserverId)
|
|
212
253
|
|
|
213
254
|
// Get environment info (region is needed for ECR)
|
|
214
255
|
logger.debug('Get environment info')
|
|
215
|
-
const environment = await stackApi.getEnvironmentDetails(
|
|
256
|
+
const environment = await stackApi.getEnvironmentDetails(gameserverId)
|
|
216
257
|
const awsRegion = environment.deployment.aws_region
|
|
217
258
|
const dockerRepo = environment.deployment.ecr_repo
|
|
218
259
|
|
|
@@ -262,8 +303,8 @@ program.command('get-docker-login')
|
|
|
262
303
|
})
|
|
263
304
|
|
|
264
305
|
program.command('get-environment')
|
|
265
|
-
.description('get
|
|
266
|
-
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
|
306
|
+
.description('get details of an environment')
|
|
307
|
+
.argument('[gameserver]', 'address of gameserver (e.g. metaplay-idler-develop or idler-develop.p1.metaplay.io)')
|
|
267
308
|
.option('-s, --stack-api <stack-api-base-path>', 'explicit stack api (e.g. https://infra.p1.metaplay.io/stackapi/)')
|
|
268
309
|
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
269
310
|
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
@@ -274,19 +315,10 @@ program.command('get-environment')
|
|
|
274
315
|
.action(async (gameserver, options) => {
|
|
275
316
|
try {
|
|
276
317
|
const tokens = await loadTokens()
|
|
318
|
+
const stackApi = new StackAPI(tokens.access_token, options.stackApi)
|
|
319
|
+
const gameserverId = resolveGameserverId(gameserver, options)
|
|
277
320
|
|
|
278
|
-
|
|
279
|
-
throw new Error('Could not determine a deployment to fetch environment details from. You need to specify either a gameserver or an organization, project, and environment')
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
const stackApi = new StackAPI(tokens.access_token)
|
|
283
|
-
if (options.stackApi) {
|
|
284
|
-
stackApi.stack_api_base_uri = options.stackApi
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
const payload = gameserver ? { gameserver } : { organization: options.organization, project: options.project, environment: options.environment }
|
|
288
|
-
|
|
289
|
-
const environment = await stackApi.getEnvironmentDetails(payload)
|
|
321
|
+
const environment = await stackApi.getEnvironmentDetails(gameserverId)
|
|
290
322
|
console.log(JSON.stringify(environment))
|
|
291
323
|
} catch (error) {
|
|
292
324
|
if (error instanceof Error) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaplay/metaplay-auth",
|
|
3
3
|
"description": "Utility CLI for authenticating with the Metaplay Auth and making authenticated calls to infrastructure endpoints.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.3.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
7
7
|
"homepage": "https://metaplay.io",
|
|
@@ -17,22 +17,24 @@
|
|
|
17
17
|
"@metaplay/eslint-config": "workspace:*",
|
|
18
18
|
"@metaplay/typescript-config": "workspace:*",
|
|
19
19
|
"@types/express": "^4.17.21",
|
|
20
|
+
"@types/js-yaml": "^4.0.9",
|
|
20
21
|
"@types/jsonwebtoken": "^9.0.5",
|
|
21
22
|
"@types/jwk-to-pem": "^2.0.3",
|
|
22
|
-
"@types/node": "^20.
|
|
23
|
+
"@types/node": "^20.12.5",
|
|
23
24
|
"tsx": "^4.7.1",
|
|
24
25
|
"typescript": "^5.1.6",
|
|
25
26
|
"vitest": "^1.4.0"
|
|
26
27
|
},
|
|
27
28
|
"dependencies": {
|
|
28
|
-
"@aws-sdk/client-ecr": "^3.
|
|
29
|
+
"@aws-sdk/client-ecr": "^3.549.0",
|
|
29
30
|
"@kubernetes/client-node": "^1.0.0-rc4",
|
|
30
31
|
"@ory/client": "^1.9.0",
|
|
31
32
|
"commander": "^12.0.0",
|
|
32
|
-
"h3": "^1.
|
|
33
|
+
"h3": "^1.11.1",
|
|
34
|
+
"js-yaml": "^4.1.0",
|
|
33
35
|
"jsonwebtoken": "^9.0.2",
|
|
34
36
|
"jwk-to-pem": "^2.0.5",
|
|
35
37
|
"open": "^10.1.0",
|
|
36
38
|
"tslog": "^4.9.2"
|
|
37
39
|
}
|
|
38
|
-
}
|
|
40
|
+
}
|
package/src/auth.ts
CHANGED
|
@@ -7,7 +7,7 @@ import open from 'open'
|
|
|
7
7
|
import { randomBytes, createHash } from 'node:crypto'
|
|
8
8
|
import jwt from 'jsonwebtoken'
|
|
9
9
|
import jwkToPem from 'jwk-to-pem'
|
|
10
|
-
import { Configuration, WellknownApi } from '@ory/client'
|
|
10
|
+
import { Configuration, WellknownApi, OidcApi } from '@ory/client'
|
|
11
11
|
import { setSecret, getSecret, removeSecret } from './secret_store.js'
|
|
12
12
|
|
|
13
13
|
import { logger } from './logging.js'
|
|
@@ -20,6 +20,9 @@ const tokenEndpoint = `${baseURL}/oauth2/token`
|
|
|
20
20
|
const wellknownApi = new WellknownApi(new Configuration({
|
|
21
21
|
basePath: baseURL,
|
|
22
22
|
}))
|
|
23
|
+
const oidcApi = new OidcApi(new Configuration({
|
|
24
|
+
basePath: baseURL,
|
|
25
|
+
}))
|
|
23
26
|
|
|
24
27
|
/**
|
|
25
28
|
* A helper function which generates a code verifier and challenge for exchaning code from Ory server.
|
|
@@ -31,6 +34,34 @@ function generateCodeVerifierAndChallenge (): { verifier: string, challenge: str
|
|
|
31
34
|
return { verifier, challenge }
|
|
32
35
|
}
|
|
33
36
|
|
|
37
|
+
/**
|
|
38
|
+
* A helper function which fetches the user's info from an OIDC userinfo endpoint for the given token.
|
|
39
|
+
* @param token The token to fetch the userinfo for.
|
|
40
|
+
* @returns An object containing the user's info.
|
|
41
|
+
*/
|
|
42
|
+
export async function getUserinfo (token: string): Promise<any> {
|
|
43
|
+
logger.debug('Trying to find OIDC well-known endpoints...')
|
|
44
|
+
const oidcRes = await oidcApi.discoverOidcConfiguration()
|
|
45
|
+
|
|
46
|
+
const userinfoEndpoint = oidcRes.data?.userinfo_endpoint
|
|
47
|
+
if (!userinfoEndpoint) {
|
|
48
|
+
throw new Error('No userinfo endpoint found in OIDC configuration')
|
|
49
|
+
}
|
|
50
|
+
logger.debug(`Found userinfo endpoint: ${userinfoEndpoint}`)
|
|
51
|
+
|
|
52
|
+
const userinfoRes = await fetch(userinfoEndpoint, {
|
|
53
|
+
headers: {
|
|
54
|
+
Authorization: `Bearer ${token}`
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
if (userinfoRes.status < 200 || userinfoRes.status >= 300) {
|
|
59
|
+
throw new Error(`Failed to fetch userinfo: ${userinfoRes.status} ${userinfoRes.statusText}`)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return await userinfoRes.json()
|
|
63
|
+
}
|
|
64
|
+
|
|
34
65
|
/**
|
|
35
66
|
* A helper function which finds an local available port to listen on.
|
|
36
67
|
* @returns A promise that resolves to an available port.
|
package/src/stackapi.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { isValidFQDN, getGameserverAdminUrl } from './utils.js'
|
|
2
2
|
import { logger } from './logging.js'
|
|
3
|
+
import { dump } from 'js-yaml'
|
|
4
|
+
import { getUserinfo } from './auth.js'
|
|
3
5
|
|
|
4
6
|
interface AwsCredentialsResponse {
|
|
5
7
|
AccessKeyId: string
|
|
@@ -8,34 +10,84 @@ interface AwsCredentialsResponse {
|
|
|
8
10
|
Expiration: string
|
|
9
11
|
}
|
|
10
12
|
|
|
11
|
-
interface GameserverId {
|
|
13
|
+
export interface GameserverId {
|
|
12
14
|
gameserver?: string
|
|
13
15
|
organization?: string
|
|
14
16
|
project?: string
|
|
15
17
|
environment?: string
|
|
16
18
|
}
|
|
17
19
|
|
|
20
|
+
interface KubeConfig {
|
|
21
|
+
apiVersion?: string
|
|
22
|
+
kind: string
|
|
23
|
+
'current-context': string
|
|
24
|
+
clusters: KubeConfigCluster[]
|
|
25
|
+
contexts: KubeConfigContext[]
|
|
26
|
+
users: KubeConfigUser[]
|
|
27
|
+
preferences?: any
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface KubeConfigCluster {
|
|
31
|
+
cluster: {
|
|
32
|
+
'certificate-authority-data': string
|
|
33
|
+
server: string
|
|
34
|
+
}
|
|
35
|
+
name: string
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface KubeConfigContext {
|
|
39
|
+
context: {
|
|
40
|
+
cluster: string
|
|
41
|
+
user: string
|
|
42
|
+
namespace?: string
|
|
43
|
+
}
|
|
44
|
+
name: string
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface KubeConfigUser {
|
|
48
|
+
name: string
|
|
49
|
+
user: {
|
|
50
|
+
token?: string
|
|
51
|
+
exec?: {
|
|
52
|
+
command: string
|
|
53
|
+
args: string[]
|
|
54
|
+
apiVersion: string
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface KubeExecCredential {
|
|
60
|
+
apiVersion: string
|
|
61
|
+
kind: string
|
|
62
|
+
spec: {
|
|
63
|
+
cluster?: {
|
|
64
|
+
server: string
|
|
65
|
+
certificateAuthorityData: string
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
status: {
|
|
69
|
+
token: string
|
|
70
|
+
expirationTimestamp: string
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
18
74
|
export class StackAPI {
|
|
19
75
|
private readonly accessToken: string
|
|
20
76
|
|
|
21
|
-
private
|
|
77
|
+
private readonly _stackApiBaseUrl: string
|
|
22
78
|
|
|
23
|
-
constructor (accessToken: string) {
|
|
79
|
+
constructor (accessToken: string, stackApiBaseUrl: string | undefined) {
|
|
24
80
|
if (accessToken == null) {
|
|
25
81
|
throw new Error('accessToken must be provided')
|
|
26
82
|
}
|
|
27
83
|
|
|
28
84
|
this.accessToken = accessToken
|
|
29
|
-
this._stack_api_base_uri = 'https://infra.p1.metaplay.io/stackapi'
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
get stack_api_base_uri (): string {
|
|
33
|
-
return this._stack_api_base_uri.replace(/\/$/, '')
|
|
34
|
-
}
|
|
35
85
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
86
|
+
if (stackApiBaseUrl) {
|
|
87
|
+
this._stackApiBaseUrl = stackApiBaseUrl.replace(/\/$/, '') // Remove trailing slash
|
|
88
|
+
} else {
|
|
89
|
+
this._stackApiBaseUrl = 'https://infra.p1.metaplay.io/stackapi'
|
|
90
|
+
}
|
|
39
91
|
}
|
|
40
92
|
|
|
41
93
|
async getAwsCredentials (gs: GameserverId): Promise<AwsCredentialsResponse> {
|
|
@@ -45,10 +97,10 @@ export class StackAPI {
|
|
|
45
97
|
const adminUrl = getGameserverAdminUrl(gs.gameserver)
|
|
46
98
|
url = `https://${adminUrl}/.infra/credentials/aws`
|
|
47
99
|
} else {
|
|
48
|
-
url = `${this.
|
|
100
|
+
url = `${this._stackApiBaseUrl}/v0/credentials/${gs.gameserver}/aws`
|
|
49
101
|
}
|
|
50
102
|
} else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
51
|
-
url = `${this.
|
|
103
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/aws`
|
|
52
104
|
} else {
|
|
53
105
|
throw new Error('Invalid arguments for getAwsCredentials')
|
|
54
106
|
}
|
|
@@ -76,10 +128,10 @@ export class StackAPI {
|
|
|
76
128
|
const adminUrl = getGameserverAdminUrl(gs.gameserver)
|
|
77
129
|
url = `https://${adminUrl}/.infra/credentials/k8s`
|
|
78
130
|
} else {
|
|
79
|
-
url = `${this.
|
|
131
|
+
url = `${this._stackApiBaseUrl}/v0/credentials/${gs.gameserver}/k8s`
|
|
80
132
|
}
|
|
81
133
|
} else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
82
|
-
url = `${this.
|
|
134
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/k8s`
|
|
83
135
|
} else {
|
|
84
136
|
throw new Error('Invalid arguments for getKubeConfig')
|
|
85
137
|
}
|
|
@@ -101,6 +153,145 @@ export class StackAPI {
|
|
|
101
153
|
return await response.text()
|
|
102
154
|
}
|
|
103
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Get a `kubeconfig` payload which invokes `metaplay-auth get-kubernetes-execcredential` to get the actual
|
|
158
|
+
* access credentials each time the kubeconfig is used.
|
|
159
|
+
* @param gs Game server environment to get credentials for.
|
|
160
|
+
* @returns The kubeconfig YAML.
|
|
161
|
+
*/
|
|
162
|
+
async getKubeConfigExecCredential (gs: GameserverId): Promise<string> {
|
|
163
|
+
let url = ''
|
|
164
|
+
let gsSlug = ''
|
|
165
|
+
const execArgs = ['get-kubernetes-execcredential']
|
|
166
|
+
if (gs.gameserver != null) {
|
|
167
|
+
const adminUrl = getGameserverAdminUrl(gs.gameserver)
|
|
168
|
+
url = `https://${adminUrl}/.infra/credentials/k8s?type=execcredential`
|
|
169
|
+
gsSlug = gs.gameserver
|
|
170
|
+
execArgs.push('--gameserver', gs.gameserver)
|
|
171
|
+
} else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
172
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/k8s?type=execcredential`
|
|
173
|
+
gsSlug = `${gs.organization}.${gs.project}.${gs.environment}`
|
|
174
|
+
execArgs.push('--organization', gs.organization, '--project', gs.project, '--environment', gs.environment)
|
|
175
|
+
} else {
|
|
176
|
+
throw new Error('Invalid arguments for getKubeConfigExecCredential')
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
logger.debug(`Getting Kubernetes KubeConfig from ${url}...`)
|
|
180
|
+
|
|
181
|
+
const response = await fetch(url, {
|
|
182
|
+
method: 'POST',
|
|
183
|
+
headers: {
|
|
184
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
185
|
+
'Content-Type': 'application/json'
|
|
186
|
+
}
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
if (response.status !== 200) {
|
|
190
|
+
throw new Error(`Failed to fetch Kubernetes KubeConfig: ${response.statusText}`)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// get the execcredential and morph it into a kubeconfig which calls metaplay-auth for the token
|
|
194
|
+
let kubeExecCredential
|
|
195
|
+
try {
|
|
196
|
+
kubeExecCredential = await response.json() as KubeExecCredential
|
|
197
|
+
} catch {
|
|
198
|
+
throw new Error('Failed to fetch Kubernetes KubeConfig: the server response is not JSON')
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (!kubeExecCredential.spec.cluster) {
|
|
202
|
+
throw new Error('Received kubeExecCredential with missing spec.cluster')
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
let namespace = 'default'
|
|
206
|
+
let user = 'user'
|
|
207
|
+
|
|
208
|
+
try {
|
|
209
|
+
const environment = await this.getEnvironmentDetails(gs)
|
|
210
|
+
namespace = environment.deployment?.kubernetes_namespace ?? namespace
|
|
211
|
+
} catch (e) {
|
|
212
|
+
logger.debug('Failed to get environment details, using defaults', e)
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
try {
|
|
216
|
+
const userinfo = await getUserinfo(this.accessToken)
|
|
217
|
+
user = userinfo.sub ?? user
|
|
218
|
+
} catch (e) {
|
|
219
|
+
logger.debug('Failed to get userinfo, using defaults', e)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const kubeConfig: KubeConfig = {
|
|
223
|
+
apiVersion: 'v1',
|
|
224
|
+
kind: 'Config',
|
|
225
|
+
'current-context': gsSlug,
|
|
226
|
+
clusters: [
|
|
227
|
+
{
|
|
228
|
+
cluster: {
|
|
229
|
+
'certificate-authority-data': kubeExecCredential.spec.cluster.certificateAuthorityData,
|
|
230
|
+
server: kubeExecCredential.spec.cluster.server
|
|
231
|
+
},
|
|
232
|
+
name: kubeExecCredential.spec.cluster.server
|
|
233
|
+
}
|
|
234
|
+
],
|
|
235
|
+
contexts: [
|
|
236
|
+
{
|
|
237
|
+
context: {
|
|
238
|
+
cluster: kubeExecCredential.spec.cluster.server,
|
|
239
|
+
namespace,
|
|
240
|
+
user
|
|
241
|
+
},
|
|
242
|
+
name: gsSlug,
|
|
243
|
+
}
|
|
244
|
+
],
|
|
245
|
+
users: [
|
|
246
|
+
{
|
|
247
|
+
name: user,
|
|
248
|
+
user: {
|
|
249
|
+
exec: {
|
|
250
|
+
apiVersion: 'client.authentication.k8s.io/v1beta1',
|
|
251
|
+
command: 'metaplay-auth', // todo: figure out how to refer to metaplay-auth itself
|
|
252
|
+
args: execArgs,
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// return as yaml for easier consumption
|
|
260
|
+
return dump(kubeConfig)
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
async getKubeExecCredential (gs: GameserverId): Promise<string> {
|
|
264
|
+
let url = ''
|
|
265
|
+
if (gs.gameserver != null) {
|
|
266
|
+
if (isValidFQDN(gs.gameserver)) {
|
|
267
|
+
const adminUrl = getGameserverAdminUrl(gs.gameserver)
|
|
268
|
+
url = `https://${adminUrl}/.infra/credentials/k8s?type=execcredential`
|
|
269
|
+
} else {
|
|
270
|
+
url = `${this._stackApiBaseUrl}/v0/credentials/${gs.gameserver}/k8s?type=execcredential`
|
|
271
|
+
}
|
|
272
|
+
} else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
273
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}/credentials/k8s?type=execcredential`
|
|
274
|
+
} else {
|
|
275
|
+
throw new Error('Invalid arguments for getKubeConfig')
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
logger.debug(`Getting Kubernetes ExecCredential from ${url}...`)
|
|
279
|
+
|
|
280
|
+
const response = await fetch(url, {
|
|
281
|
+
method: 'POST',
|
|
282
|
+
headers: {
|
|
283
|
+
Authorization: `Bearer ${this.accessToken}`,
|
|
284
|
+
'Content-Type': 'application/json'
|
|
285
|
+
}
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
if (response.status !== 200) {
|
|
289
|
+
throw new Error(`Failed to fetch Kubernetes ExecCredential: ${response.statusText}`)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return await response.text()
|
|
293
|
+
}
|
|
294
|
+
|
|
104
295
|
async getEnvironmentDetails (gs: GameserverId): Promise<any> {
|
|
105
296
|
let url = ''
|
|
106
297
|
if (gs.gameserver != null) {
|
|
@@ -108,10 +299,10 @@ export class StackAPI {
|
|
|
108
299
|
const adminUrl = getGameserverAdminUrl(gs.gameserver)
|
|
109
300
|
url = `https://${adminUrl}/.infra/environment`
|
|
110
301
|
} else {
|
|
111
|
-
url = `${this.
|
|
302
|
+
url = `${this._stackApiBaseUrl}/v0/deployments/${gs.gameserver}`
|
|
112
303
|
}
|
|
113
304
|
} else if (gs.organization != null && gs.project != null && gs.environment != null) {
|
|
114
|
-
url = `${this.
|
|
305
|
+
url = `${this._stackApiBaseUrl}/v1/servers/${gs.organization}/${gs.project}/${gs.environment}`
|
|
115
306
|
} else {
|
|
116
307
|
throw new Error('Invalid arguments for environment details')
|
|
117
308
|
}
|