diff --git a/doc/tokens.md b/doc/tokens.md index baa47fb..383b018 100644 --- a/doc/tokens.md +++ b/doc/tokens.md @@ -154,6 +154,10 @@ Wartosci w `scope`: - `?` - nie wczytano - `!` - blad wczytania +Gitea moze zwrocic globalny scope `all` zamiast listy `write:*`. Launcher +rozwija wtedy `all` do pelnej maski `wwwwwwwww`. Scope `public-only` jest +flaga ograniczenia widocznosci API i nie zmienia kategorii w tej masce. + Kategorie `org_perm`: - `o` - owner diff --git a/rvctl.py b/rvctl.py index 88f6ef0..9af7734 100644 --- a/rvctl.py +++ b/rvctl.py @@ -65,6 +65,11 @@ SCOPE_FIELDS = [ ("u", "user"), ] +SCOPE_CATEGORY_ALIASES = { + "organization": ["organization", "org"], + "repository": ["repository", "repo"], +} + ORG_PERMISSION_FIELDS = [ ("o", "owner"), ("a", "admin"), @@ -1559,13 +1564,16 @@ def api_get_json(api_url: str, token_value: str, user_name: str = "", basic: boo def scope_mask(scopes: list[str]) -> str: - scope_set = {scope.lower() for scope in scopes} + scope_set = {scope.strip().lower() for scope in scopes if scope.strip()} + if "all" in scope_set: + return "w" * len(SCOPE_FIELDS) values = [] for _, category in SCOPE_FIELDS: - if f"write:{category}" in scope_set: + category_names = SCOPE_CATEGORY_ALIASES.get(category, [category]) + if any(f"write:{category_name}" in scope_set for category_name in category_names): values.append("w") - elif f"read:{category}" in scope_set: + elif any(f"read:{category_name}" in scope_set for category_name in category_names): values.append("r") else: values.append("-")