Skip to content

Commit

Permalink
Merge branch 'main' into topics/admin-clients
Browse files Browse the repository at this point in the history
  • Loading branch information
mikelax committed Oct 24, 2023
2 parents 07fb319 + 07a22a6 commit 7a3534a
Show file tree
Hide file tree
Showing 17 changed files with 295 additions and 172 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v2
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
# Setup .npmrc file to publish to GitHub Packages
- uses: actions/setup-node@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/render-diagrams.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: Trepp/actions-render-wsq@v1
with:
folder: './diagrams'
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/run-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
PGSCHEMA: usher
steps:
- run: sudo ethtool -K eth0 tx off rx off
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
node-version: 18
Expand All @@ -28,8 +28,8 @@ jobs:
database/package-lock.json
server/package-lock.json
mockidentityprovider/package-lock.json
- name: build docker-compose stack
run: docker-compose -f docker-compose-ci.yml up -d
- name: build docker compose stack
run: docker compose -f docker-compose-ci.yml up -d
- name: Check running containers
run: docker ps
- name: database npm ci
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ You can run the sample client and resource servers, or host them somewhere. Dur
This list of links is written for developers that would like to contribute to The Usher's codebase.

* [CONTRIBUTING](./docs/CONTRIBUTING.md) (governance model and process for contributing)
* [DEVELOP](./docs/DEVELOP.md) (use docker-compose to bring up your dev environment)
* [DEVELOP](./docs/DEVELOP.md) (use docker compose to bring up your dev environment)

## What currently works

Expand Down
13 changes: 12 additions & 1 deletion database/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,18 @@ npm run seed:run
npm run db-reset-test-data
```

### How to add db change (migration)
### How to upgrade to new Postgres major version

To upgrade between major versions of Postgres, ie. from 13 -> 14, you will have to use a command like [pg_upgrade](https://www.postgresql.org/docs/current/pgupgrade.html) or `pg_dumpall`. If you want to preserve the data from your current database, you can follow [this guide](https://thomasbandt.com/postgres-docker-major-version-upgrade).

If you don't care about preserving the data, then you can simply follow the below steps.

1. stop the docker compose stack
1. delete the `storage` folder
1. Update the version number in the docker-compose file
1. start the docker compose stack again

## How to add db change (migration)

To add a change to the existing database schema, ie. a new table, column, etc you must first create a new db migration using knex. The main point to keep in mind is that each migration file is an incremental change to the schema. This allows someone to re-build the database by running all migration files in the correct (timestamp) order.

Expand Down
34 changes: 19 additions & 15 deletions database/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions database/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
"license": "MIT",
"dependencies": {
"dotenv": "16.3.1",
"knex": "2.5.1",
"knex": "3.0.1",
"pg": "8.11.3",
"uuid": "9.0.0"
"uuid": "9.0.1"
},
"devDependencies": {
"mocha": "^10.2.0"
Expand Down
3 changes: 1 addition & 2 deletions docker-compose-ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
version: '3.8'
services:
db:
image: postgres:12.9-alpine
image: postgres:13.12-alpine
ports:
- "5432:5432"
environment:
Expand Down
35 changes: 3 additions & 32 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,7 @@
version: '3.8'
include:
- docker-compose-ci.yml

services:
db:
image: postgres:12.9-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_USER=${PGUSER:-postgres}
- POSTGRES_PASSWORD=${PGPASSWORD:-tehsecure}
volumes:
- ./storage/postgres:/var/lib/postgresql/data
networks:
main:
aliases:
- usher-db
usher-server:
image: node:18-alpine
expose: [3001, 9229]
Expand All @@ -35,21 +24,3 @@ services:
aliases:
- usher-server
restart: on-failure
mockidentityprovider-server:
image: node:18-alpine
expose: [3002]
entrypoint: ["sh", "/app/scripts/run_for_development_mockidentityprovider.sh"]
ports:
- 3002:3002
volumes:
- ./:/app
networks:
main:
aliases:
- mockidentityprovider
- idp.dmgt.com.mock.localhost
- branded-idp-alias.dmgt.com.mock.localhost
- notwhitelisted.labs.dmgt.com.mock.localhost
- whitelisted-but-not-aliased.labs.dmgt.com.mock.localhost
networks:
main:
6 changes: 3 additions & 3 deletions docs/DEVELOP.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ The Usher requires access to a PostgreSQL database. You may run a database insta

See the full database set up and usage instructions in the [database README](../database).

### Development Environment Setup Using docker-compose
### Development Environment Setup using docker compose

Here are more details on our preferred development configuration, using docker-compose. To start a ready-to-go development environment, issue the following command `docker-compose up` in the root directory of the project (above server/ and database/). This command fires up *docker-compose* which runs 3 instances:
Here are more details on our preferred development configuration, using docker compose. To start a ready-to-go development environment, issue the following command `docker compose up` in the root directory of the project (above server/ and database/). This command fires up *docker-compose* which runs 3 instances:

1. Postgres database
2. The Usher server
Expand All @@ -87,7 +87,7 @@ When Usher server is running, the following ports will be exposed:
1. **3002** - Mock identity server
1. **9229** - Inspector. You may attach your debugger to this port

To exit the process you may use `ctrl-c` or run `docker-compose down`.
To exit the process you may use `ctrl-c` or run `docker compose down`.

### Run new database migration / seed / reset db

Expand Down
48 changes: 24 additions & 24 deletions docs/QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ If you have Docker (and Docker Compose), it is fairly easy to take The Usher for
```sh
git clone https://github.com/DMGT-TECH/the-usher-server
cd the-usher-server
docker-compose up # Ubuntu: requires apt install docker.io docker-compose
docker compose up
```

Done. This will launch three containers: The Usher server, its database (seeded with test data), and a mock identity server. All three are accessible via port forwarding on the machine where `docker-compose up` was run.
Done. 🚀 This will launch three containers: The Usher server, its database (seeded with test data), and a mock identity server. All three are accessible via port forwarding on the machine where `docker compose up` was run.

## The Test Drive

Expand All @@ -26,18 +26,18 @@ The Usher ships with a mock identity provider that simulates Auth0's API endpoin

```json
{
"access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1UVkVOVUV5TkVZelJrWkZNekpDTURrek5UZzJSRGRGUWpSQ05rWTROemhFUkRaR00wSTFNdyJ9.eyJpc3MiOiJodHRwczovL2RtZ3QtdGVzdC5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NWU0NzJiMmQ4YTQwOWUwZTYyMDI2ODU2IiwiYXVkIjpbImh0dHBzOi8vdXMtY2VudHJhbDEtZG1ndC1vb2N0by5jbG91ZGZ1bmN0aW9ucy5uZXQvdGhlLXVzaGVyIiwiaHR0cHM6Ly9kbWd0LXRlc3QuYXV0aDAuY29tL3VzZXJpbmZvIl0sImlhdCI6MTYxODk1Njc5MiwiZXhwIjoxNjE5MDQzMTkyLCJhenAiOiJTWHZLN3ByUGtSUER5RWxFQ0xPMXJ6TEJLUTNiaE11ciIsInNjb3BlIjoib3BlbmlkIGVtYWlsIiwiZ3R5IjoicGFzc3dvcmQifQ.tGGVnuYGv33G-tov581SUSpt-rDDLNYLhS7Olyp6g6cXnuvg-BWco5csy7MsY_SMhMIM5MslK5PN7n42CPZpSbSb-kcb-QqOXCAdkuNDchXrw-8gtnno7fhvWX8rmV8O4yCbfFyi0giTUJHKzEJozp6IQbKOqRSX38rOic7enKnuPueJ9-Ate78p02qT3EH06tjHtBk7xzgokwPf-EZyDsO9Phk_MJiEAalE-S0a4_ymbAt0-HVn78TpOD5gisGDBWmOXGE557Gs1d2DSB8IW5wP-YLv-StR9AdS1SKf24nPcw76FD_1CxN02zqR3nDAvHtnICcKcVvnpug1mFP61A",
"expires_in" : 86400,
"id_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1UVkVOVUV5TkVZelJrWkZNekpDTURrek5UZzJSRGRGUWpSQ05rWTROemhFUkRaR00wSTFNdyJ9.eyJlbWFpbCI6InRlc3QtdXNlcjFAZG1ndG9vY3RvLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiaXNzIjoiaHR0cHM6Ly9kbWd0LXRlc3QuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDVlNDcyYjJkOGE0MDllMGU2MjAyNjg1NiIsImF1ZCI6IlNYdks3cHJQa1JQRHlFbEVDTE8xcnpMQktRM2JoTXVyIiwiaWF0IjoxNjE4OTU2NzkyLCJleHAiOjE2MTg5OTI3OTJ9.ayecXkRqmq8Llb-Lm_BOKuUk9t0Ovcdacx8ojUB7EC_oNlh6fhIrMTnb6yfkGC4v1CRJmZ-WhiTKvlC5GzWI8Fl6xV_iCX6KrdhuaDyHLA5aHH_1VEGbluzpW39LIpxOkQi1aT6X9LX625-6lO20GKxNnVxTzryCbfUPhcfX0_Uo8zEU-mKycu3ujFB3_D6lQ5Rh1NLHQeFlY1NfUAVqzAVsoHA8xaGAro7gKIq19QPXgj1lvPKDbOMN2z_uK9pTLcd_loxoUP0GiJnplPNOx_9YRbq8Uk69XDacYsZoz58pDLIG59LeBC7UVqECOP97ChGgIHiqZVkqddcKt3feMQ",
"scope" : "openid email",
"token_type" : "Bearer"
"access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1UVkVOVUV5TkVZelJrWkZNekpDTURrek5UZzJSRGRGUWpSQ05rWTROemhFUkRaR00wSTFNdyJ9.eyJpc3MiOiJodHRwczovL2RtZ3QtdGVzdC5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NWU0NzJiMmQ4YTQwOWUwZTYyMDI2ODU2IiwiYXVkIjpbImh0dHBzOi8vdXMtY2VudHJhbDEtZG1ndC1vb2N0by5jbG91ZGZ1bmN0aW9ucy5uZXQvdGhlLXVzaGVyIiwiaHR0cHM6Ly9kbWd0LXRlc3QuYXV0aDAuY29tL3VzZXJpbmZvIl0sImlhdCI6MTYxODk1Njc5MiwiZXhwIjoxNjE5MDQzMTkyLCJhenAiOiJTWHZLN3ByUGtSUER5RWxFQ0xPMXJ6TEJLUTNiaE11ciIsInNjb3BlIjoib3BlbmlkIGVtYWlsIiwiZ3R5IjoicGFzc3dvcmQifQ.tGGVnuYGv33G-tov581SUSpt-rDDLNYLhS7Olyp6g6cXnuvg-BWco5csy7MsY_SMhMIM5MslK5PN7n42CPZpSbSb-kcb-QqOXCAdkuNDchXrw-8gtnno7fhvWX8rmV8O4yCbfFyi0giTUJHKzEJozp6IQbKOqRSX38rOic7enKnuPueJ9-Ate78p02qT3EH06tjHtBk7xzgokwPf-EZyDsO9Phk_MJiEAalE-S0a4_ymbAt0-HVn78TpOD5gisGDBWmOXGE557Gs1d2DSB8IW5wP-YLv-StR9AdS1SKf24nPcw76FD_1CxN02zqR3nDAvHtnICcKcVvnpug1mFP61A",
"expires_in" : 86400,
"id_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik1UVkVOVUV5TkVZelJrWkZNekpDTURrek5UZzJSRGRGUWpSQ05rWTROemhFUkRaR00wSTFNdyJ9.eyJlbWFpbCI6InRlc3QtdXNlcjFAZG1ndG9vY3RvLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiaXNzIjoiaHR0cHM6Ly9kbWd0LXRlc3QuYXV0aDAuY29tLyIsInN1YiI6ImF1dGgwfDVlNDcyYjJkOGE0MDllMGU2MjAyNjg1NiIsImF1ZCI6IlNYdks3cHJQa1JQRHlFbEVDTE8xcnpMQktRM2JoTXVyIiwiaWF0IjoxNjE4OTU2NzkyLCJleHAiOjE2MTg5OTI3OTJ9.ayecXkRqmq8Llb-Lm_BOKuUk9t0Ovcdacx8ojUB7EC_oNlh6fhIrMTnb6yfkGC4v1CRJmZ-WhiTKvlC5GzWI8Fl6xV_iCX6KrdhuaDyHLA5aHH_1VEGbluzpW39LIpxOkQi1aT6X9LX625-6lO20GKxNnVxTzryCbfUPhcfX0_Uo8zEU-mKycu3ujFB3_D6lQ5Rh1NLHQeFlY1NfUAVqzAVsoHA8xaGAro7gKIq19QPXgj1lvPKDbOMN2z_uK9pTLcd_loxoUP0GiJnplPNOx_9YRbq8Uk69XDacYsZoz58pDLIG59LeBC7UVqECOP97ChGgIHiqZVkqddcKt3feMQ",
"scope" : "openid email",
"token_type" : "Bearer"
}
```

Let's keep a copy of an access token using jq to grab it from the JSON output:

```sh
export IDP_TOKEN=`./server/scripts/get_jwt_for_test_tenant.sh | jq --raw-output .access_token`
export IDP_TOKEN=`./server/scripts/get_idp_token_from_mockserver.sh | jq --raw-output .access_token`
```

Now let's use the IdP token to get an access token from The Usher:
Expand All @@ -48,10 +48,10 @@ curl -X POST "http://localhost:3001/self/token" -H "Content-type: application/js

```json
{
"access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjEtMDQtMTlUMTg6NDk6MTkuMzM2KzAwOjAwIn0.eyJpc3MiOiIkU0VSVkVSX1VSTCIsInN1YiI6ImF1dGgwfDVlNDcyYjJkOGE0MDllMGU2MjAyNjg1NiIsImF6cCI6InRlc3QtY2xpZW50MSIsInJvbGVzIjoidGVzdC1jbGllbnQxOnRlc3Qtcm9sZTEgdGVzdC1jbGllbnQxOnRlc3Qtcm9sZTIgIiwic2NvcGUiOiJ0ZXN0LXBlcm1pc3Npb24xIHRlc3QtcGVybWlzc2lvbjIgdGVzdC1wZXJtaXNzaW9uMyB0ZXN0LXBlcm1pc3Npb240IHRlc3QtcGVybWlzc2lvbjgiLCJleHAiOjE2MTg5NjA2MjEsImlhdCI6MTYxODk1NzAyMX0.XhkKZKF9ob23NcRwYUFd40DoSPMPu9r_ka_fM3boaAqp3i6J74oISjUN8ygWlMbYSZXXjdmvLsfyhbRIqBGO_oFTfiiJYSwVI7peGwDC-rsi6R3mapdMXDWwVsU5omtG4DO_k5TOS1jvQXKQSfXj-D2bNpDzYm0x121TXfE4ZLW1rf2TCNO29Smbm-BBp8xckvp8hq3-XrQG_BeRm2-EnpX5boYnQgHGad7mfjU1gAELx1ryiEwv5-9DgUgkEzAXQuFzGb0_7dob8WMLzsKVdORDj-Rm76mQHVO4OVbIPhn_R0xMXgUaZW80ksTdKagh01y-Y-hWdW62DRRFglyv6A",
"expires_in" : 3600,
"refresh_token" : "f697eabc-2d9d-47af-afc0-b186a83a983a",
"token_type" : "Bearer"
"access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjEtMDQtMTlUMTg6NDk6MTkuMzM2KzAwOjAwIn0.eyJpc3MiOiIkU0VSVkVSX1VSTCIsInN1YiI6ImF1dGgwfDVlNDcyYjJkOGE0MDllMGU2MjAyNjg1NiIsImF6cCI6InRlc3QtY2xpZW50MSIsInJvbGVzIjoidGVzdC1jbGllbnQxOnRlc3Qtcm9sZTEgdGVzdC1jbGllbnQxOnRlc3Qtcm9sZTIgIiwic2NvcGUiOiJ0ZXN0LXBlcm1pc3Npb24xIHRlc3QtcGVybWlzc2lvbjIgdGVzdC1wZXJtaXNzaW9uMyB0ZXN0LXBlcm1pc3Npb240IHRlc3QtcGVybWlzc2lvbjgiLCJleHAiOjE2MTg5NjA2MjEsImlhdCI6MTYxODk1NzAyMX0.XhkKZKF9ob23NcRwYUFd40DoSPMPu9r_ka_fM3boaAqp3i6J74oISjUN8ygWlMbYSZXXjdmvLsfyhbRIqBGO_oFTfiiJYSwVI7peGwDC-rsi6R3mapdMXDWwVsU5omtG4DO_k5TOS1jvQXKQSfXj-D2bNpDzYm0x121TXfE4ZLW1rf2TCNO29Smbm-BBp8xckvp8hq3-XrQG_BeRm2-EnpX5boYnQgHGad7mfjU1gAELx1ryiEwv5-9DgUgkEzAXQuFzGb0_7dob8WMLzsKVdORDj-Rm76mQHVO4OVbIPhn_R0xMXgUaZW80ksTdKagh01y-Y-hWdW62DRRFglyv6A",
"expires_in" : 3600,
"refresh_token" : "f697eabc-2d9d-47af-afc0-b186a83a983a",
"token_type" : "Bearer"
}
```

Expand All @@ -77,12 +77,12 @@ curl -X GET "http://localhost:3001/self/permissions" -H "Content-type: applicati

```json
{
"permission" : [
"test-permission1",
"test-permission2",
"test-permission3",
"test-permission4"
]
"permission" : [
"test-permission1",
"test-permission2",
"test-permission3",
"test-permission4"
]
}
```

Expand All @@ -92,7 +92,7 @@ Notice from the decoded token above, The Usher's server name is not configured a

Here's how to configure it manually:

1. Take down the server using Ctrl-C or docker-compose down.
1. Take down the server using Ctrl-C or `docker compose down`.
1. List your docker containers with docker ps -a and delete them docker rm ######

```sh
Expand All @@ -107,7 +107,7 @@ Here's how to configure it manually:

1. Copy server/.env.sample to server/.env
1. Add a line to configure the server url equal to your desired issuer: `PRESET_SERVER_URL=http://dmgt-oocto.com`
1. docker-compose up
1. docker compose up

Note you could ssh into the docker container using `docker exec -it [usher-server-Container-Id] sh` , edit the configuration, and re-launch it.

Expand All @@ -119,10 +119,10 @@ curl -X POST "http://localhost:3001/self/token" -H "Content-type: application/js

```json
{
"access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjEtMDQtMTlUMTg6NDk6MTkuMzM2KzAwOjAwIn0.eyJpc3MiOiJodHRwOi8vZG1ndC1vb2N0by5jb20iLCJzdWIiOiJhdXRoMHw1ZTQ3MmIyZDhhNDA5ZTBlNjIwMjY4NTYiLCJhenAiOiJ0ZXN0LWNsaWVudDEiLCJyb2xlcyI6InRlc3QtY2xpZW50MTp0ZXN0LXJvbGUxIHRlc3QtY2xpZW50MTp0ZXN0LXJvbGUyICIsInNjb3BlIjoidGVzdC1wZXJtaXNzaW9uMSB0ZXN0LXBlcm1pc3Npb24yIHRlc3QtcGVybWlzc2lvbjMgdGVzdC1wZXJtaXNzaW9uNCB0ZXN0LXBlcm1pc3Npb244IiwiZXhwIjoxNjE4OTYyNDQzLCJpYXQiOjE2MTg5NTg4NDN9.t7m9KtbakZxrWD4ALuVk0UgmQuYv2SGgx8H9SyFsxX7fjAXvQMOJ7P91BUjNLYPGnBG5TCmO2oaC3PqNGiRDLMfKzUa0S9lrepdkf6zFTlL93ScEnFaxrJuKty3UVyk-iDP_2CC46gxu6ihIr28zDu73TawQQjzr1UT4LYhNOK9Zq7tGDHE8WZPuXitbzr4WlhxiXEXxr1D8R6FS6unpp0xCsOl-XKaRMUAVwERk5S3Cub1FFFKJrKJ22PwD4Uss8lQN0WyHlJ6zWlPvDf3TieNVlm1wsxaPTYDbEbbS6CKYMRotC0xRE0xbaggZ-wBEJWzH78ub5TyGMjhdG1FZ2Q",
"expires_in" : 3600,
"refresh_token" : "629fa7a8-3d73-4143-99ef-b7cf8bfd3291",
"token_type" : "Bearer"
"access_token" : "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjEtMDQtMTlUMTg6NDk6MTkuMzM2KzAwOjAwIn0.eyJpc3MiOiJodHRwOi8vZG1ndC1vb2N0by5jb20iLCJzdWIiOiJhdXRoMHw1ZTQ3MmIyZDhhNDA5ZTBlNjIwMjY4NTYiLCJhenAiOiJ0ZXN0LWNsaWVudDEiLCJyb2xlcyI6InRlc3QtY2xpZW50MTp0ZXN0LXJvbGUxIHRlc3QtY2xpZW50MTp0ZXN0LXJvbGUyICIsInNjb3BlIjoidGVzdC1wZXJtaXNzaW9uMSB0ZXN0LXBlcm1pc3Npb24yIHRlc3QtcGVybWlzc2lvbjMgdGVzdC1wZXJtaXNzaW9uNCB0ZXN0LXBlcm1pc3Npb244IiwiZXhwIjoxNjE4OTYyNDQzLCJpYXQiOjE2MTg5NTg4NDN9.t7m9KtbakZxrWD4ALuVk0UgmQuYv2SGgx8H9SyFsxX7fjAXvQMOJ7P91BUjNLYPGnBG5TCmO2oaC3PqNGiRDLMfKzUa0S9lrepdkf6zFTlL93ScEnFaxrJuKty3UVyk-iDP_2CC46gxu6ihIr28zDu73TawQQjzr1UT4LYhNOK9Zq7tGDHE8WZPuXitbzr4WlhxiXEXxr1D8R6FS6unpp0xCsOl-XKaRMUAVwERk5S3Cub1FFFKJrKJ22PwD4Uss8lQN0WyHlJ6zWlPvDf3TieNVlm1wsxaPTYDbEbbS6CKYMRotC0xRE0xbaggZ-wBEJWzH78ub5TyGMjhdG1FZ2Q",
"expires_in" : 3600,
"refresh_token" : "629fa7a8-3d73-4143-99ef-b7cf8bfd3291",
"token_type" : "Bearer"
}
```

Expand Down
Loading

0 comments on commit 7a3534a

Please sign in to comment.