token.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package storage
  5. import (
  6. "database/sql"
  7. "fmt"
  8. "github.com/miniflux/miniflux2/helper"
  9. "github.com/miniflux/miniflux2/model"
  10. )
  11. // CreateToken creates a new token.
  12. func (s *Storage) CreateToken() (*model.Token, error) {
  13. token := model.Token{
  14. ID: helper.GenerateRandomString(32),
  15. Value: helper.GenerateRandomString(64),
  16. }
  17. query := "INSERT INTO tokens (id, value) VALUES ($1, $2)"
  18. _, err := s.db.Exec(query, token.ID, token.Value)
  19. if err != nil {
  20. return nil, fmt.Errorf("unable to create token: %v", err)
  21. }
  22. return &token, nil
  23. }
  24. // Token returns a Token.
  25. func (s *Storage) Token(id string) (*model.Token, error) {
  26. var token model.Token
  27. query := "SELECT id, value FROM tokens WHERE id=$1"
  28. err := s.db.QueryRow(query, id).Scan(
  29. &token.ID,
  30. &token.Value,
  31. )
  32. if err == sql.ErrNoRows {
  33. return nil, fmt.Errorf("token not found: %s", id)
  34. } else if err != nil {
  35. return nil, fmt.Errorf("unable to fetch token: %v", err)
  36. }
  37. return &token, nil
  38. }