forked from urdt/ussd
create a simple admin store for phone numbers
This commit is contained in:
parent
ca13d9155c
commit
c9bb93ede6
68
internal/utils/adminstore.go
Normal file
68
internal/utils/adminstore.go
Normal file
@ -0,0 +1,68 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type AdminStore struct {
|
||||
filePath string
|
||||
}
|
||||
|
||||
// Creates a new Admin store
|
||||
func NewAdminStore(filePath string) *AdminStore {
|
||||
return &AdminStore{filePath: filePath}
|
||||
}
|
||||
|
||||
// Seed saves a list of phonumbers with admin privileges
|
||||
func (as *AdminStore) Seed() error {
|
||||
adminNumbers := []int64{254705136690, 123456789012, 987654321098}
|
||||
file, err := os.Create(as.filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
writer := bufio.NewWriter(file)
|
||||
for _, num := range adminNumbers {
|
||||
_, err := writer.WriteString(strconv.FormatInt(num, 10) + "\n")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return writer.Flush()
|
||||
}
|
||||
|
||||
|
||||
func (as *AdminStore) load() ([]int64, error) {
|
||||
file, err := os.Open(as.filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var numbers []int64
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
num, err := strconv.ParseInt(scanner.Text(), 10, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
numbers = append(numbers, num)
|
||||
}
|
||||
return numbers, scanner.Err()
|
||||
}
|
||||
|
||||
func (as *AdminStore) IsAdmin(phoneNumber int64) (bool, error) {
|
||||
phoneNumbers, err := as.load()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
for _, phonenumber := range phoneNumbers {
|
||||
if phonenumber == phoneNumber {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
Loading…
Reference in New Issue
Block a user