Skip to content

Commit

Permalink
Init default credentials on construct auth
Browse files Browse the repository at this point in the history
  • Loading branch information
hectorespert committed Aug 17, 2024
1 parent 813dc62 commit ec22dcd
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 17 deletions.
7 changes: 0 additions & 7 deletions controller/daemon/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,6 @@ import (
)

func (r *ReefPi) API() error {
_, err := r.a.GetCredentials()
if err != nil {
log.Println("ERROR: Failed to load credentials. Error", err)
if err := r.a.DefaultCredentials(); err != nil {
return err
}
}
err, router := startAPIServer(r.settings.Address, r.settings.HTTPS)
if err != nil {
return err
Expand Down
5 changes: 4 additions & 1 deletion controller/daemon/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ func TestAPI(t *testing.T) {
t.Error("Failed to get per minute health data.Error:", err)
}
body := new(bytes.Buffer)
json.NewEncoder(body).Encode(&DefaultCredentials)
json.NewEncoder(body).Encode(utils.Credentials{
User: "reef-pi",
Password: "reef-pi",
})
if err := tr.Do("POST", "/api/credentials", body, nil); err != nil {
t.Error("Failed to update creds via api")
}
Expand Down
13 changes: 12 additions & 1 deletion controller/daemon/capabilities_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,24 @@ func Test_Capabilities(t *testing.T) {
http.DefaultServeMux = new(http.ServeMux)
store, err := storage.NewStore("capabilities-test.db")
defer store.Close()
if err != nil {
t.Fatal(err)
}

err = store.CreateBucket(Bucket)
if err != nil {
t.Fatal(err)
}

tele := telemetry.TestTelemetry(store)

auth, err := utils.NewAuth(Bucket, store)
if err != nil {
t.Fatal(err)
}

r := &ReefPi{
a: utils.NewAuth(Bucket, store),
a: auth,
telemetry: tele,
dm: device_manager.New(settings.DefaultSettings, store, tele),
subsystems: controller.NewSubsystemComposite(),
Expand Down
8 changes: 7 additions & 1 deletion controller/daemon/reef_pi.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,19 @@ func New(version, database string) (*ReefPi, error) {
}
fn := func(t, m string) error { return logError(store, t, m) }
tele := telemetry.Initialize(s.Name, Bucket, store, fn, s.Prometheus)

auth, err := utils.NewAuth(Bucket, store)
if err != nil {
return nil, err
}

r := &ReefPi{
store: store,
settings: s,
telemetry: tele,
subsystems: controller.NewSubsystemComposite(),
version: version,
a: utils.NewAuth(Bucket, store),
a: auth,
dm: device_manager.New(s, store, tele),
}
if s.Capabilities.HealthCheck {
Expand Down
22 changes: 16 additions & 6 deletions controller/utils/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,23 +60,33 @@ func (cs *CredentialsManager) Validate(credentials Credentials) (bool, error) {
type Auth interface {
SignIn(http.ResponseWriter, *http.Request)
SignOut(http.ResponseWriter, *http.Request)
GetCredentials() (Credentials, error)
UpdateCredentials(http.ResponseWriter, *http.Request)
Me(http.ResponseWriter, *http.Request)
Authenticate(http.HandlerFunc) http.HandlerFunc
DefaultCredentials() error
}

type auth struct {
credentialsManager *CredentialsManager
cookiejar *sessions.CookieStore
}

func NewAuth(b string, store storage.Store) Auth {
return &auth{
func NewAuth(b string, store storage.Store) (Auth, error) {
a := &auth{
credentialsManager: NewCredentialsManager(store, b),
cookiejar: sessions.NewCookieStore([]byte("reef-pi-key")),
}

_, err := a.getCredentials()
if err != nil {
log.Println("ERROR: Failed to load credentials. Error", err)
log.Println("WARNING: Setting default credentials")
if err := a.defaultCredentials(); err != nil {
log.Println("ERROR: Failed to set default credentials. Error", err)
return nil, err
}
}

return a, nil
}

func (a *auth) Authenticate(fn http.HandlerFunc) http.HandlerFunc {
Expand Down Expand Up @@ -145,7 +155,7 @@ func (a *auth) SignOut(w http.ResponseWriter, req *http.Request) {
log.Println("Sign out:", req.RemoteAddr)
}

func (a *auth) GetCredentials() (Credentials, error) {
func (a *auth) getCredentials() (Credentials, error) {
return a.credentialsManager.Get()
}

Expand All @@ -157,7 +167,7 @@ func (a *auth) UpdateCredentials(w http.ResponseWriter, req *http.Request) {
JSONUpdateResponse(&credentials, fn, w, req)
}

func (a *auth) DefaultCredentials() error {
func (a *auth) defaultCredentials() error {
return a.credentialsManager.Update(Credentials{
User: "reef-pi",
Password: "reef-pi",
Expand Down
5 changes: 4 additions & 1 deletion controller/utils/auth_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ func TestAuth(t *testing.T) {
}
store.CreateBucket("reef-pi")
store.Update("reef-pi", "credentials", creds)
r := NewAuth("reef-pi", store)
r, err := NewAuth("reef-pi", store)
if err != nil {
t.Fatal(err)
}
tr := NewTestRouter()
tr.Router.HandleFunc("/sign_in", r.SignIn).Methods("GET")
tr.Router.HandleFunc("/sign_out", r.SignOut).Methods("GET")
Expand Down

0 comments on commit ec22dcd

Please sign in to comment.