Move html pages to a package
That way I can separate out HTML for the public-facing report system and Nidus sync.
This commit is contained in:
parent
8c1026a653
commit
4c23eba5d7
51 changed files with 45 additions and 43 deletions
|
|
@ -7,7 +7,7 @@ pkgs.buildGoModule rec {
|
|||
pname = "nidus-sync";
|
||||
src = ./.;
|
||||
subPackages = [];
|
||||
version = "0.0.7";
|
||||
version = "0.0.8";
|
||||
# Needs to be updated after every modification of go.mod/go.sum
|
||||
vendorHash = "sha256-JuRB/2pNidonwQm6iCyUXiFxkAwizEXdwieRRjgSBwI=";
|
||||
vendorHash = "sha256-5E5gQJh2cr/XwDg+XRQEdXW7mkObZMoyqQnfToVuZ10=";
|
||||
}
|
||||
|
|
|
|||
21
endpoint.go
21
endpoint.go
|
|
@ -11,6 +11,7 @@ import (
|
|||
|
||||
"github.com/Gleipnir-Technology/nidus-sync/auth"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/db/models"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/htmlpage"
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/google/uuid"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
|
@ -53,7 +54,7 @@ func getCellDetails(w http.ResponseWriter, r *http.Request, user *models.User) {
|
|||
respondError(w, "Cannot convert provided cell to uint64", err, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
htmlCell(r.Context(), w, user, cell)
|
||||
htmlpage.Cell(r.Context(), w, user, cell)
|
||||
}
|
||||
|
||||
func getFavicon(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
@ -68,7 +69,7 @@ func getOAuthRefresh(w http.ResponseWriter, r *http.Request) {
|
|||
http.Redirect(w, r, "/?next=/oauth/refresh", http.StatusFound)
|
||||
return
|
||||
}
|
||||
htmlOauthPrompt(w, user)
|
||||
htmlpage.OauthPrompt(w, user)
|
||||
}
|
||||
|
||||
func getQRCodeReport(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
@ -145,7 +146,7 @@ func getRoot(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
if user == nil {
|
||||
errorCode := r.URL.Query().Get("error")
|
||||
htmlSignin(w, errorCode)
|
||||
htmlpage.Signin(w, errorCode)
|
||||
return
|
||||
} else {
|
||||
has, err := hasFieldseekerConnection(r.Context(), user)
|
||||
|
|
@ -154,10 +155,10 @@ func getRoot(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
if has {
|
||||
htmlDashboard(r.Context(), w, user)
|
||||
htmlpage.Dashboard(r.Context(), w, user)
|
||||
return
|
||||
} else {
|
||||
htmlOauthPrompt(w, user)
|
||||
htmlpage.OauthPrompt(w, user)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
|
@ -167,16 +168,16 @@ func getRoot(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
func getSettings(w http.ResponseWriter, r *http.Request, u *models.User) {
|
||||
htmlSettings(w, r, u)
|
||||
htmlpage.Settings(w, r, u)
|
||||
}
|
||||
|
||||
func getSignin(w http.ResponseWriter, r *http.Request) {
|
||||
errorCode := r.URL.Query().Get("error")
|
||||
htmlSignin(w, errorCode)
|
||||
htmlpage.Signin(w, errorCode)
|
||||
}
|
||||
|
||||
func getSignup(w http.ResponseWriter, r *http.Request) {
|
||||
htmlSignup(w, r.URL.Path)
|
||||
htmlpage.Signup(w, r.URL.Path)
|
||||
}
|
||||
|
||||
func getSource(w http.ResponseWriter, r *http.Request, u *models.User) {
|
||||
|
|
@ -190,7 +191,7 @@ func getSource(w http.ResponseWriter, r *http.Request, u *models.User) {
|
|||
respondError(w, "globalid is not a UUID", nil, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
htmlSource(w, r, u, globalid)
|
||||
htmlpage.Source(w, r, u, globalid)
|
||||
}
|
||||
|
||||
func postSMS(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
@ -324,6 +325,6 @@ func renderMock(templateName string) http.HandlerFunc {
|
|||
if code == "" {
|
||||
code = "abc-123"
|
||||
}
|
||||
htmlMock(templateName, w, code)
|
||||
htmlpage.Mock(templateName, w, code)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/aarondl/opt/null"
|
||||
)
|
||||
|
||||
func fsTimestampToTime(t null.Val[int64]) *time.Time {
|
||||
if t.IsNull() {
|
||||
return nil
|
||||
}
|
||||
result := time.UnixMilli(t.MustGet())
|
||||
return &result
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package htmlpage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package htmlpage
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
|
@ -30,6 +30,8 @@ import (
|
|||
//go:embed templates/*
|
||||
var embeddedFiles embed.FS
|
||||
|
||||
var MapboxToken string
|
||||
|
||||
// Authenticated pages
|
||||
var (
|
||||
cell = newBuiltTemplate("cell", "authenticated")
|
||||
|
|
@ -251,7 +253,7 @@ func extractInitials(name string) string {
|
|||
return initials.String()
|
||||
}
|
||||
|
||||
func htmlCell(ctx context.Context, w http.ResponseWriter, user *models.User, c int64) {
|
||||
func Cell(ctx context.Context, w http.ResponseWriter, user *models.User, c int64) {
|
||||
org, err := user.Organization().One(ctx, db.PGInstance.BobDB)
|
||||
if err != nil {
|
||||
respondError(w, "Failed to get org", err, http.StatusInternalServerError)
|
||||
|
|
@ -312,7 +314,7 @@ func htmlCell(ctx context.Context, w http.ResponseWriter, user *models.User, c i
|
|||
renderOrError(w, cell, &data)
|
||||
}
|
||||
|
||||
func htmlDashboard(ctx context.Context, w http.ResponseWriter, user *models.User) {
|
||||
func Dashboard(ctx context.Context, w http.ResponseWriter, user *models.User) {
|
||||
org, err := user.Organization().One(ctx, db.PGInstance.BobDB)
|
||||
if err != nil {
|
||||
respondError(w, "Failed to get org", err, http.StatusInternalServerError)
|
||||
|
|
@ -379,7 +381,7 @@ func htmlDashboard(ctx context.Context, w http.ResponseWriter, user *models.User
|
|||
renderOrError(w, dashboard, data)
|
||||
}
|
||||
|
||||
func htmlMock(t string, w http.ResponseWriter, code string) {
|
||||
func Mock(t string, w http.ResponseWriter, code string) {
|
||||
data := ContentMock{
|
||||
DistrictName: "Delta MVCD",
|
||||
URLs: ContentMockURLs{
|
||||
|
|
@ -409,7 +411,7 @@ func htmlMock(t string, w http.ResponseWriter, code string) {
|
|||
renderOrError(w, &template, data)
|
||||
}
|
||||
|
||||
func htmlOauthPrompt(w http.ResponseWriter, user *models.User) {
|
||||
func OauthPrompt(w http.ResponseWriter, user *models.User) {
|
||||
dp := user.DisplayName
|
||||
data := ContentDashboard{
|
||||
User: User{
|
||||
|
|
@ -421,7 +423,7 @@ func htmlOauthPrompt(w http.ResponseWriter, user *models.User) {
|
|||
renderOrError(w, oauthPrompt, data)
|
||||
}
|
||||
|
||||
func htmlSettings(w http.ResponseWriter, r *http.Request, user *models.User) {
|
||||
func Settings(w http.ResponseWriter, r *http.Request, user *models.User) {
|
||||
userContent, err := contentForUser(r.Context(), user)
|
||||
if err != nil {
|
||||
respondError(w, "Failed to get user content", err, http.StatusInternalServerError)
|
||||
|
|
@ -433,19 +435,19 @@ func htmlSettings(w http.ResponseWriter, r *http.Request, user *models.User) {
|
|||
renderOrError(w, settings, data)
|
||||
}
|
||||
|
||||
func htmlSignin(w http.ResponseWriter, errorCode string) {
|
||||
func Signin(w http.ResponseWriter, errorCode string) {
|
||||
data := ContentSignin{
|
||||
InvalidCredentials: errorCode == "invalid-credentials",
|
||||
}
|
||||
renderOrError(w, signin, data)
|
||||
}
|
||||
|
||||
func htmlSignup(w http.ResponseWriter, path string) {
|
||||
func Signup(w http.ResponseWriter, path string) {
|
||||
data := ContentSignup{}
|
||||
renderOrError(w, signup, data)
|
||||
}
|
||||
|
||||
func htmlSource(w http.ResponseWriter, r *http.Request, user *models.User, id uuid.UUID) {
|
||||
func Source(w http.ResponseWriter, r *http.Request, user *models.User, id uuid.UUID) {
|
||||
org, err := user.Organization().One(r.Context(), db.PGInstance.BobDB)
|
||||
if err != nil {
|
||||
respondError(w, "Failed to get org", err, http.StatusInternalServerError)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package htmlpage
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package htmlpage
|
||||
|
||||
import (
|
||||
"context"
|
||||
13
htmlpage/response.go
Normal file
13
htmlpage/response.go
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
package htmlpage
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// Respond with an error that is visible to the user
|
||||
func respondError(w http.ResponseWriter, m string, e error, s int) {
|
||||
log.Warn().Int("status", s).Err(e).Str("user message", m).Msg("Responding with an error")
|
||||
http.Error(w, m, s)
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package main
|
||||
package htmlpage
|
||||
|
||||
import (
|
||||
"sort"
|
||||
7
main.go
7
main.go
|
|
@ -14,6 +14,7 @@ import (
|
|||
"github.com/Gleipnir-Technology/nidus-sync/api"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/auth"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/db"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/htmlpage"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/queue"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/report"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/userfile"
|
||||
|
|
@ -24,7 +25,7 @@ import (
|
|||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
var ClientID, ClientSecret, Environment, FieldseekerSchemaDirectory, MapboxToken, URLReport, URLSync string
|
||||
var ClientID, ClientSecret, Environment, FieldseekerSchemaDirectory, URLReport, URLSync string
|
||||
|
||||
func main() {
|
||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
||||
|
|
@ -63,8 +64,8 @@ func main() {
|
|||
log.Error().Str("ENVIRONMENT", Environment).Msg("ENVIRONMENT should be either DEVELOPMENT or PRODUCTION")
|
||||
os.Exit(2)
|
||||
}
|
||||
MapboxToken = os.Getenv("MAPBOX_TOKEN")
|
||||
if MapboxToken == "" {
|
||||
htmlpage.MapboxToken = os.Getenv("MAPBOX_TOKEN")
|
||||
if htmlpage.MapboxToken == "" {
|
||||
log.Error().Msg("You must specify a non-empty MAPBOX_TOKEN")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue