gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package httpauth
  4. import (
  5. "encoding/base64"
  6. "strings"
  7. "code.gitea.io/gitea/modules/util"
  8. )
  9. type BasicAuth struct {
  10. Username, Password string
  11. }
  12. type BearerToken struct {
  13. Token string
  14. }
  15. type ParsedAuthorizationHeader struct {
  16. BasicAuth *BasicAuth
  17. BearerToken *BearerToken
  18. }
  19. func ParseAuthorizationHeader(header string) (ret ParsedAuthorizationHeader, _ bool) {
  20. parts := strings.Fields(header)
  21. if len(parts) != 2 {
  22. return ret, false
  23. }
  24. if util.AsciiEqualFold(parts[0], "basic") {
  25. s, err := base64.StdEncoding.DecodeString(parts[1])
  26. if err != nil {
  27. return ret, false
  28. }
  29. u, p, ok := strings.Cut(string(s), ":")
  30. if !ok {
  31. return ret, false
  32. }
  33. ret.BasicAuth = &BasicAuth{Username: u, Password: p}
  34. return ret, true
  35. } else if util.AsciiEqualFold(parts[0], "token") || util.AsciiEqualFold(parts[0], "bearer") {
  36. ret.BearerToken = &BearerToken{Token: parts[1]}
  37. return ret, true
  38. }
  39. return ret, false
  40. }