You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

generate.go 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2016 The Gogs Authors. All rights reserved.
  2. // Copyright 2016 The Gitea Authors. All rights reserved.
  3. // Use of this source code is governed by a MIT-style
  4. // license that can be found in the LICENSE file.
  5. package generate
  6. import (
  7. "crypto/rand"
  8. "encoding/base64"
  9. "io"
  10. "time"
  11. "code.gitea.io/gitea/modules/util"
  12. "github.com/golang-jwt/jwt/v4"
  13. )
  14. // NewInternalToken generate a new value intended to be used by INTERNAL_TOKEN.
  15. func NewInternalToken() (string, error) {
  16. secretBytes := make([]byte, 32)
  17. _, err := io.ReadFull(rand.Reader, secretBytes)
  18. if err != nil {
  19. return "", err
  20. }
  21. secretKey := base64.RawURLEncoding.EncodeToString(secretBytes)
  22. now := time.Now()
  23. var internalToken string
  24. internalToken, err = jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
  25. "nbf": now.Unix(),
  26. }).SignedString([]byte(secretKey))
  27. if err != nil {
  28. return "", err
  29. }
  30. return internalToken, nil
  31. }
  32. // NewJwtSecret generates a new value intended to be used for JWT secrets.
  33. func NewJwtSecret() ([]byte, error) {
  34. bytes := make([]byte, 32)
  35. _, err := io.ReadFull(rand.Reader, bytes)
  36. if err != nil {
  37. return nil, err
  38. }
  39. return bytes, nil
  40. }
  41. // NewJwtSecretBase64 generates a new base64 encoded value intended to be used for JWT secrets.
  42. func NewJwtSecretBase64() (string, error) {
  43. bytes, err := NewJwtSecret()
  44. if err != nil {
  45. return "", err
  46. }
  47. return base64.RawURLEncoding.EncodeToString(bytes), nil
  48. }
  49. // NewSecretKey generate a new value intended to be used by SECRET_KEY.
  50. func NewSecretKey() (string, error) {
  51. secretKey, err := util.RandomString(64)
  52. if err != nil {
  53. return "", err
  54. }
  55. return secretKey, nil
  56. }