Compare commits

...

5 Commits

Author SHA1 Message Date
Teajey ffb27bfd93
fix: share link 2024-05-23 00:41:40 +12:00
Teajey 4b60cdbcc2
feat: min password length 2024-05-23 00:20:31 +12:00
Teajey 4cfa05d9fd
feat: login/registration messages 2024-05-23 00:14:38 +12:00
Teajey 9bf854db1a
feat: pure go sqlite driver 2024-05-22 23:21:01 +12:00
Teajey ed1db2f525
feat: throw c build stuff out the window 2024-05-22 23:14:51 +12:00
14 changed files with 91 additions and 72 deletions

View File

@ -1,46 +0,0 @@
FROM ubuntu:18.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
wget \
ca-certificates \
gcc
# linux-libc-dev
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*
WORKDIR /usr/local
# RUN wget https://launchpad.net/ubuntu/+source/glibc/2.27-3ubuntu1.4/+build/20381725/+files/libc6_2.27-3ubuntu1.4_amd64.deb
# RUN wget https://launchpad.net/ubuntu/+source/glibc/2.27-3ubuntu1.4/+build/20381725/+files/libc-dev-bin_2.27-3ubuntu1.4_amd64.deb
# RUN wget https://launchpad.net/ubuntu/+source/glibc/2.27-3ubuntu1.4/+build/20381725/+files/libc6-dev_2.27-3ubuntu1.4_amd64.deb
# RUN dpkg -i libc6_2.27-3ubuntu1.4_amd64.deb
# RUN dpkg -i libc-dev-bin_2.27-3ubuntu1.4_amd64.deb
# RUN dpkg -i libc6-dev_2.27-3ubuntu1.4_amd64.deb
# RUN wget https://go.dev/dl/go1.22.3.linux-amd64.tar.gz
# RUN tar -xzf go1.22.3.linux-amd64.tar.gz
# ENV PATH=$PATH:/usr/local/go/bin
# WORKDIR /
# RUN mkdir /glibc_install
# WORKDIR /glibc_install
# RUN wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/glibc/2.27-3ubuntu1.4/glibc_2.27.orig.tar.xz
# RUN tar -xf glibc_2.27.orig.tar.xz
# WORKDIR /glibc_install/glibc-2.27
# RUN mkdir build
# WORKDIR /glibc_install/glibc-2.27/build
# RUN ../configure --prefix=/opt/glibc-2.27-3ubuntu1.4
# RUN make -j4
# RUN make install
# ENV LD_PRELOAD=/opt/glibc-2.27-3ubuntu1.4/lib/libc.so.6
# WORKDIR /
# RUN rm -rf /glibc_install
# RUN rm go1.22.3.linux-amd64.tar.gz
# RUN rm libc6-dev_2.27-3ubuntu1.4_amd64.deb
CMD ["tail", "-f", "/dev/null"]

28
auth/login_get.go Normal file
View File

@ -0,0 +1,28 @@
package auth
import (
"lishwist/templates"
"log"
"net/http"
)
type LoginGetProps struct {
SuccessfulRegistration bool
}
func (auth *AuthMiddleware) Login(w http.ResponseWriter, r *http.Request) {
session, _ := auth.Store.Get(r, "lishwist_user")
successfulReg, ok := session.Values["successful_registration"].(bool)
if ok {
delete(session.Values, "successful_registration")
if err := session.Save(r, w); err != nil {
log.Println("Couldn't save session:", err)
http.Error(w, "Something went wrong. Error code: Zuko", http.StatusInternalServerError)
return
}
}
templates.Execute(w, "login.gotmpl", LoginGetProps{
SuccessfulRegistration: successfulReg,
})
}

View File

@ -1,6 +1,7 @@
package auth
import (
"log"
"net/http"
"lishwist/db"
@ -41,5 +42,13 @@ func (auth *AuthMiddleware) RegisterPost(w http.ResponseWriter, r *http.Request)
return
}
session, _ := auth.Store.Get(r, "lishwist_user")
session.Values["successful_registration"] = true
if err := session.Save(r, w); err != nil {
log.Println("Couldn't save session:", err)
http.Error(w, "Something went wrong. Error code: Zuko", http.StatusInternalServerError)
return
}
http.Redirect(w, r, "/", http.StatusSeeOther)
}

View File

@ -1 +0,0 @@
docker run --rm -v "$PWD":/usr/src/lishwist -w /usr/src/lishwist ubuntu-18.04-golang-1.22.3 env GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build .

View File

@ -5,13 +5,13 @@ package db
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
_ "github.com/glebarez/go-sqlite"
)
var database *sql.DB
func Open() error {
db, err := sql.Open("sqlite3", "./lishwist.db")
db, err := sql.Open("sqlite", "./lishwist.db")
if err != nil {
return err
}

4
env/env.go vendored
View File

@ -15,11 +15,11 @@ func GuaranteeEnv(key string) (variable string) {
}
var JwtSecret = GuaranteeEnv("LISHWIST_JWT_SECRET")
var HostDomain = GuaranteeEnv("LISHWIST_HOST_DOMAIN")
var HostRootUrl = GuaranteeEnv("LISHWIST_HOST_ROOT_URL")
var HostPort = os.Getenv("LISHWIST_HOST_PORT")
var ServePort = GuaranteeEnv("LISHWIST_SERVE_PORT")
var HostUrl = func() *url.URL {
rawUrl := "http://" + HostDomain
rawUrl := HostRootUrl
if HostPort != "" {
rawUrl += ":" + HostPort
}

14
go.mod
View File

@ -3,10 +3,20 @@ module lishwist
go 1.22.0
require (
github.com/glebarez/go-sqlite v1.22.0
github.com/google/uuid v1.6.0
github.com/gorilla/sessions v1.2.2
github.com/mattn/go-sqlite3 v1.14.22
golang.org/x/crypto v0.22.0
)
require github.com/gorilla/securecookie v1.1.2 // indirect
require (
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/gorilla/securecookie v1.1.2 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
golang.org/x/sys v0.19.0 // indirect
modernc.org/libc v1.37.6 // indirect
modernc.org/mathutil v1.6.0 // indirect
modernc.org/memory v1.7.2 // indirect
modernc.org/sqlite v1.28.0 // indirect
)

23
go.sum
View File

@ -1,12 +1,31 @@
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec+ruQ=
github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY=
github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
modernc.org/libc v1.37.6 h1:orZH3c5wmhIQFTXF+Nt+eeauyd+ZIt2BX6ARe+kD+aw=
modernc.org/libc v1.37.6/go.mod h1:YAXkAZ8ktnkCKaN9sw/UDeUVkGYJ/YquGO4FTi5nmHE=
modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
modernc.org/memory v1.7.2/go.mod h1:NO4NVCQy0N7ln+T9ngWqOQfi7ley4vpwvARR+Hjw95E=
modernc.org/sqlite v1.28.0 h1:Zx+LyDDmXczNnEQdvPuEfcFVA2ZPyaD7UCZDjef3BHQ=
modernc.org/sqlite v1.28.0/go.mod h1:Qxpazz0zH8Z1xCFyi5GSL3FzbtZ3fvbjmywNogldEW0=

View File

@ -32,7 +32,7 @@ func main() {
publicMux.HandleFunc("GET /register", templates.Register)
publicMux.HandleFunc("POST /register", authMiddleware.RegisterPost)
publicMux.HandleFunc("GET /", templates.Login)
publicMux.HandleFunc("GET /", authMiddleware.Login)
publicMux.HandleFunc("POST /", authMiddleware.LoginPost)
protectedMux.HandleFunc("GET /", ctx.Home)

View File

@ -2,7 +2,7 @@
<div class="flex-grow-1"></div>
<ul class="navbar-nav">
<li class="nav-item"><button class="btn btn-success"
onclick="navigator.clipboard.writeText('{{.HostUrl}}/{{.Reference}}'); alert('The share link to your wishlist has been copied to your clipboard. Share it with someone!');">Copy
onclick="navigator.clipboard.writeText('{{.HostUrl}}/{{.Reference}}'); alert('The share link to your wishlist has been copied to your clipboard. Anyone with the link will be able to claim gifts for you. Share it with someone!');">Copy
share link</button></li>
<li class="nav-item">
<div class="dropdown">
@ -92,4 +92,4 @@
{{end}}
</div>
</div>
{{end}}
{{end}}

View File

@ -1,9 +0,0 @@
package templates
import (
"net/http"
)
func Login(w http.ResponseWriter, r *http.Request) {
Execute(w, "login.gotmpl", nil)
}

View File

@ -2,7 +2,12 @@
{{end}}
{{define "body"}}
<div class="flex-grow-1 d-flex justify-content-center align-items-center">
<div class="container d-flex flex-grow-1 justify-content-center align-items-center flex-column">
{{if .SuccessfulRegistration}}
<div class="alert alert-success" role="alert">
<p class="mb-0">Registration successful. Now you can login.</p>
</div>
{{end}}
<form method="post">
<div class="d-flex flex-column gap-3">
<label>
@ -20,4 +25,4 @@
</div>
</form>
</div>
{{end}}
{{end}}

View File

@ -2,7 +2,11 @@
{{end}}
{{define "body"}}
<div class="flex-grow-1 d-flex justify-content-center align-items-center">
<div class="container d-flex flex-grow-1 justify-content-center align-items-center flex-column">
<div class="alert alert-warning" role="alert">
<p>Your password will be stored in a safe, responsible manner; but don't trust my programming skills!</p>
<p class="mb-0">Maybe use a password here that you don't use for important things...</p>
</div>
<form method="post">
<div class="d-flex flex-column gap-3">
<label>
@ -11,11 +15,11 @@
</label>
<label>
Password
<input class="form-control" name="newPassword" type="password" required>
<input class="form-control" name="newPassword" type="password" required minlength="5">
</label>
<label>
Confirm password
<input class="form-control" name="confirmPassword" type="password" required>
<input class="form-control" name="confirmPassword" type="password" required minlength="5">
</label>
<input class="btn btn-primary" type="submit" value="Register">
</div>