keys.go
1 // SPDX-FileCopyrightText: Amolith <amolith@secluded.site> 2 // 3 // SPDX-License-Identifier: AGPL-3.0-or-later 4 5 package keys 6 7 import ( 8 "database/sql" 9 "fmt" 10 11 "adresilo-server/db" 12 ) 13 14 type Key = db.Key 15 16 type Tier struct { 17 ID int 18 Name string 19 Price int 20 Queries int 21 Enabled bool 22 } 23 24 // Generate generates a new key and stores it in the database 25 func Generate(tierID int, tiers []Tier, dbConn *sql.DB) (string, error) { 26 key, err := db.InsertKey(tiers[tierID].Queries, dbConn) 27 if err != nil { 28 return "", fmt.Errorf("failed to generate and save key: %w", err) 29 } 30 31 return key, nil 32 } 33 34 // Authorised returns true if the key is authorised to make a request 35 func Authorised(keyID string, dbConn *sql.DB) (bool, error) { 36 key, err := db.GetKey(keyID, dbConn) 37 if err != nil { 38 return false, fmt.Errorf("failed to get key from database: %w", err) 39 } 40 41 if key.Disabled || key.Queries <= 0 { 42 return false, nil 43 } 44 return true, nil 45 } 46 47 // Disable disables a key 48 func Disable(key string, dbConn *sql.DB) error { 49 return db.DisableKey(key, dbConn) 50 } 51 52 // Delete permanently deletes a key 53 func Delete(key string, dbConn *sql.DB) error { 54 return db.DeleteKey(key, dbConn) 55 } 56 57 // Decrement decrements the number of queries remaining for a given key 58 func Decrement(key string, dbConn *sql.DB) error { 59 return db.DecrementKey(key, dbConn) 60 } 61 62 // Status returns the number of queries remaining for a given key 63 func Status(givenKey string, dbConn *sql.DB) (int, error) { 64 key, err := db.GetKey(givenKey, dbConn) 65 if err != nil { 66 return 0, err 67 } 68 69 return key.Queries, nil 70 }