claims.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package jwtauth
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strconv"
  6. "github.com/golang-jwt/jwt/v4"
  7. )
  8. // MapClaims represents a jwt.MapClaims
  9. type MapClaims jwt.MapClaims
  10. // Exp returns value of exp
  11. func (m MapClaims) Exp() (int64, error) {
  12. return m.Int64("exp")
  13. }
  14. // OrigIat returns value of orig_iat
  15. func (m MapClaims) OrigIat() (int64, error) {
  16. return m.Int64("orig_iat")
  17. }
  18. // Identity returns value of identity
  19. func (m MapClaims) Identity() (int64, error) {
  20. return m.Int64(IdentityKey)
  21. }
  22. // Int64 try to convert to int64 by key
  23. func (m MapClaims) Int64(key string) (int64, error) {
  24. value := m[key]
  25. if value == nil {
  26. return 0, fmt.Errorf("invalid key '%v'", key)
  27. }
  28. switch value.(type) {
  29. case json.Number:
  30. return value.(json.Number).Int64()
  31. case float64:
  32. return int64(value.(float64)), nil
  33. case string:
  34. return strconv.ParseInt(value.(string), 10, 0)
  35. default:
  36. return 0, fmt.Errorf("invalid value '%v' type '%T'", value, value)
  37. }
  38. }
  39. // String try to convert to string by key
  40. func (m MapClaims) String(key string) string {
  41. value := m[key]
  42. if value == nil {
  43. return ""
  44. }
  45. switch value.(type) {
  46. case json.Number:
  47. return value.(json.Number).String()
  48. case float64:
  49. return strconv.FormatFloat(value.(float64), 'g', -1, 64)
  50. case string:
  51. return value.(string)
  52. default:
  53. fmt.Printf("maptoclaims key to string invalid value '%v' type '%T' key %v \r\n", value, value, key)
  54. return ""
  55. }
  56. }
  57. // Int try to convert to int by key
  58. func (m MapClaims) Int(key string) (int, error) {
  59. value := m[key]
  60. if value == nil {
  61. return 0, fmt.Errorf("invalid key '%v'", key)
  62. }
  63. switch value.(type) {
  64. case json.Number:
  65. intVal, err := value.(json.Number).Int64()
  66. if err != nil {
  67. return 0, err
  68. }
  69. return int(intVal), nil
  70. case float64:
  71. return int(value.(float64)), nil
  72. case string:
  73. intVal, err := strconv.ParseInt(value.(string), 10, 0)
  74. if err != nil {
  75. return 0, err
  76. }
  77. return int(intVal), nil
  78. default:
  79. return 0, fmt.Errorf("invalid value '%v' type '%T'", value, value)
  80. }
  81. }
  82. // UInt64 try to convert to uint64 by key
  83. func (m MapClaims) UInt64(key string) (uint64, error) {
  84. value := m[key]
  85. if value == nil {
  86. return 0, fmt.Errorf("invalid key '%v'", key)
  87. }
  88. switch value.(type) {
  89. case json.Number:
  90. intVal, err := value.(json.Number).Int64()
  91. if err != nil {
  92. return 0, err
  93. }
  94. return uint64(intVal), nil
  95. case float64:
  96. return uint64(value.(float64)), nil
  97. case string:
  98. intVal, err := strconv.ParseInt(value.(string), 10, 0)
  99. if err != nil {
  100. return 0, err
  101. }
  102. return uint64(intVal), nil
  103. default:
  104. return 0, fmt.Errorf("invalid value '%v' type '%T'", value, value)
  105. }
  106. }