вход переехал на доверенный заголовок Authelia вместо собственного OIDC

- пришедшего называет заголовок Remote-User от прокси, и верят ему только с
  адреса из перечня trusted_proxies; своего входа у сервиса не осталось — ни
  корня /auth, ни кук, ни срока сессии, ни секрета клиента в конфиге и в базе
- учётная запись заводится первым обращением: EnsureUser в пакете хранилища,
  шаг схемы 202608220001 с колонкой provider_login и снятыми правилами users
- cmd/oidcstub заменён на cmd/devtools с подкомандой proxy; заодно закрыт
  унаследованный DL3066 — пользователь образа назван числом
This commit is contained in:
av
2026-08-22 20:24:22 +03:00
parent e4441f3c49
commit 7f33c957e5
63 changed files with 5257 additions and 2305 deletions
+9 -13
View File
@@ -35,7 +35,7 @@ func builtDist() fs.FS {
type webappEnv struct {
mux http.Handler
journal *journalBuffer
session string
login string
}
func setupWebappEnv(t *testing.T, dist fs.FS, built bool) *webappEnv {
@@ -68,36 +68,32 @@ func setupWebappEnv(t *testing.T, dist fs.FS, built bool) *webappEnv {
)
appHandler := NewAppHandler(recordRepo, textRepo, structureRepo, trsService, logger)
authHandler := NewAuthHandler(app, AuthHandlerConfig{
AuthURL: "https://provider.example/authorize",
RedirectURL: "https://service.example/auth/callback",
ClientID: "client",
}, logger)
mounts := ServiceMounts(appHandler, authHandler, http.NotFoundHandler())
mounts := ServiceMounts(appHandler, http.NotFoundHandler())
r, err := apis.NewRouter(app)
require.NoError(t, err)
r.Bind(TrustedHeaderIdentity(app, mounts, testTrustedNetworks(t), logger))
RegisterServiceRoutes(r, mounts)
NewWebappHandler(dist, built, mounts, logger).Register(r)
mux, err := r.BuildMux()
require.NoError(t, err)
_, session := newTestAccount(t, app)
_, login := newTestAccount(t, app)
return &webappEnv{mux: mux, journal: journal, session: session}
return &webappEnv{mux: mux, journal: journal, login: login}
}
func (e *webappEnv) get(path string) *httptest.ResponseRecorder {
return e.do(http.MethodGet, path, false)
}
func (e *webappEnv) do(method, path string, withSession bool) *httptest.ResponseRecorder {
func (e *webappEnv) do(method, path string, identified bool) *httptest.ResponseRecorder {
req := httptest.NewRequest(method, path, nil)
if withSession {
req.AddCookie(&http.Cookie{Name: SessionCookieName, Value: e.session})
if identified {
asUser(req, e.login)
}
rec := httptest.NewRecorder()
@@ -124,7 +120,7 @@ func TestWebappServesMarkupOutsideServiceRoots(t *testing.T) {
func TestWebappNeverAnswersInsideServiceRoots(t *testing.T) {
env := setupWebappEnv(t, builtDist(), true)
for _, path := range []string{"/api/nope", "/_/nope", "/auth/nope"} {
for _, path := range []string{"/api/nope", "/_/nope"} {
res := env.get(path)
assert.NotContains(t, res.Body.String(), "приложение", path)