@metaplay/metaplay-auth 1.1.7 → 1.2.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 +7 -1
- package/README.md +5 -5
- package/dist/index.js +81 -5
- package/dist/index.js.map +1 -1
- package/{src/index.ts → index.ts} +89 -5
- package/package.json +13 -11
- package/tests/utils.spec.ts +20 -0
- package/vitest.config.ts +7 -0
- package/dist/auth.js +0 -335
- package/dist/auth.js.map +0 -1
- package/dist/deployment.js +0 -218
- package/dist/deployment.js.map +0 -1
- package/dist/logging.js +0 -18
- package/dist/logging.js.map +0 -1
- package/dist/secret_store.js +0 -79
- package/dist/secret_store.js.map +0 -1
- package/dist/src/index.js +0 -215
- package/dist/src/index.js.map +0 -1
- package/dist/stackapi.js +0 -111
- package/dist/stackapi.js.map +0 -1
- package/dist/utils.js +0 -41
- package/dist/utils.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [1.
|
|
3
|
+
## [1.2.0] - 2024-03-20
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
* Introduce `get-docker-login` command that allows simpler CI flows. It outputs `DOCKER_REPO`, `DOCKER_USERNAME` and `DOCKER_PASSWORD` env variables that can be used to login with docker.
|
|
8
|
+
|
|
9
|
+
## [1.1.7] - 2024-03-15
|
|
4
10
|
|
|
5
11
|
### Added
|
|
6
12
|
|
package/README.md
CHANGED
|
@@ -25,24 +25,24 @@ npx @metaplay/metaplay-auth@latest logout
|
|
|
25
25
|
When making changes to the `metaplay-auth`, it's easiest to test by running it locally:
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
AuthCLI$ pnpm dev login
|
|
29
|
+
AuthCLI$ pnpm dev show-tokens
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## Building from sources
|
|
33
33
|
|
|
34
|
-
The tool is also provided as part of the Metaplay SDK package (available via the [Metaplay Portal](https://portal.metaplay.dev/) under `
|
|
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
35
|
|
|
36
36
|
You can build the tool using [Moon](https://www.npmjs.com/package/@moonrepo/cli):
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
|
|
39
|
+
AuthCLI$ moon run build
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Now, you can run the application with node:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
|
|
45
|
+
AuthCLI$ node dist/index.js
|
|
46
46
|
Usage: metaplay-auth [options] [command]
|
|
47
47
|
|
|
48
48
|
Authenticate with Metaplay and get AWS and Kubernetes credentials for game servers.
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
-
import { loginAndSaveTokens, machineLoginAndSaveTokens, extendCurrentSession, loadTokens, removeTokens } from './auth.js';
|
|
4
|
-
import { StackAPI } from './stackapi.js';
|
|
5
|
-
import { checkGameServerDeployment } from './deployment.js';
|
|
6
|
-
import { setLogLevel } from './logging.js';
|
|
3
|
+
import { loginAndSaveTokens, machineLoginAndSaveTokens, extendCurrentSession, loadTokens, removeTokens } from './src/auth.js';
|
|
4
|
+
import { StackAPI } from './src/stackapi.js';
|
|
5
|
+
import { checkGameServerDeployment } from './src/deployment.js';
|
|
6
|
+
import { logger, setLogLevel } from './src/logging.js';
|
|
7
7
|
import { exit } from 'process';
|
|
8
|
+
import { ECRClient, GetAuthorizationTokenCommand } from '@aws-sdk/client-ecr';
|
|
8
9
|
const program = new Command();
|
|
9
10
|
program
|
|
10
11
|
.name('metaplay-auth')
|
|
11
12
|
.description('Authenticate with Metaplay and get AWS and Kubernetes credentials for game servers.')
|
|
12
|
-
.version('1.
|
|
13
|
+
.version('1.2.0')
|
|
13
14
|
.option('-d, --debug', 'enable debug output')
|
|
14
15
|
.hook('preAction', (thisCommand) => {
|
|
15
16
|
// Handle debug flag for all commands.
|
|
@@ -162,6 +163,81 @@ program.command('get-aws-credentials')
|
|
|
162
163
|
exit(1);
|
|
163
164
|
}
|
|
164
165
|
});
|
|
166
|
+
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)')
|
|
169
|
+
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
170
|
+
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
171
|
+
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
172
|
+
.option('-f, --format <format>', 'output format (json or env)', 'json')
|
|
173
|
+
.hook('preAction', async () => {
|
|
174
|
+
await extendCurrentSession();
|
|
175
|
+
})
|
|
176
|
+
.action(async (gameserver, options) => {
|
|
177
|
+
try {
|
|
178
|
+
if (options.format !== 'json' && options.format !== 'env') {
|
|
179
|
+
throw new Error('Invalid format; must be one of json or env');
|
|
180
|
+
}
|
|
181
|
+
const tokens = await loadTokens();
|
|
182
|
+
if (!gameserver && !(options.organization && options.project && options.environment)) {
|
|
183
|
+
throw new Error('Could not determine a game server deployment. You need to specify either a gameserver or an organization, project, and environment');
|
|
184
|
+
}
|
|
185
|
+
const stackApi = new StackAPI(tokens.access_token);
|
|
186
|
+
if (options.stackApi) {
|
|
187
|
+
stackApi.stack_api_base_uri = options.stackApi;
|
|
188
|
+
}
|
|
189
|
+
// Fetch AWS credentials from Metaplay cloud
|
|
190
|
+
logger.debug('Get AWS credentials from Metaplay');
|
|
191
|
+
const payload = gameserver ? { gameserver } : { organization: options.organization, project: options.project, environment: options.environment };
|
|
192
|
+
const credentials = await stackApi.getAwsCredentials(payload);
|
|
193
|
+
// Get environment info (region is needed for ECR)
|
|
194
|
+
logger.debug('Get environment info');
|
|
195
|
+
const environment = await stackApi.getEnvironmentDetails(payload);
|
|
196
|
+
const awsRegion = environment.deployment.aws_region;
|
|
197
|
+
const dockerRepo = environment.deployment.ecr_repo;
|
|
198
|
+
// Create ECR client with credentials
|
|
199
|
+
logger.debug('Create ECR client');
|
|
200
|
+
const client = new ECRClient({
|
|
201
|
+
credentials: {
|
|
202
|
+
accessKeyId: credentials.AccessKeyId,
|
|
203
|
+
secretAccessKey: credentials.SecretAccessKey,
|
|
204
|
+
sessionToken: credentials.SessionToken
|
|
205
|
+
},
|
|
206
|
+
region: awsRegion
|
|
207
|
+
});
|
|
208
|
+
// Fetch the ECR docker authentication token
|
|
209
|
+
logger.debug('Fetch ECR login credentials from AWS');
|
|
210
|
+
const command = new GetAuthorizationTokenCommand({});
|
|
211
|
+
const response = await client.send(command);
|
|
212
|
+
if (!response.authorizationData || response.authorizationData.length === 0 || !response.authorizationData[0].authorizationToken) {
|
|
213
|
+
throw new Error('Received an empty authorization token response for ECR repository');
|
|
214
|
+
}
|
|
215
|
+
// Parse username and password from the response (separated by a ':')
|
|
216
|
+
logger.debug('Parse ECR response');
|
|
217
|
+
const authorization64 = response.authorizationData[0].authorizationToken;
|
|
218
|
+
const authorization = Buffer.from(authorization64, 'base64').toString();
|
|
219
|
+
const [username, password] = authorization.split(':');
|
|
220
|
+
// Output the docker repo & credentials
|
|
221
|
+
if (options.format === 'env') {
|
|
222
|
+
console.log(`export DOCKER_REPO=${dockerRepo}`);
|
|
223
|
+
console.log(`export DOCKER_USERNAME=${username}`);
|
|
224
|
+
console.log(`export DOCKER_PASSWORD=${password}`);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
console.log(JSON.stringify({
|
|
228
|
+
dockerRepo,
|
|
229
|
+
username,
|
|
230
|
+
password
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
if (error instanceof Error) {
|
|
236
|
+
console.error(`Error getting docker login credentials: ${error.message}`);
|
|
237
|
+
}
|
|
238
|
+
exit(1);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
165
241
|
program.command('get-environment')
|
|
166
242
|
.description('get environment details for deployment')
|
|
167
243
|
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander'
|
|
3
|
-
import { loginAndSaveTokens, machineLoginAndSaveTokens, extendCurrentSession, loadTokens, removeTokens } from './auth.js'
|
|
4
|
-
import { StackAPI } from './stackapi.js'
|
|
5
|
-
import { checkGameServerDeployment } from './deployment.js'
|
|
6
|
-
import { setLogLevel } from './logging.js'
|
|
3
|
+
import { loginAndSaveTokens, machineLoginAndSaveTokens, extendCurrentSession, loadTokens, removeTokens } from './src/auth.js'
|
|
4
|
+
import { StackAPI } from './src/stackapi.js'
|
|
5
|
+
import { checkGameServerDeployment } from './src/deployment.js'
|
|
6
|
+
import { logger, setLogLevel } from './src/logging.js'
|
|
7
7
|
import { exit } from 'process'
|
|
8
|
+
import { ECRClient, GetAuthorizationTokenCommand } from '@aws-sdk/client-ecr'
|
|
8
9
|
|
|
9
10
|
const program = new Command()
|
|
10
11
|
|
|
11
12
|
program
|
|
12
13
|
.name('metaplay-auth')
|
|
13
14
|
.description('Authenticate with Metaplay and get AWS and Kubernetes credentials for game servers.')
|
|
14
|
-
.version('1.
|
|
15
|
+
.version('1.2.0')
|
|
15
16
|
.option('-d, --debug', 'enable debug output')
|
|
16
17
|
.hook('preAction', (thisCommand) => {
|
|
17
18
|
// Handle debug flag for all commands.
|
|
@@ -177,6 +178,89 @@ program.command('get-aws-credentials')
|
|
|
177
178
|
}
|
|
178
179
|
})
|
|
179
180
|
|
|
181
|
+
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)')
|
|
184
|
+
.option('-o, --organization <organization>', 'organization name (e.g. metaplay)')
|
|
185
|
+
.option('-p, --project <project>', 'project name (e.g. idler)')
|
|
186
|
+
.option('-e, --environment <environment>', 'environment name (e.g. develop)')
|
|
187
|
+
.option('-f, --format <format>', 'output format (json or env)', 'json')
|
|
188
|
+
.hook('preAction', async () => {
|
|
189
|
+
await extendCurrentSession()
|
|
190
|
+
})
|
|
191
|
+
.action(async (gameserver, options) => {
|
|
192
|
+
try {
|
|
193
|
+
if (options.format !== 'json' && options.format !== 'env') {
|
|
194
|
+
throw new Error('Invalid format; must be one of json or env')
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const tokens = await loadTokens()
|
|
198
|
+
|
|
199
|
+
if (!gameserver && !(options.organization && options.project && options.environment)) {
|
|
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
|
+
}
|
|
207
|
+
|
|
208
|
+
// Fetch AWS credentials from Metaplay cloud
|
|
209
|
+
logger.debug('Get AWS credentials from Metaplay')
|
|
210
|
+
const payload = gameserver ? { gameserver } : { organization: options.organization, project: options.project, environment: options.environment }
|
|
211
|
+
const credentials = await stackApi.getAwsCredentials(payload)
|
|
212
|
+
|
|
213
|
+
// Get environment info (region is needed for ECR)
|
|
214
|
+
logger.debug('Get environment info')
|
|
215
|
+
const environment = await stackApi.getEnvironmentDetails(payload)
|
|
216
|
+
const awsRegion = environment.deployment.aws_region
|
|
217
|
+
const dockerRepo = environment.deployment.ecr_repo
|
|
218
|
+
|
|
219
|
+
// Create ECR client with credentials
|
|
220
|
+
logger.debug('Create ECR client')
|
|
221
|
+
const client = new ECRClient({
|
|
222
|
+
credentials: {
|
|
223
|
+
accessKeyId: credentials.AccessKeyId,
|
|
224
|
+
secretAccessKey: credentials.SecretAccessKey,
|
|
225
|
+
sessionToken: credentials.SessionToken
|
|
226
|
+
},
|
|
227
|
+
region: awsRegion
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
// Fetch the ECR docker authentication token
|
|
231
|
+
logger.debug('Fetch ECR login credentials from AWS')
|
|
232
|
+
const command = new GetAuthorizationTokenCommand({})
|
|
233
|
+
const response = await client.send(command)
|
|
234
|
+
if (!response.authorizationData || response.authorizationData.length === 0 || !response.authorizationData[0].authorizationToken) {
|
|
235
|
+
throw new Error('Received an empty authorization token response for ECR repository')
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Parse username and password from the response (separated by a ':')
|
|
239
|
+
logger.debug('Parse ECR response')
|
|
240
|
+
const authorization64 = response.authorizationData[0].authorizationToken
|
|
241
|
+
const authorization = Buffer.from(authorization64, 'base64').toString()
|
|
242
|
+
const [username, password] = authorization.split(':')
|
|
243
|
+
|
|
244
|
+
// Output the docker repo & credentials
|
|
245
|
+
if (options.format === 'env') {
|
|
246
|
+
console.log(`export DOCKER_REPO=${dockerRepo}`)
|
|
247
|
+
console.log(`export DOCKER_USERNAME=${username}`)
|
|
248
|
+
console.log(`export DOCKER_PASSWORD=${password}`)
|
|
249
|
+
} else {
|
|
250
|
+
console.log(JSON.stringify({
|
|
251
|
+
dockerRepo,
|
|
252
|
+
username,
|
|
253
|
+
password
|
|
254
|
+
}))
|
|
255
|
+
}
|
|
256
|
+
} catch (error) {
|
|
257
|
+
if (error instanceof Error) {
|
|
258
|
+
console.error(`Error getting docker login credentials: ${error.message}`)
|
|
259
|
+
}
|
|
260
|
+
exit(1)
|
|
261
|
+
}
|
|
262
|
+
})
|
|
263
|
+
|
|
180
264
|
program.command('get-environment')
|
|
181
265
|
.description('get environment details for deployment')
|
|
182
266
|
.argument('[gameserver]', 'address of gameserver (e.g. idler-develop.p1.metaplay.io)')
|
package/package.json
CHANGED
|
@@ -1,36 +1,38 @@
|
|
|
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.2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
7
7
|
"homepage": "https://metaplay.io",
|
|
8
8
|
"bin": "dist/index.js",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"dev": "tsx src/index.ts",
|
|
11
|
-
"prepublish": "tsc"
|
|
12
|
-
},
|
|
13
9
|
"publishConfig": {
|
|
14
10
|
"access": "public"
|
|
15
11
|
},
|
|
16
12
|
"devDependencies": {
|
|
17
|
-
"@metaplay/eslint-config": "workspace:*",
|
|
18
|
-
"@metaplay/typescript-config": "workspace:*",
|
|
19
13
|
"@types/express": "^4.17.21",
|
|
20
14
|
"@types/jsonwebtoken": "^9.0.5",
|
|
21
15
|
"@types/jwk-to-pem": "^2.0.3",
|
|
22
|
-
"@types/node": "^20.11.
|
|
16
|
+
"@types/node": "^20.11.28",
|
|
23
17
|
"tsx": "^4.7.1",
|
|
24
|
-
"typescript": "^5.1.6"
|
|
18
|
+
"typescript": "^5.1.6",
|
|
19
|
+
"vitest": "^1.3.1",
|
|
20
|
+
"@metaplay/eslint-config": "1.0.0",
|
|
21
|
+
"@metaplay/typescript-config": "1.0.0"
|
|
25
22
|
},
|
|
26
23
|
"dependencies": {
|
|
24
|
+
"@aws-sdk/client-ecr": "^3.535.0",
|
|
25
|
+
"@kubernetes/client-node": "^0.20.0",
|
|
27
26
|
"@ory/client": "^1.6.2",
|
|
28
27
|
"commander": "^12.0.0",
|
|
29
28
|
"h3": "^1.10.2",
|
|
30
29
|
"jsonwebtoken": "^9.0.2",
|
|
31
30
|
"jwk-to-pem": "^2.0.5",
|
|
32
31
|
"open": "^10.0.2",
|
|
33
|
-
"tslog": "^4.9.2"
|
|
34
|
-
|
|
32
|
+
"tslog": "^4.9.2"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"dev": "tsx index.ts",
|
|
36
|
+
"prepublish": "tsc"
|
|
35
37
|
}
|
|
36
38
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { expect, test, describe } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import { isValidFQDN } from '../src/utils.js'
|
|
4
|
+
|
|
5
|
+
describe('isValidFQDN', () => {
|
|
6
|
+
test('should return true for valid FQDNs', () => {
|
|
7
|
+
expect(isValidFQDN('www.example.com')).toBe(true)
|
|
8
|
+
expect(isValidFQDN('subdomain.example.com')).toBe(true)
|
|
9
|
+
expect(isValidFQDN('example.com')).toBe(true)
|
|
10
|
+
expect(isValidFQDN('example.co.uk')).toBe(true)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
test('should return false for invalid FQDNs', () => {
|
|
14
|
+
expect(isValidFQDN('example')).toBe(false)
|
|
15
|
+
expect(isValidFQDN('www.example..com')).toBe(false)
|
|
16
|
+
expect(isValidFQDN('www.-example.com')).toBe(false)
|
|
17
|
+
expect(isValidFQDN('www.example-.com')).toBe(false)
|
|
18
|
+
expect(isValidFQDN('www.example.com-')).toBe(false)
|
|
19
|
+
})
|
|
20
|
+
})
|