Restructure token store by remote id
This commit is contained in:
+106
-64
@@ -4,28 +4,31 @@ Plik opisuje model pracy z tokenami w launcherze.
|
||||
|
||||
## Zrodlo prawdy
|
||||
|
||||
Sa dwa miejsca, w ktorych moga byc zapisane tokeny:
|
||||
Sa dwa miejsca, w ktorych moga byc zapisane dane dostepowe:
|
||||
|
||||
- remote URL-e w repo, na przyklad `http://t1:SECRET@host/org/repo.git`
|
||||
- remote URL w repo, na przyklad `http://u1:SECRET@host/org/repo.git`
|
||||
- lokalny plik `~/dev/workspace/rv/tokens/tokens.json`
|
||||
|
||||
`tokens scan` tylko porownuje oba zrodla i niczego nie zapisuje.
|
||||
`tokens update --from remotes` czyta remote URL-e, zapisuje tokeny do
|
||||
`tokens.json` i wzbogaca je danymi z API, jezeli token dziala.
|
||||
`tokens update --from store` zapisuje wybrany token z `tokens.json` do remote
|
||||
URL-a repo.
|
||||
`tokens scan` tylko porownuje oba miejsca i niczego nie zapisuje.
|
||||
`tokens sync remote r1` czyta remote `r1` i zapisuje jego dane w
|
||||
`tokens.json`.
|
||||
`tokens sync store r1` zapisuje rekord `r1` z `tokens.json` do git remote
|
||||
`r1`.
|
||||
`tokens update r1` nie synchronizuje sekretu; tylko pobiera z API metadane
|
||||
tokenu: `valid`, `scope`, `org_perm` i `repo_perm`.
|
||||
|
||||
## Format `tokens.json`
|
||||
|
||||
Aktualny format to `version: 3`. Glownym rekordem jest token. `server`, `user`,
|
||||
`valid`, `scope` i `remotes` sa atrybutami tego tokena.
|
||||
Aktualny format to `version: 3`. Glownym rekordem jest remote-token. Pole
|
||||
`id` jest obowiazkowe i musi byc takie samo jak nazwa git remote, np. `r1`
|
||||
albo `r1a`.
|
||||
|
||||
```json
|
||||
{
|
||||
"version": 3,
|
||||
"tokens": [
|
||||
{
|
||||
"token_id": "t1",
|
||||
"id": "r1",
|
||||
"value": "SECRET",
|
||||
"server": {
|
||||
"type": "gitea",
|
||||
@@ -35,17 +38,33 @@ Aktualny format to `version: 3`. Glownym rekordem jest token. `server`, `user`,
|
||||
"port": 3001
|
||||
},
|
||||
"user": "u1",
|
||||
"org": "edu-tools",
|
||||
"repo": "rv-launcher",
|
||||
"valid": "forever",
|
||||
"scope": "-----w---",
|
||||
"remotes": [
|
||||
{
|
||||
"name": "r1",
|
||||
"org": "edu-tools",
|
||||
"repo": "rv-launcher",
|
||||
"org_perm": "+++++",
|
||||
"repo_perm": "++++"
|
||||
}
|
||||
]
|
||||
"scope": {
|
||||
"a": "-",
|
||||
"A": "-",
|
||||
"i": "-",
|
||||
"m": "-",
|
||||
"n": "-",
|
||||
"o": "-",
|
||||
"p": "-",
|
||||
"r": "w",
|
||||
"u": "-"
|
||||
},
|
||||
"org_perm": {
|
||||
"o": "+",
|
||||
"a": "+",
|
||||
"w": "+",
|
||||
"r": "+",
|
||||
"c": "+"
|
||||
},
|
||||
"repo_perm": {
|
||||
"o": "+",
|
||||
"a": "+",
|
||||
"w": "+",
|
||||
"r": "+"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -57,28 +76,27 @@ Schemat JSON jest w pliku `doc/tokens.schema.json`.
|
||||
|
||||
Pola synchronizowane z remote URL-a:
|
||||
|
||||
- `id` - nazwa git remote, np. `r1`; to jest klucz rekordu w `tokens.json`
|
||||
- `server.endpoint` - endpoint serwera, na przyklad `http://77.90.8.171:3001`
|
||||
- `server.type` - typ serwera, na przyklad `gitea`, `github`, `gitlab`, `unknown`
|
||||
- `token_id` - identyfikator z lewej strony URL-a, na przyklad `t1` w `http://t1:SECRET@...`
|
||||
- `user` - login z URL-a, czyli lewa strona `http://u1:SECRET@...`
|
||||
- `value` - sekret tokena
|
||||
- `remotes[].name` - nazwa remota, na przyklad `r1`
|
||||
- `remotes[].org` - organizacja z URL-a
|
||||
- `remotes[].repo` - repo z URL-a
|
||||
- `org` - organizacja z URL-a
|
||||
- `repo` - repo z URL-a
|
||||
|
||||
Pola wzbogacane przez API przy `tokens update --from remotes`:
|
||||
Pola wzbogacane przez API przy `tokens update r1`:
|
||||
|
||||
- `user` - login wlasciciela tokena odczytany z API
|
||||
- `valid` - `forever`, data `expires_at`, `invalid`, `?` albo `!`
|
||||
- `scope` - maska scope tokena w kolejnosci `aAimnopru`
|
||||
- `remotes[].org_perm` - maska praw w organizacji
|
||||
- `remotes[].repo_perm` - maska praw w repo
|
||||
- `scope` - mapa scope tokena
|
||||
- `org_perm` - mapa praw w organizacji
|
||||
- `repo_perm` - mapa praw w repo
|
||||
|
||||
## Porownanie
|
||||
|
||||
Porownanie z `git remote -v` jest robione po:
|
||||
|
||||
```text
|
||||
server.endpoint + remote.name + token_id + value + org + repo
|
||||
server.endpoint + id + user + value + org + repo
|
||||
```
|
||||
|
||||
Znacznik w kolumnie `token_ref`:
|
||||
@@ -88,10 +106,13 @@ Znacznik w kolumnie `token_ref`:
|
||||
- `S` - wpis istnieje tylko w `tokens.json`
|
||||
- `!` - remote i `tokens.json` sa zgodne, ale zapisany token jest `invalid` albo ma blad walidacji
|
||||
|
||||
Bez `*` albo `!` kolumny `valid`, `scope`, `org` i `repo` w raporcie maja
|
||||
Bez zgodnego wpisu kolumny `valid`, `scope`, `org` i `repo` w raporcie maja
|
||||
wartosc `?`, bo launcher nie pokazuje metadanych API dla niesparowanych wpisow.
|
||||
|
||||
## Maski uprawnien
|
||||
## Uprawnienia
|
||||
|
||||
W `tokens.json` uprawnienia sa zapisane jako mapy klucz-wartosc. W tabeli CLI sa
|
||||
pokazywane skrocone maski.
|
||||
|
||||
Naglowki masek:
|
||||
|
||||
@@ -119,7 +140,22 @@ Znaki w `scope`:
|
||||
- `?` - nie wczytano
|
||||
- `!` - blad wczytania
|
||||
|
||||
Znaki w `org` i `repo`:
|
||||
Kategorie `org_perm`:
|
||||
|
||||
- `o` - owner
|
||||
- `a` - admin
|
||||
- `w` - write
|
||||
- `r` - read
|
||||
- `c` - create repository
|
||||
|
||||
Kategorie `repo_perm`:
|
||||
|
||||
- `o` - owner
|
||||
- `a` - admin
|
||||
- `w` - write
|
||||
- `r` - read
|
||||
|
||||
Znaki w `org_perm` i `repo_perm`:
|
||||
|
||||
- `+` - flaga wlaczona
|
||||
- `-` - flaga wylaczona
|
||||
@@ -130,26 +166,43 @@ Znaki w `org` i `repo`:
|
||||
|
||||
### `tokens scan`
|
||||
|
||||
Read-only. Czyta remote URL-e i `tokens.json`, a potem wypisuje tabele `tokens`.
|
||||
Nie tworzy i nie modyfikuje `tokens.json`.
|
||||
Read-only. Czyta remote URL-e i `tokens.json`, a potem wypisuje tabele
|
||||
`tokens`. Nie tworzy i nie modyfikuje `tokens.json`.
|
||||
|
||||
```bash
|
||||
./rvctl tokens scan
|
||||
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/03
|
||||
```
|
||||
|
||||
### `tokens update --from remotes`
|
||||
### `tokens sync remote REMOTE_ID`
|
||||
|
||||
Kopiuje tokeny z remote URL-i repo do `tokens.json`, zapisuje rekordy w formacie
|
||||
v3 i probuje pobrac pola API: `user`, `valid`, `scope`, `org_perm`,
|
||||
`repo_perm`.
|
||||
Kopiuje dane dostepowe z git remote do `tokens.json`. Nie pobiera metadanych z
|
||||
API.
|
||||
|
||||
```bash
|
||||
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/tools/rv-launcher
|
||||
./rvctl tokens update --from remotes --dry-run
|
||||
./rvctl tokens sync remote r1
|
||||
./rvctl tokens sync remote r1 --repo ~/dev/workspace/rv/tools/rv-launcher
|
||||
```
|
||||
|
||||
`--dry-run` dziala jak read-only raport i niczego nie zapisuje.
|
||||
### `tokens update REMOTE_ID`
|
||||
|
||||
Pobiera z API metadane dla rekordu `REMOTE_ID` juz zapisanego w `tokens.json`.
|
||||
Nie zmienia git remote URL-a i nie kopiuje sekretu z remote.
|
||||
|
||||
```bash
|
||||
./rvctl tokens update r1
|
||||
./rvctl tokens update r1 --dry-run
|
||||
```
|
||||
|
||||
### `tokens sync store REMOTE_ID`
|
||||
|
||||
Zapisuje dane z rekordu `REMOTE_ID` w `tokens.json` do git remote o tej samej
|
||||
nazwie.
|
||||
|
||||
```bash
|
||||
./rvctl tokens sync store r1 --repo ~/dev/workspace/rv/series/inf/03
|
||||
./rvctl tokens sync store r1 --repo PATH --replace
|
||||
```
|
||||
|
||||
### `tokens read`
|
||||
|
||||
@@ -163,16 +216,16 @@ Pokazuje zawartosc `tokens.json`.
|
||||
|
||||
### `tokens add`
|
||||
|
||||
Dodaje pusty szkielet tokena do `tokens.json`. Pole `value` zostaje puste, zeby
|
||||
mozna bylo recznie wkleic sekret.
|
||||
Dodaje pusty szkielet rekordu do `tokens.json`. `REMOTE_ID` musi odpowiadac
|
||||
nazwie git remote.
|
||||
|
||||
```bash
|
||||
./rvctl tokens add t1
|
||||
./rvctl tokens add r6 --server http://77.90.8.171:3001
|
||||
./rvctl tokens add t1 --remote r1 --org edu-tools --repo rv-launcher
|
||||
./rvctl tokens add r1
|
||||
./rvctl tokens add r1 --server http://77.90.8.171:3001 --user u1 --org edu-tools --repo rv-launcher
|
||||
```
|
||||
|
||||
`tokens write` nie uzyje pustego tokena. Najpierw trzeba uzupelnic `value`.
|
||||
`tokens sync store r1` nie uzyje pustego tokena. Najpierw trzeba uzupelnic
|
||||
`value` i `user`.
|
||||
|
||||
### `tokens stats`
|
||||
|
||||
@@ -182,23 +235,12 @@ Pokazuje kontekst, tabele `tokens` i podsumowanie statusow endpointow.
|
||||
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/03
|
||||
```
|
||||
|
||||
### `tokens write`
|
||||
### Komendy zgodnosci
|
||||
|
||||
Zapisuje wybrany token z `tokens.json` do remote URL-a repo.
|
||||
Stare komendy nadal dzialaja, ale sa mniej jednoznaczne:
|
||||
|
||||
```bash
|
||||
./rvctl tokens write \
|
||||
--repo ~/dev/workspace/rv/series/inf/03 \
|
||||
--remote r1 \
|
||||
--server http://77.90.8.171:3001 \
|
||||
--token-name t1
|
||||
```
|
||||
|
||||
### `tokens update --from store`
|
||||
|
||||
Alias kierunkowy na zapis store -> remote. Uzywa tych samych opcji co
|
||||
`tokens write`.
|
||||
|
||||
```bash
|
||||
./rvctl tokens update --from store --repo PATH --remote r1 --server http://77.90.8.171:3001 --token-name t1
|
||||
./rvctl tokens update --from remotes --repo PATH
|
||||
./rvctl tokens update --from store --repo PATH --remote r1 --server http://77.90.8.171:3001
|
||||
./rvctl tokens write --repo PATH --remote r1 --server http://77.90.8.171:3001
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user