diff --git a/.gitignore b/.gitignore index a4054c3..016c996 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ tmp/ node_modules/ dist/ db/* +.env diff --git a/Makefile b/Makefile index b927f1a..96e4a31 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ start: .PHONY: local air: - air -c .air.toml + /home/luka/go/bin/air -c .air.toml .PHONY: air tailwind-build: diff --git a/go.mod b/go.mod index 5deea6e..375bc4d 100644 --- a/go.mod +++ b/go.mod @@ -12,12 +12,14 @@ require ( github.com/bep/godartsass v1.2.0 // indirect github.com/bep/godartsass/v2 v2.0.0 // indirect github.com/bep/golibsass v1.1.1 // indirect + github.com/clerkinc/clerk-sdk-go v1.48.4 // indirect github.com/cli/safeexec v1.0.1 // indirect github.com/cosmtrek/air v1.45.0 // indirect github.com/creack/pty v1.1.18 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/fatih/color v1.15.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect github.com/gohugoio/hugo v0.119.0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect @@ -27,8 +29,10 @@ require ( ) require ( + github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/joho/godotenv v1.5.1 github.com/labstack/gommon v0.4.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect diff --git a/go.sum b/go.sum index 4d0c4da..a2ef1de 100644 --- a/go.sum +++ b/go.sum @@ -46,10 +46,13 @@ github.com/bep/godartsass/v2 v2.0.0 h1:Ruht+BpBWkpmW+yAM2dkp7RSSeN0VLaTobyW0CiSP github.com/bep/godartsass/v2 v2.0.0/go.mod h1:AcP8QgC+OwOXEq6im0WgDRYK7scDsmZCEW62o1prQLo= github.com/bep/golibsass v1.1.1 h1:xkaet75ygImMYjM+FnHIT3xJn7H0xBA9UxSOJjk8Khw= github.com/bep/golibsass v1.1.1/go.mod h1:DL87K8Un/+pWUS75ggYv41bliGiolxzDKWJAq3eJ1MA= +github.com/brianvoe/gofakeit/v6 v6.19.0/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clerkinc/clerk-sdk-go v1.48.4 h1:Cq12M+Ep1ip06X7uNkk714dqJxzgJURLvEDuMUDprEw= +github.com/clerkinc/clerk-sdk-go v1.48.4/go.mod h1:pejhMTTDAuw5aBpiHBEOOOHMAsxNfPvKfM5qexFJYlc= github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= github.com/cli/safeexec v1.0.1 h1:e/C79PbXF4yYTN/wauC4tviMxEV13BwljGj0N9j+N00= github.com/cli/safeexec v1.0.1/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= @@ -65,6 +68,8 @@ github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/donseba/go-htmx v1.0.1 h1:GtDMX1uEvIy53dSwkN63qKhq/RLVXV1RyFIbZfR7040= github.com/donseba/go-htmx v1.0.1/go.mod h1:SVMQJFOsH2GQyQqV/d0tdtgXVX6FMuVMQLlEqbPupnw= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -84,6 +89,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/gohugoio/hugo v0.119.0 h1:kQha6WHt5GcCbI2PELB5KjWMHFJ8LJLrh3lusxnmCng= github.com/gohugoio/hugo v0.119.0/go.mod h1:pXwmL2lFumAkr3qS2D262seu4SWDLphQLvYfhdGdLRU= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= @@ -128,6 +135,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -151,6 +159,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -191,6 +201,7 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -223,11 +234,13 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= @@ -305,6 +318,7 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= @@ -373,6 +387,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= @@ -381,6 +396,7 @@ golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -390,6 +406,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= diff --git a/main.go b/main.go index 4ddc05f..eabf0a9 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,9 @@ import ( "net/http" "os" + "github.com/clerkinc/clerk-sdk-go/clerk" "github.com/donseba/go-htmx" + "github.com/joho/godotenv" "github.com/labstack/echo/v4" echoMiddleware "github.com/labstack/echo/v4/middleware" _ "github.com/mattn/go-sqlite3" @@ -58,6 +60,8 @@ type ApiResponse struct { Completed bool `json:"completed"` } +var isAuthenticated bool = false + var settingsGlobal SettingsGlobal func (a *App) Index(c echo.Context) error { @@ -112,6 +116,19 @@ func (a *App) Settings(c echo.Context) error { return c.Render(http.StatusOK, "settings.html", &page) } +func (a *App) SignIn(c echo.Context) error { + r := c.Request() + h := r.Context().Value(htmx.ContextRequestHeader).(htmx.HxRequestHeader) + + page := Page{Title: "Sign In", Boosted: h.HxBoosted} + + if page.Boosted { + return c.Render(http.StatusOK, "SignIn", &page) + } + + return c.Render(http.StatusOK, "signin.html", &page) +} + func (a *App) Fetch(c echo.Context) error { r := c.Request() h := r.Context().Value(htmx.ContextRequestHeader).(htmx.HxRequestHeader) @@ -153,6 +170,17 @@ func (a *App) Test(c echo.Context) error { return c.Render(http.StatusOK, "test", Page{Title: "Test"}) } +func (a *App) CheckLogin(c echo.Context) (err error) { + var data struct { + IsLoggedIn bool `json:"isLoggedIn"` + } + if err := c.Bind(&data); err != nil { + return err + } + isAuthenticated = data.IsLoggedIn + return c.String(http.StatusOK, "User authenticated") +} + func (a *App) Submit(c echo.Context) (err error) { name := c.FormValue("name") email := c.FormValue("email") @@ -293,21 +321,27 @@ func main() { appTemplates: new(Template), } + if err := godotenv.Load(); err != nil { + log.Print("No .env file found") + } + app.appTemplates.Init() app.appTemplates.Add("templates/*.html") app.appTemplates.Add("templates/*/*.html") e.Renderer = app.appTemplates - e.GET("/", app.Index) - e.GET("/about", app.About) - e.GET("/contact", app.Contact) - e.GET("/settings", app.Settings) - e.GET("/test", app.Test) - e.GET("/chart", app.Chart) - e.GET("/fetch", app.Fetch) - e.GET("/dashboard", app.Dashboard) - + e.GET("/", ClerkAuthMiddleware(app.Index)) + e.GET("/about", ClerkAuthMiddleware(app.About)) + e.GET("/contact", ClerkAuthMiddleware(app.Contact)) + e.GET("/settings", ClerkAuthMiddleware(app.Settings)) + e.GET("/test", ClerkAuthMiddleware(app.Test)) + e.GET("/chart", ClerkAuthMiddleware(app.Chart)) + e.GET("/fetch", ClerkAuthMiddleware(app.Fetch)) + e.GET("/dashboard", ClerkAuthMiddleware(app.Dashboard)) + e.GET("/signin", app.SignIn) + + e.POST("/checkLogin", app.CheckLogin) e.POST("/submit", app.Submit) e.POST("/setSettings", app.setSettings) e.GET("/getData", app.getData) @@ -395,6 +429,38 @@ func getStudents(db *sql.DB) []Student { return students } +func ClerkAuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + + clerkSecretKey, exists := os.LookupEnv("CLERK_SECRET_KEY") + + if exists { + fmt.Println("env fetched") + } + + client, err := clerk.NewClient(clerkSecretKey) + if err != nil { + return err + } + + ctx := c.Request().Context() + + sessClaims, ok := clerk.SessionFromContext(ctx) + if !ok { + fmt.Println("Clerk error") + } + + user, err := client.Users().Read(sessClaims.Claims.Subject) + + if err != nil { + return c.Redirect(http.StatusFound, "/signin") + } + fmt.Println("Hello ", user.FirstName) + + return next(c) + } +} + func HtmxMiddleware(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { ctx := c.Request().Context() diff --git a/templates/about.html b/templates/about.html index f584288..14f799f 100644 --- a/templates/about.html +++ b/templates/about.html @@ -10,9 +10,14 @@

{{ .Title }}

{{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "about" . }}
+ {{ template "script" .}} diff --git a/templates/chart.html b/templates/chart.html index 9dfd8b8..3413485 100644 --- a/templates/chart.html +++ b/templates/chart.html @@ -11,9 +11,14 @@ {{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "chart" . }}
+ {{ template "script" .}} diff --git a/templates/contact.html b/templates/contact.html index 779acea..75e166c 100644 --- a/templates/contact.html +++ b/templates/contact.html @@ -12,9 +12,14 @@ {{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "contact" . }}
+ {{ template "script" .}} diff --git a/templates/dashboard.html b/templates/dashboard.html index ed1824e..febc0b8 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -41,9 +41,14 @@ {{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "dashboard" . }}
+ {{ template "script" .}} diff --git a/templates/fetch.html b/templates/fetch.html index 99c96ab..bb4a4a1 100644 --- a/templates/fetch.html +++ b/templates/fetch.html @@ -13,9 +13,14 @@ {{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "fetch" . }}
+ {{ template "script" .}} diff --git a/templates/index.html b/templates/index.html index 0443e15..b63cdf9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -10,32 +10,15 @@

{{ .Title }}

{{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "index" . }}
- - + {{ template "script" .}} diff --git a/templates/settings.html b/templates/settings.html index f968b46..158a00d 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -85,9 +85,14 @@ {{ template "head" . }} - {{ template "nav" . }} -
+ +
{{ template "settings" . }}
+ {{ template "script" .}} diff --git a/templates/signin.html b/templates/signin.html new file mode 100644 index 0000000..1e19caf --- /dev/null +++ b/templates/signin.html @@ -0,0 +1,45 @@ +{{ define "signin" }} + {{ if .Boosted }} + {{ template "head" . }} + {{ end }} +
+
+
+{{ end }} + + + + + {{ template "head" . }} + +
+ {{ template "signin" . }} +
+ {{ template "script" .}} + + + diff --git a/templates/templates.html b/templates/templates.html index 5ecf768..78b101e 100644 --- a/templates/templates.html +++ b/templates/templates.html @@ -8,6 +8,49 @@ + {{ end }} @@ -21,7 +64,6 @@ Fetch Dashboard -
{{ end }} {{ define "contact-dashboard" }} @@ -80,3 +122,21 @@ {{ end }} + +{{ define "script" }} + +{{ end }}