diff options
-rw-r--r-- | db.go | 32 | ||||
-rw-r--r-- | fbfp.scfg.example | 2 | ||||
-rw-r--r-- | go.mod | 7 | ||||
-rw-r--r-- | go.sum | 10 | ||||
-rw-r--r-- | main.go | 27 | ||||
-rw-r--r-- | oidc.go | 27 | ||||
-rw-r--r-- | schema.sql | 11 |
7 files changed, 33 insertions, 83 deletions
@@ -1,35 +1,19 @@ package main import ( - "fmt" + "database/sql" - "gorm.io/driver/sqlite" - "gorm.io/gorm" + _ "github.com/mattn/go-sqlite3" ) -type user_t struct { - Subject string `gorm:"primaryKey"` - Name string - Email string - Sessions []session_t `gorm:"foreignKey:UserSubject"` -} - -type session_t struct { - Cookie string `gorm:"primaryKey"` - UserSubject string - User user_t `gorm:"foreignKey:UserSubject"` -} +var db *sql.DB func setup_database() error { var err error - switch config.Db.Type { - case "sqlite": - db, err = gorm.Open(sqlite.Open(config.Db.Conn), &gorm.Config{}) - if err != nil { - return err - } - default: - return (fmt.Errorf("Database type \"%s\" unsupported", config.Db.Type)) + db, err = sql.Open(config.Db.Type, config.Db.Conn) + if err != nil { + return err + } else { + return nil } - return db.AutoMigrate(&user_t{}, &session_t{}) } diff --git a/fbfp.scfg.example b/fbfp.scfg.example index 0e72f37..e21cca1 100644 --- a/fbfp.scfg.example +++ b/fbfp.scfg.example @@ -37,7 +37,7 @@ listen { db { # What type of database should we use? Currently, only "sqlite" is # supported. - type sqlite + type sqlite3 # What is the connection string to database? For SQLite, this is # simply a path to the database file. @@ -7,15 +7,10 @@ require git.sr.ht/~emersion/go-scfg v0.0.0-20240128091534-2ae16e782082 require ( github.com/MicahParks/keyfunc/v3 v3.3.3 github.com/golang-jwt/jwt/v5 v5.2.1 - gorm.io/driver/sqlite v1.5.6 - gorm.io/gorm v1.25.11 + github.com/mattn/go-sqlite3 v1.14.22 ) require ( github.com/MicahParks/jwkset v0.5.18 // indirect - github.com/jinzhu/inflection v1.0.0 // indirect - github.com/jinzhu/now v1.1.5 // indirect - github.com/mattn/go-sqlite3 v1.14.22 // indirect - golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.6.0 // indirect ) @@ -8,17 +8,7 @@ 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/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= -github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= -github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= 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= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -gorm.io/driver/sqlite v1.5.6 h1:fO/X46qn5NUEEOZtnjJRWRzZMe8nqJiQ9E+0hi+hKQE= -gorm.io/driver/sqlite v1.5.6/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= -gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= -gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= @@ -28,11 +28,8 @@ import ( "net" "net/http" "net/http/fcgi" - - "gorm.io/gorm" ) -var db *gorm.DB var tmpl *template.Template func handle_index(w http.ResponseWriter, req *http.Request) { @@ -59,36 +56,20 @@ func handle_index(w http.ResponseWriter, req *http.Request) { ))) return } - var session session_t - err = db.First(&session, session_t{Cookie: session_cookie.Value}).Error - if err != nil { - err = tmpl.ExecuteTemplate( - w, - "index_login", - map[string]interface{}{ - "authUrl": generate_authorization_url(), - "notes": []string{"Cookie lookup failed. You are now unauthenticated."}, - }, - ) - if err != nil { - log.Println(err) - return - } - return - } - fmt.Println(session.User) - user := session.User err = tmpl.ExecuteTemplate( w, "index", map[string]interface{}{ - "user": user, + "user": map[string]interface{}{ + "Name": "NAME", + }, }, ) if err != nil { log.Println(err) return } + _ = session_cookie } func main() { @@ -246,26 +246,15 @@ func handle_oidc(w http.ResponseWriter, req *http.Request) { http.SetCookie(w, &cookie) w.Header().Set("Content-Type", "text/plain; charset=utf-8") - var session session_t - var user user_t - - err = db.FirstOrCreate(&user, user_t{Subject: claims.Subject}).Error - if err != nil { - w.Header().Set("Content-Type", "text/plain; charset=utf-8") - w.WriteHeader(500) - w.Write([]byte(fmt.Sprintf( - "Error\nDatabase query failed.\n%s\n", - err, - ))) - return - } - user.Name = claims.Name - user.Email = claims.Email - db.Save(&user) + result, err := db.Exec( + "INSERT INTO users (id, name, email) VALUES (?, ?, ?)", + claims.Subject, + claims.Name, + claims.Email, + ) + // TODO: handle err - session.User = user - session.Cookie = cookie_value - err = db.Create(&session).Error + fmt.Println(result, err) http.Redirect(w, req, "/", 303) diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..7e3886f --- /dev/null +++ b/schema.sql @@ -0,0 +1,11 @@ +CREATE TABLE users ( + id TEXT PRIMARY KEY NOT NULL, + name TEXT, + email TEXT +); +CREATE TABLE sessions ( + userid TEXT NOT NULL, + cookie TEXT, + expr INTEGER, + FOREIGN KEY(userid) REFERENCES users(id) +); |