| |
| |
| package sql |
|
|
| import ( |
| "context" |
| "database/sql" |
| "errors" |
| "time" |
|
|
| "ccLoad/internal/model" |
| ) |
|
|
| |
| |
| func (s *SQLStore) CreateAdminSession(ctx context.Context, token string, expiresAt time.Time) error { |
| tokenHash := model.HashToken(token) |
| now := timeToUnix(time.Now()) |
| _, err := s.db.ExecContext(ctx, ` |
| REPLACE INTO admin_sessions (token, expires_at, created_at) |
| VALUES (?, ?, ?) |
| `, tokenHash, timeToUnix(expiresAt), now) |
| return err |
| } |
|
|
| |
| |
| func (s *SQLStore) GetAdminSession(ctx context.Context, token string) (expiresAt time.Time, exists bool, err error) { |
| tokenHash := model.HashToken(token) |
| var expiresUnix int64 |
| err = s.db.QueryRowContext(ctx, ` |
| SELECT expires_at FROM admin_sessions WHERE token = ? |
| `, tokenHash).Scan(&expiresUnix) |
|
|
| if err != nil { |
| if errors.Is(err, sql.ErrNoRows) { |
| return time.Time{}, false, nil |
| } |
| return time.Time{}, false, err |
| } |
|
|
| return unixToTime(expiresUnix), true, nil |
| } |
|
|
| |
| |
| func (s *SQLStore) DeleteAdminSession(ctx context.Context, token string) error { |
| tokenHash := model.HashToken(token) |
| _, err := s.db.ExecContext(ctx, `DELETE FROM admin_sessions WHERE token = ?`, tokenHash) |
| return err |
| } |
|
|
| |
| func (s *SQLStore) CleanExpiredSessions(ctx context.Context) error { |
| now := timeToUnix(time.Now()) |
| _, err := s.db.ExecContext(ctx, `DELETE FROM admin_sessions WHERE expires_at < ?`, now) |
| return err |
| } |
|
|
| |
| |
| func (s *SQLStore) LoadAllSessions(ctx context.Context) (map[string]time.Time, error) { |
| now := timeToUnix(time.Now()) |
| rows, err := s.db.QueryContext(ctx, ` |
| SELECT token, expires_at FROM admin_sessions WHERE expires_at > ? |
| `, now) |
| if err != nil { |
| return nil, err |
| } |
| defer func() { _ = rows.Close() }() |
|
|
| sessions := make(map[string]time.Time) |
| for rows.Next() { |
| var tokenHash string |
| var expiresUnix int64 |
| if err := rows.Scan(&tokenHash, &expiresUnix); err != nil { |
| return nil, err |
| } |
| sessions[tokenHash] = unixToTime(expiresUnix) |
| } |
|
|
| return sessions, rows.Err() |
| } |
|
|