5.8 KiB
Tokens
Plik opisuje aktualny model pracy z tokenami w launcherze.
Zrodlo prawdy
Sa dwa miejsca, w ktorych moga byc zapisane tokeny:
- remote URL-e w repo, na przyklad
http://LOGIN:TOKEN@host/org/repo.git - lokalny plik
~/dev/workspace/rv/tokens/tokens.json
Jesli remote URL zawiera LOGIN:TOKEN@..., to remote jest zrodlem prawdy.
Launcher moze wtedy zeskanowac repo i zapisac ten token do tokens.json.
Jesli remote nie ma tokena, tokens.json moze byc uzyty jako lokalny store
przy operacjach tokens write i tokens update --from store.
Format tokens.json
Tokeny sa trzymane per endpoint serwera, a dopiero pod nim per user i token:
{
"version": 2,
"servers": {
"http://77.90.8.171:3001": {
"type": "gitea",
"scheme": "http",
"host": "77.90.8.171",
"port": 3001,
"users": {
"u1": {
"tokens": {
"t1": "SECRET"
}
}
}
}
}
}
To pozwala odroznic:
- typ serwera, na przyklad
gitea,github,gitlab,unknown - endpoint, czyli
scheme + host + port - uzytkownikow na danym serwerze
- wiele tokenow dla jednego usera
Skanowanie remota
Przy tokens scan launcher:
- czyta wszystkie remote URL-e w repo
- czyta
tokens.json - laczy remote i store w pary po endpoincie serwera
- wybiera tylko
httpihttps - jesli URL ma
LOGIN:TOKEN@..., wyciaga login i token - zapisuje je pod odpowiednim endpointem w
tokens.json
Endpoint jest liczony z:
- scheme
- host
- port
Przy skanowaniu launcher zapisuje tez metadane serwera:
typeschemehostport
Komendy
tokens scan
Zrodla:
repo + tokens.json
Dzialanie:
- skanuje remote URL-e w repo
- czyta wpisy z
tokens.json - laczy oba zrodla po endpoincie serwera
- zapisuje znalezione tokeny do
tokens.json - zapisuje je per endpoint serwera
- wypisuje domyslnie tylko waska tabele
items - z
--verbosedopisuje diagnostyczne sekcjecontextorazscan
Tabela items porownuje dwa zrodla dla tego samego endpointu. Ten sam item
moze miec dwa wiersze:
source=repo- stan remote URL-i w reposource=tokens.json- stan lokalnego store tokenow
Dzieki temu widac, dla ktorego endpointu token jest w remote, a dla ktorego
jest tylko w tokens.json.
Kolumny w tabeli items:
item- numer porownywanego endpointusource-repoalbotokens.jsonid- identyfikator miejsca tokena: remoter1dla repo albo tokent1dlatokens.jsonserver- typ serwera, na przykladgiteascheme- schemat URL, na przykladhttphost- host endpointu, na przyklad77.90.8.171port- port endpointu, na przyklad3001credential- typ wpisu:auth,plain,storealbomissingrepo_user- login odczytany z remote URL-i repostore_user- login odczytany ztokens.jsontoken-yesalbono, czyli czy dane zrodlo ma token dla endpointusync-*przy zrodle prawdy albo!przy konflikcie
Tabela nie wypisuje sekretu tokena. Jezeli token jest w remote, id pokazuje
nazwe remota, na przyklad r1. Jezeli token jest w tokens.json, id
pokazuje nazwe tokenu, na przyklad t1.
Zasada znacznika sync:
in_sync,store_only,store_ahead-*przytokens.jsonrepo_only,repo_ahead-*przyrepodiverged-!, bo nie ma jednoznacznego zrodla prawdy
Przyklad:
./rvctl tokens scan
./rvctl tokens scan --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens scan --verbose
tokens read
Pokazuje szczegolowa zawartosc tokens.json.
Wynik zawiera:
- endpoint
- type
- scheme
- host
- port
- users
- tokens
Oraz liste userow i nazw tokenow dla kazdego endpointu.
Przyklad:
./rvctl tokens read
./rvctl tokens read --server http://77.90.8.171:3001
./rvctl tokens read --show-secrets
tokens stats
Pokazuje statystyki per endpoint serwera i porownuje dwa zrodla:
- endpointy znalezione w remote URL-ach repo
- endpointy zapisane w
tokens.json
Wynik ma ten sam model porownania co tokens scan, ale nie zapisuje zmian:
- liczbe endpointow w repo
- liczbe endpointow w store
- laczna unie endpointow
- statusy zgodnosci, na przyklad
in_sync,store_ahead,repo_ahead - tabele
items, w ktorej repo itokens.jsonsa osobnymi wierszami tego samego itemu
Przyklad:
./rvctl tokens stats --repo ~/dev/workspace/rv/series/inf/03
tokens write
Kierunek:
tokens.json -> repo
Dzialanie:
- bierze token z
tokens.json - wybiera endpoint, usera i token
- wpisuje dane auth do wybranego remota repo
Przyklad:
./rvctl tokens write \
--repo ~/dev/workspace/rv/series/inf/03 \
--remote r1 \
--server http://77.90.8.171:3001 \
--user u1 \
--token-name t1
tokens update
Uruchamia synchronizacje w zadanym kierunku.
Dozwolone kierunki:
tokens update --from remotestokens update --from store
Przyklad:
./rvctl tokens update --from remotes --repo ~/dev/workspace/rv/series/inf/03
./rvctl tokens update --from store --repo ~/dev/workspace/rv/series/inf/03 --remote r1 --server http://77.90.8.171:3001 --user u1 --token-name t1
Konflikty
Domyslnie launcher nie zgaduje przy konflikcie.
Jesli:
- token jest w repo, ale nie ma go w
tokens.jsonuzyjtokens scan - token jest w
tokens.json, ale nie ma go w repo uzyjtokens write - token jest i tu, i tu, ale wartosci sa rozne
wybierz kierunek jawnie przez
tokens update --from ...
Przy tokens write i tokens update --from store mozna uzyc:
--replace--dry-run
Rekomendacja
Najbezpieczniejszy model pracy:
tokens scando zczytywania danych z remote'owtokens readdo podgladu storetokens statsdo zbiorczego przegladu per endpointtokens writedo jawnego wpisania auth do remotatokens update --from ...tylko z jawnym kierunkiem