2022-05-05 13:25:50 +00:00
|
|
|
// Copyright 2022 Cloudbase Solutions SRL
|
|
|
|
|
//
|
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
|
|
|
// not use this file except in compliance with the License. You may obtain
|
|
|
|
|
// a copy of the License at
|
|
|
|
|
//
|
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
//
|
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
|
// License for the specific language governing permissions and limitations
|
|
|
|
|
// under the License.
|
|
|
|
|
|
2022-04-28 16:13:20 +00:00
|
|
|
package auth
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/json"
|
2024-01-05 23:32:16 +00:00
|
|
|
"log/slog"
|
2022-04-28 16:13:20 +00:00
|
|
|
"net/http"
|
2022-05-05 13:25:50 +00:00
|
|
|
|
2023-03-12 16:01:49 +02:00
|
|
|
"github.com/cloudbase/garm/apiserver/params"
|
|
|
|
|
"github.com/cloudbase/garm/database/common"
|
2022-04-28 16:13:20 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// NewjwtMiddleware returns a populated jwtMiddleware
|
|
|
|
|
func NewInitRequiredMiddleware(store common.Store) (Middleware, error) {
|
|
|
|
|
return &initRequired{
|
|
|
|
|
store: store,
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type initRequired struct {
|
|
|
|
|
store common.Store
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Middleware implements the middleware interface
|
|
|
|
|
func (i *initRequired) Middleware(next http.Handler) http.Handler {
|
|
|
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
2024-01-05 23:32:16 +00:00
|
|
|
ctx := r.Context()
|
2022-04-28 16:13:20 +00:00
|
|
|
ctrlInfo, err := i.store.ControllerInfo()
|
|
|
|
|
if err != nil || ctrlInfo.ControllerID.String() == "" {
|
|
|
|
|
w.Header().Add("Content-Type", "application/json")
|
|
|
|
|
w.WriteHeader(http.StatusConflict)
|
2023-01-20 22:19:54 +02:00
|
|
|
if err := json.NewEncoder(w).Encode(params.InitializationRequired); err != nil {
|
2024-01-05 23:32:16 +00:00
|
|
|
slog.With(slog.Any("error", err)).ErrorContext(ctx, "failed to encode response")
|
2023-01-20 22:19:54 +02:00
|
|
|
}
|
2022-04-28 16:13:20 +00:00
|
|
|
return
|
|
|
|
|
}
|
2024-01-05 23:32:16 +00:00
|
|
|
|
2022-04-28 16:13:20 +00:00
|
|
|
next.ServeHTTP(w, r.WithContext(ctx))
|
|
|
|
|
})
|
|
|
|
|
}
|