]> code.octet-stream.net Git - broadcaster/commitdiff
Clear up logged out and old sessions
authorThomas Karpiniec <tom.karpiniec@outlook.com>
Mon, 28 Oct 2024 10:17:18 +0000 (21:17 +1100)
committerThomas Karpiniec <tom.karpiniec@outlook.com>
Mon, 28 Oct 2024 10:17:18 +0000 (21:17 +1100)
server/database.go
server/main.go

index 06e5968ac1090b2e8cbaad4857338b8004ac0b0f..5b1361cb8f11a448fab46a0bd0995a3018c03be4 100644 (file)
@@ -42,6 +42,8 @@ func InitDatabase() {
        CREATE TABLE IF NOT EXISTS playlist_entries (id INTEGER PRIMARY KEY AUTOINCREMENT, playlist_id INTEGER, position INTEGER, filename TEXT, delay_seconds INTEGER, is_relative INTEGER, CONSTRAINT fk_playlists FOREIGN KEY (playlist_id) REFERENCES playlists(id) ON DELETE CASCADE);
        CREATE TABLE IF NOT EXISTS radios (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, token TEXT);
        CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password_hash TEXT, is_admin INTEGER);
        CREATE TABLE IF NOT EXISTS playlist_entries (id INTEGER PRIMARY KEY AUTOINCREMENT, playlist_id INTEGER, position INTEGER, filename TEXT, delay_seconds INTEGER, is_relative INTEGER, CONSTRAINT fk_playlists FOREIGN KEY (playlist_id) REFERENCES playlists(id) ON DELETE CASCADE);
        CREATE TABLE IF NOT EXISTS radios (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, token TEXT);
        CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE, password_hash TEXT, is_admin INTEGER);
+
+       DELETE FROM sessions WHERE expiry < CURRENT_TIMESTAMP;
        `
        _, err = db.sqldb.Exec(sqlStmt)
        if err != nil {
        `
        _, err = db.sqldb.Exec(sqlStmt)
        if err != nil {
@@ -113,6 +115,10 @@ func (d *Database) ClearOtherSessions(username string, token string) {
        d.sqldb.Exec("DELETE FROM sessions WHERE username = ? AND token != ?", username, token)
 }
 
        d.sqldb.Exec("DELETE FROM sessions WHERE username = ? AND token != ?", username, token)
 }
 
+func (d *Database) ClearSession(username string, token string) {
+       d.sqldb.Exec("DELETE FROM sessions WHERE username = ? AND token = ?", username, token)
+}
+
 func (d *Database) SetUserIsAdmin(username string, isAdmin bool) {
        d.sqldb.Exec("UPDATE users SET is_admin = ? WHERE username = ?", isAdmin, username)
 }
 func (d *Database) SetUserIsAdmin(username string, isAdmin bool) {
        d.sqldb.Exec("UPDATE users SET is_admin = ? WHERE username = ?", isAdmin, username)
 }
index 105e8581c077474241d2a8e7cbdd65bac7e6dc86..69d1ca70ddba349a6611255a5d1e4f0ae1e9e868 100644 (file)
@@ -678,6 +678,10 @@ func uploadFile(w http.ResponseWriter, r *http.Request) {
 }
 
 func logOutPage(w http.ResponseWriter, r *http.Request, user User) {
 }
 
 func logOutPage(w http.ResponseWriter, r *http.Request, user User) {
+       cookie, err := r.Cookie("broadcast_session")
+       if err == nil {
+               db.ClearSession(user.Username, cookie.Value)
+       }
        clearSessionCookie(w)
        renderHeader(w, "", user)
        tmpl := template.Must(template.ParseFS(content, "templates/logout.html"))
        clearSessionCookie(w)
        renderHeader(w, "", user)
        tmpl := template.Must(template.ParseFS(content, "templates/logout.html"))