From 365d5a68a1d0950c5f8f7989637a5478e4235ca3 Mon Sep 17 00:00:00 2001 From: Jason Streifling Date: Fri, 23 Aug 2024 21:45:10 +0200 Subject: [PATCH] Added config for Firebase key --- cmd/backend/config.go | 28 ++++++++++++++++++---------- cmd/backend/firebase.go | 4 ++-- cmd/calls/pdf.go | 4 ++-- cmd/calls/rss.go | 2 +- cmd/calls/verification.go | 4 ++-- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/cmd/backend/config.go b/cmd/backend/config.go index 9ef36a6..7f5441b 100644 --- a/cmd/backend/config.go +++ b/cmd/backend/config.go @@ -14,6 +14,7 @@ type Config struct { DBName string Description string Domain string + FirebaseKey string KeyFile string Link string LogFile string @@ -27,13 +28,14 @@ type Config struct { func newConfig() *Config { return &Config{ - DBName: "cpolis", - KeyFile: "/var/www/cpolis/cpolis.key", - LogFile: "/var/log/cpolis.log", - PDFDir: "/var/www/cpolis/pdfs", - PicsDir: "/var/www/cpolis/pics", - RSSFile: "/var/www/cpolis/cpolis.rss", - WebDir: "/var/www/cpolis/web", + DBName: "cpolis", + FirebaseKey: "/var/www/cpolis/serviceAccountKey.json", + KeyFile: "/var/www/cpolis/cpolis.key", + LogFile: "/var/log/cpolis.log", + PDFDir: "/var/www/cpolis/pdfs", + PicsDir: "/var/www/cpolis/pics", + RSSFile: "/var/www/cpolis/cpolis.rss", + WebDir: "/var/www/cpolis/web", } } @@ -76,19 +78,25 @@ func (c *Config) handleCliArgs() error { port := 8080 flag.StringVar(&c.DBName, "db", c.DBName, "DB name") - flag.StringVar(&c.Description, "desc", c.Description, "Channel description") + flag.StringVar(&c.Description, "desc", c.Description, "channel description") flag.StringVar(&c.Domain, "domain", c.Domain, "domain name") + flag.StringVar(&c.FirebaseKey, "firebase", c.FirebaseKey, "Firebase service account key file") flag.StringVar(&c.KeyFile, "key", c.KeyFile, "key file") - flag.StringVar(&c.Link, "link", c.Link, "Channel Link") + flag.StringVar(&c.Link, "link", c.Link, "channel Link") flag.StringVar(&c.LogFile, "log", c.LogFile, "log file") flag.StringVar(&c.PDFDir, "pdfs", c.PDFDir, "pdf directory") flag.StringVar(&c.PicsDir, "pics", c.PicsDir, "pictures directory") flag.StringVar(&c.RSSFile, "rss", c.RSSFile, "RSS file") - flag.StringVar(&c.Title, "title", c.Title, "Channel title") + flag.StringVar(&c.Title, "title", c.Title, "channel title") flag.StringVar(&c.WebDir, "web", c.WebDir, "web directory") flag.IntVar(&port, "port", port, "port") flag.Parse() + c.FirebaseKey, err = filepath.Abs(c.FirebaseKey) + if err != nil { + return fmt.Errorf("error finding absolute path for Firebase service account key file: %v", err) + } + c.KeyFile, err = filepath.Abs(c.KeyFile) if err != nil { return fmt.Errorf("error finding absolute path for key file: %v", err) diff --git a/cmd/backend/firebase.go b/cmd/backend/firebase.go index e58e8b4..71dd8d0 100644 --- a/cmd/backend/firebase.go +++ b/cmd/backend/firebase.go @@ -12,12 +12,12 @@ type Client struct { *auth.Client } -func NewClient() (*Client, error) { +func NewClient(c *Config) (*Client, error) { var err error client := new(Client) ctx := context.Background() - opt := option.WithCredentialsFile("path/to/serviceAccountKey.json") + opt := option.WithCredentialsFile(c.FirebaseKey) app, err := firebase.NewApp(ctx, nil, opt) if err != nil { diff --git a/cmd/calls/pdf.go b/cmd/calls/pdf.go index 7369b8e..8779634 100644 --- a/cmd/calls/pdf.go +++ b/cmd/calls/pdf.go @@ -12,7 +12,7 @@ import ( func ServePDFList(c *b.Config) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - if tokenIsVerified(w, r) { + if tokenIsVerified(w, r, c) { files, err := os.ReadDir(c.PDFDir) if err != nil { log.Println(err) @@ -37,7 +37,7 @@ func ServePDFList(c *b.Config) http.HandlerFunc { func ServePDF(c *b.Config) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - if tokenIsVerified(w, r) { + if tokenIsVerified(w, r, c) { http.ServeFile(w, r, fmt.Sprint(c.PDFDir, "/", r.PathValue("id"))) } } diff --git a/cmd/calls/rss.go b/cmd/calls/rss.go index f98c9e1..f8bc83a 100644 --- a/cmd/calls/rss.go +++ b/cmd/calls/rss.go @@ -8,7 +8,7 @@ import ( func ServeRSS(c *b.Config) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - if tokenIsVerified(w, r) { + if tokenIsVerified(w, r, c) { http.ServeFile(w, r, c.RSSFile) } } diff --git a/cmd/calls/verification.go b/cmd/calls/verification.go index 2a25665..ac8f109 100644 --- a/cmd/calls/verification.go +++ b/cmd/calls/verification.go @@ -8,7 +8,7 @@ import ( ) // tokenIsVerified verifies that a request is authorized. It returns a bool. -func tokenIsVerified(w http.ResponseWriter, r *http.Request) bool { +func tokenIsVerified(w http.ResponseWriter, r *http.Request, c *b.Config) bool { idToken := r.Header.Get("Authorization") if idToken == "" { log.Println("Authorization header missing") @@ -16,7 +16,7 @@ func tokenIsVerified(w http.ResponseWriter, r *http.Request) bool { return false } - client, err := b.NewClient() + client, err := b.NewClient(c) if err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError)