Dunlin is a lightweight, self-hosted CDN for personal projects.
at master 2.1 kB view raw
1package dao 2 3import ( 4 "database/sql" 5 "time" 6 7 "github.com/dinkelspiel/cdn/db" 8 "github.com/dinkelspiel/cdn/models" 9) 10 11func ScanUserAuthCodeRow(rows *sql.Rows) (*models.UserAuthCode, error) { 12 var authCode models.UserAuthCode 13 var createdAt string 14 var updatedAt sql.NullString 15 16 if err := rows.Scan(&authCode.Id, &authCode.UserId, &authCode.Code, &authCode.Used, &updatedAt, &createdAt); err != nil { 17 return nil, err 18 } else { 19 var updatedAtTime time.Time 20 if updatedAt.Valid { 21 updatedAtTime, err = time.Parse("2006-01-02 15:04:05", updatedAt.String) 22 if err != nil { 23 return nil, err 24 } 25 } 26 createdAtTime, err := time.Parse("2006-01-02 15:04:05", createdAt) 27 if err != nil { 28 return nil, err 29 } 30 if updatedAt.Valid { 31 authCode.UpdatedAt = &updatedAtTime 32 } else { 33 authCode.UpdatedAt = nil 34 } 35 authCode.CreatedAt = &createdAtTime 36 return &authCode, nil 37 } 38} 39 40func GetUnusedUserAuthCodeByCode(db *db.DB, code int64) (*models.UserAuthCode, error) { 41 rows, err := db.MariaDB.Query("SELECT id, user_id, code, used, updated_at, created_at FROM user_auth_codes WHERE code = ? AND used = false", code) 42 if err != nil { 43 return nil, err 44 } 45 defer rows.Close() 46 47 if rows.Next() { 48 authCode, err := ScanUserAuthCodeRow(rows) 49 if err != nil { 50 return nil, err 51 } 52 user, err := GetUserById(db, authCode.UserId) 53 if err != nil { 54 return nil, err 55 } 56 authCode.User = user 57 return authCode, nil 58 } 59 return nil, nil 60} 61 62func CreateUserAuthCode(db *db.DB, authCode models.UserAuthCode) (*models.UserAuthCode, error) { 63 insertAuthCode := "INSERT INTO user_auth_codes(user_id, code, used) VALUES(?, ?, ?)" 64 65 res, err := db.MariaDB.Exec(insertAuthCode, authCode.UserId, authCode.Code, authCode.Used) 66 if err != nil { 67 return nil, err 68 } 69 id, _ := res.LastInsertId() 70 71 result := authCode 72 result.Id = &id 73 return &result, nil 74} 75 76func UpdateUserAuthCodeToUsed(db *db.DB, authCode models.UserAuthCode) error { 77 updateAuthCode := "UPDATE user_auth_codes SET used = true WHERE id = ?" 78 79 _, err := db.MariaDB.Exec(updateAuthCode, authCode.Id) 80 if err != nil { 81 return err 82 } 83 84 return nil 85}