terrible no good massive refactor commit (oh yeah and built generic sessions for admin panel)
This commit is contained in:
parent
cee99a6932
commit
45f33b8b46
34 changed files with 740 additions and 654 deletions
128
controller/session.go
Normal file
128
controller/session.go
Normal file
|
@ -0,0 +1,128 @@
|
|||
package controller
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"arimelody-web/model"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
const TOKEN_LEN = 64
|
||||
|
||||
func CreateSession(db *sqlx.DB, userAgent string) (*model.Session, error) {
|
||||
tokenString := GenerateAlnumString(TOKEN_LEN)
|
||||
|
||||
session := model.Session{
|
||||
Token: string(tokenString),
|
||||
UserAgent: userAgent,
|
||||
CreatedAt: time.Now(),
|
||||
ExpiresAt: time.Now().Add(time.Hour * 24),
|
||||
}
|
||||
|
||||
_, err := db.Exec("INSERT INTO session " +
|
||||
"(token, user_agent, created_at, expires_at) VALUES " +
|
||||
"($1, $2, $3, $4)",
|
||||
session.Token,
|
||||
session.UserAgent,
|
||||
session.CreatedAt,
|
||||
session.ExpiresAt,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &session, nil
|
||||
}
|
||||
|
||||
// func WriteSession(db *sqlx.DB, session *model.Session) error {
|
||||
// _, err := db.Exec(
|
||||
// "UPDATE session " +
|
||||
// "SET account=$2,message=$3,error=$4 " +
|
||||
// "WHERE token=$1",
|
||||
// session.Token,
|
||||
// session.Account.ID,
|
||||
// session.Message,
|
||||
// session.Error,
|
||||
// )
|
||||
// return err
|
||||
// }
|
||||
|
||||
func SetSessionAccount(db *sqlx.DB, session *model.Session, account *model.Account) error {
|
||||
var err error
|
||||
session.Account = account
|
||||
if account == nil {
|
||||
_, err = db.Exec("UPDATE session SET account=NULL WHERE token=$1", session.Token)
|
||||
} else {
|
||||
_, err = db.Exec("UPDATE session SET account=$2 WHERE token=$1", session.Token, account.ID)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func SetSessionMessage(db *sqlx.DB, session *model.Session, message string) error {
|
||||
var err error
|
||||
if message == "" {
|
||||
session.Message = sql.NullString{ }
|
||||
_, err = db.Exec("UPDATE session SET message=NULL WHERE token=$1", session.Token)
|
||||
} else {
|
||||
session.Message = sql.NullString{ String: message, Valid: true }
|
||||
_, err = db.Exec("UPDATE session SET message=$2 WHERE token=$1", session.Token, message)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func SetSessionError(db *sqlx.DB, session *model.Session, message string) error {
|
||||
var err error
|
||||
if message == "" {
|
||||
session.Message = sql.NullString{ }
|
||||
_, err = db.Exec("UPDATE session SET error=NULL WHERE token=$1", session.Token)
|
||||
} else {
|
||||
session.Message = sql.NullString{ String: message, Valid: true }
|
||||
_, err = db.Exec("UPDATE session SET error=$2 WHERE token=$1", session.Token, message)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func GetSession(db *sqlx.DB, token string) (*model.Session, error) {
|
||||
type dbSession struct {
|
||||
model.Session
|
||||
AccountID sql.NullString `db:"account"`
|
||||
}
|
||||
|
||||
session := dbSession{}
|
||||
err := db.Get(
|
||||
&session,
|
||||
"SELECT * FROM session WHERE token=$1",
|
||||
token,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if session.AccountID.Valid {
|
||||
session.Account, err = GetAccountByID(db, session.AccountID.String)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &session.Session, err
|
||||
}
|
||||
|
||||
// func GetAllSessionsForAccount(db *sqlx.DB, accountID string) ([]model.Session, error) {
|
||||
// sessions := []model.Session{}
|
||||
// err := db.Select(&sessions, "SELECT * FROM session WHERE account=$1 AND expires_at>current_timestamp", accountID)
|
||||
// return sessions, err
|
||||
// }
|
||||
|
||||
func DeleteAllSessionsForAccount(db *sqlx.DB, accountID string) error {
|
||||
_, err := db.Exec("DELETE FROM session WHERE account=$1", accountID)
|
||||
return err
|
||||
}
|
||||
|
||||
func DeleteSession(db *sqlx.DB, token string) error {
|
||||
_, err := db.Exec("DELETE FROM session WHERE token=$1", token)
|
||||
return err
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue