refactor: Builder SoC + JWKS stub + unit tests
Builder SoC (builder/context.go):
- Moved generateDockerfile, runtimeBaseImage, zipToTarGz from handler/upload.go
to internal/builder/context.go.
Reason: knowledge about runtime images and build context structure is a
build concern, not an HTTP handler concern.
- Added PrepareContext(zipData []byte, runtime string) (*bytes.Buffer, error) —
single public entry point. Handler calls one function, gets ready buffer.
- zipToTarGz now accepts *zip.Reader instead of []byte to avoid double parsing.
- upload.go reduced from ~200 LOC to ~60 LOC (build logic gone).
auth.go — JWKS insertion point:
- Added verifySignature() stub with detailed comment explaining what v2
implementation needs (JWKS endpoint, kid lookup, RS256/ES256 verify).
- Shows exactly where to add the call in validateJWT.
Unit tests (9 total, all pass):
- controllers: TestBuildDeployment_EnvVarsSorted, TestBuildDeployment_EmptyEnv
- handler: TestHopByHopHeaders_* (3 tests)
- builder: TestPrepareContext_PythonWithRequirements, _NodeNoPackageJSON,
_UnsupportedRuntime, _DockerfileIsFirst
This commit is contained in:
@@ -91,3 +91,25 @@ func validateJWT(token string) error {
|
||||
type jwtError struct{ msg string }
|
||||
|
||||
func (e *jwtError) Error() string { return e.msg }
|
||||
|
||||
// verifySignature — точка вставки для проверки подписи JWT (v2).
|
||||
//
|
||||
// Текущее состояние (v1): подпись НЕ проверяется.
|
||||
// Причина: публичный ключ nubes недоступен внутри кластера без JWKS endpoint.
|
||||
// Безопасность обеспечивается "trusted perimeter" — оператор доступен только изнутри кластера.
|
||||
//
|
||||
// Когда nubes предоставит JWKS endpoint, реализация:
|
||||
//
|
||||
// func verifySignature(token string) error {
|
||||
// // 1. Получить JWKS: GET {NUBES_JWKS_URL}/.well-known/jwks.json
|
||||
// // 2. Найти ключ по "kid" из JWT header
|
||||
// // 3. Проверить подпись RS256/ES256
|
||||
// // Пример: github.com/lestrrat-go/jwx/v2/jwk + jwt.Parse
|
||||
// return nil
|
||||
// }
|
||||
//
|
||||
// После реализации добавить вызов в validateJWT после проверки структуры:
|
||||
//
|
||||
// if err := verifySignature(token); err != nil {
|
||||
// return &jwtError{"signature verification failed: " + err.Error()}
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user