1
0

token.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package api
  2. import(
  3. "encoding/json"
  4. "encoding/base64"
  5. "crypto/rand"
  6. "io/ioutil"
  7. "strings"
  8. "net/http"
  9. "fmt"
  10. )
  11. type token struct{
  12. Name string
  13. Token string
  14. }
  15. var tokens []token
  16. func generateRandomBytes(max int) []byte {
  17. var slice []byte = make([]byte, max)
  18. _, err := rand.Read(slice)
  19. if err != nil {
  20. return nil
  21. }
  22. return slice
  23. }
  24. func base64Encode(data []byte) string {
  25. return base64.StdEncoding.EncodeToString(data)
  26. }
  27. func GenerateNewToken(name string) string{
  28. generated:=base64Encode(generateRandomBytes(10))
  29. var newToken token = token{name, generated}
  30. tokens = append(tokens, newToken)
  31. writeTokensToFile()
  32. return generated
  33. }
  34. func writeTokensToFile(){
  35. tokens=getTokens()
  36. jsonTokens, err:=json.Marshal(tokens)
  37. if err!=nil{
  38. printError(err)
  39. }
  40. err=ioutil.WriteFile("tokens.json", jsonTokens, 0644)
  41. if err!=nil{
  42. printError(err)
  43. }
  44. return
  45. }
  46. func getTokens() []token{
  47. data, err := ioutil.ReadFile("tokens.json")
  48. fmt.Println(string(data))
  49. if err != nil{
  50. printError(err)
  51. return nil
  52. }
  53. var tokens []token
  54. err = json.Unmarshal(data, &tokens)
  55. if err!=nil{
  56. printError(err)
  57. return nil
  58. }
  59. return tokens
  60. }
  61. func CheckToken(r *http.Request) bool{
  62. newToken := r.Header.Get("Authorization")
  63. newToken = strings.Replace(newToken, "Bearer ", "", 1)
  64. tokens=getTokens()
  65. fmt.Println(tokens)
  66. for _, check := range tokens{
  67. if newToken==check.Token{
  68. return true
  69. }
  70. }
  71. return false
  72. }