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.5KB

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