Add Secret Store Support
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
Empieza por los bindings de WIT en stubs/wit_world/imports/secret_store.py y compara las API SecretStore y Secret solicitadas con el comportamiento documentado de Fastly Secret Store. Añade cobertura de Viceroy usando @on_viceroy y datos de secret-store de test.toml inline. Se considera completado cuando estén cubiertos los wrappers de recursos, el acceso similar a un dict, los métodos de texto plano y las representaciones de cadena que no filtren secretos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Overview
Add support for Fastly's Secret Store, providing secure access to sensitive credentials and secrets at the edge.
WIT Interface
interface secret-store {
resource secret {
from-bytes: static func(bytes: list<u8>) -> result<secret, error>;
plaintext: func(max-len: u64) -> result<list<u8>, error>;
}
resource store {
open: static func(name: string) -> result<store, open-error>;
get: func(key: string) -> result<option<secret>, error>;
}
}
WIT bindings: stubs/wit_world/imports/secret_store.py
API Design
- Implement
SecretStoreresource wrapper - Implement
Secretresource withplaintext()andplaintext_str()methods - Override
__str__and__repr__to return"<Secret>"to prevent accidental exposure in logs - Provide dict-like interface:
__getitem__,__contains__ from_bytes()available but discouraged (for API compatibility when secrets come from non-store sources)
Cross-SDK Comparison:
-
Rust:
SecretStore::open()withget()(panics),try_get()(fallible),contains().Secrethasplaintext()returningByteswith lazy decryption/caching. Warns against bringing secrets into memory unnecessarily. -
Go:
Open()returns*Store,Get()returns*Secret.Plaintext()decrypts to[]byte. IncludesSecretFromBytes()for non-store secrets and conveniencePlaintext(storeName, secretName)one-liner. -
JS:
new SecretStore(name), asyncget()returnsSecretStoreEntry | null. Entry hasplaintext()(UTF-8 string) andrawBytes()(Uint8Array). StaticfromBytes()for creating entry from raw data.
Recommended Python approach:
- Dict-like access:
store[key]raises if not found,store.get(key, default=None)returns None if missing - Secret object with lazy
plaintext()returningbytes, optionalplaintext_str()for UTF-8 text - Consider context manager for secrets to encourage memory cleanup
- Security warnings in docstrings about keeping secrets in memory
Viceroy Testing
Viceroy supports Secret Store with inline or file-based test data via test.toml:
[local_server]
# Inline secrets
secret_stores.my_secrets = [
{key = "api_key", data = "secret-value-123"},
{key = "cert", file = "path/to/cert.pem"},
{key = "from_env", env = "MY_ENV_VAR"}
]
# Or JSON file format
secret_stores.json_secrets = { file = "data/secrets.json", format = "json" }
Secrets can be provided inline, from files, or from environment variables. Tests can use @on_viceroy with inline TOML configuration.
Reference
- Lenguaje dominante
- Python
- Estrellas
- 5
- Forks
- 1
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de fastly/compute-sdk-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
fastly/compute-sdk-python#116 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
fastly/compute-sdk-python#98 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
fastly/compute-sdk-python#74 ·
-
Add HTTP Downstream Metadata API Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
fastly/compute-sdk-python#61 ·
-
fastly/compute-sdk-python#60 · 1 asignado ·
Todos los issues de fastly/compute-sdk-python
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
stephrobert/dsoxlab#238 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
sublimehq/package_control#1780 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
nwg-piotr/nwg-displays#145 ·