Skip to content

Commit 82ef133

Browse files
authored
Merge pull request #20 from ninth-realm/develop
Release v0.1.1
2 parents 7ede162 + 9443152 commit 82ef133

File tree

5 files changed

+60
-33
lines changed

5 files changed

+60
-33
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,18 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.1.1] - 2023-08-23
9+
10+
### Added
11+
12+
- `-setup-mode` flag to disable auth checks for initial user creation
13+
814
## [0.1.0] - 2023-08-22
915

1016
### Added
1117

1218
- Add base users, clients, and auth endpoints
1319

20+
[0.1.1]: https://github.com/ninth-realm/heimdall/compare/v0.1.0...v0.1.1
1421
[0.1.0]: https://github.com/ninth-realm/heimdall/releases/tag/v0.1.0
1522

cmd/heimdall/config.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@ package main
22

33
import (
44
"encoding/json"
5+
"flag"
56
"os"
67
)
78

89
type Config struct {
10+
port int
11+
logLevel string
12+
runMigrations bool
13+
configPath string
14+
setupMode bool
15+
916
Driver string `json:"driver"`
1017
SQLite *SQLiteConfig `json:"sqlite"`
1118
}
@@ -14,13 +21,37 @@ type SQLiteConfig struct {
1421
Path string `json:"path"`
1522
}
1623

17-
func readConfig(path string) (Config, error) {
24+
func loadConfig() (Config, error) {
25+
config := initFlags()
26+
27+
return readConfig(config, config.configPath)
28+
}
29+
30+
func initFlags() Config {
31+
var config Config
32+
33+
flag.IntVar(&config.port, "port", 8080, "Port to run on.")
34+
flag.BoolVar(&config.runMigrations, "migrate", false, "Run db migrations. Ignored for mem driver.")
35+
flag.StringVar(&config.logLevel, "log-level", "info", "Min log level: debug, info, warn, error, fatal")
36+
flag.StringVar(&config.configPath, "config", "./config.json", "Path to the config file.")
37+
flag.BoolVar(
38+
&config.setupMode,
39+
"setup-mode",
40+
false,
41+
"Removes security checks. This should only be used for initial setup when the service is not exposed to the internet.",
42+
)
43+
44+
flag.Parse()
45+
46+
return config
47+
}
48+
49+
func readConfig(config Config, path string) (Config, error) {
1850
fileContents, err := os.ReadFile(path)
1951
if err != nil {
2052
return Config{}, err
2153
}
2254

23-
var config Config
2455
err = json.Unmarshal(fileContents, &config)
2556
if err != nil {
2657
return Config{}, err

cmd/heimdall/main.go

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"errors"
5-
"flag"
65
"fmt"
76
"os"
87

@@ -28,9 +27,9 @@ func main() {
2827
}
2928

3029
func run() error {
31-
flags := initFlags()
30+
config, err := loadConfig()
3231

33-
logLevel, err := level.ParseLevel(flags.logLevel)
32+
logLevel, err := level.ParseLevel(config.logLevel)
3433
if err != nil {
3534
return err
3635
}
@@ -40,11 +39,6 @@ func run() error {
4039
return err
4140
}
4241

43-
config, err := readConfig(flags.configPath)
44-
if err != nil {
45-
return err
46-
}
47-
4842
var db sqlite.DB
4943
switch config.Driver {
5044
case "mem":
@@ -53,7 +47,7 @@ func run() error {
5347
case "sqlite":
5448
db, err = getSqliteDB(
5549
fmt.Sprintf("file:%s?mode=rwc", config.SQLite.Path),
56-
flags.runMigrations,
50+
config.runMigrations,
5751
)
5852
db.UUIDGenerator = uuidV4Fn(uuid.NewV4)
5953
default:
@@ -66,32 +60,13 @@ func run() error {
6660

6761
logger.Info("Using DB driver: %s", config.Driver)
6862

69-
return buildServer(db).ListenAndServe(fmt.Sprintf(":%d", flags.port))
70-
}
71-
72-
type flags struct {
73-
port int
74-
logLevel string
75-
runMigrations bool
76-
configPath string
77-
}
78-
79-
func initFlags() flags {
80-
var fs flags
81-
82-
flag.IntVar(&fs.port, "port", 8080, "Port to run on.")
83-
flag.BoolVar(&fs.runMigrations, "migrate", false, "Run db migrations. Ignored for mem driver.")
84-
flag.StringVar(&fs.logLevel, "log-level", "info", "Min log level: debug, info, warn, error, fatal")
85-
flag.StringVar(&fs.configPath, "config", "./config.json", "Path to the config file.")
86-
87-
flag.Parse()
88-
89-
return fs
63+
return buildServer(config, db).ListenAndServe(fmt.Sprintf(":%d", config.port))
9064
}
9165

92-
func buildServer(db store.Repository) *http.Server {
66+
func buildServer(config Config, db store.Repository) *http.Server {
9367
srv := http.NewServer()
9468
srv.Logger, _ = level.NewBasicLogger(level.Info, nil)
69+
srv.DisableAuth = config.setupMode
9570
srv.UserService = user.Service{Repo: db}
9671
srv.ClientService = client.Service{Repo: db}
9772
srv.AuthService = auth.Service{Repo: db}

http/auth.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ var authErr = errors.New("missing or invalid auth token")
1313

1414
func (s *Server) authenticateRoute(next http.Handler) http.Handler {
1515
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
16+
if s.DisableAuth {
17+
next.ServeHTTP(w, r)
18+
return
19+
}
20+
1621
err := s.authenticateAPIKey(r)
1722
if err == nil {
1823
next.ServeHTTP(w, r)

http/server.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ type Server struct {
2020
Logger level.Logger
2121
Router chi.Router
2222

23+
// DisableAuth skips all configured auth checks on all routes. This setting
24+
// is intended to be used in setup mode to allow initial users and clients
25+
// to be created.
26+
DisableAuth bool
27+
2328
UserService UserService
2429
ClientService ClientService
2530
AuthService AuthService
@@ -78,6 +83,10 @@ func (s *Server) ListenAndServe(addr string) error {
7883
s.Logger, _ = level.NewBasicLogger(level.Info, nil)
7984
}
8085

86+
if s.DisableAuth {
87+
s.Logger.Warn("Starting server in setup mode. All routes are unprotected.")
88+
}
89+
8190
s.Logger.Info("Server listening on %s", addr)
8291
return http.ListenAndServe(addr, s)
8392
}

0 commit comments

Comments
 (0)