aboutsummaryrefslogtreecommitdiffstats
path: root/modules/auth/httpauth/httpauth.go
blob: 7f1f1ee152cf75eef28454f4102d45dd055ce701 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package httpauth

import (
	"encoding/base64"
	"strings"

	"code.gitea.io/gitea/modules/util"
)

type BasicAuth struct {
	Username, Password string
}

type BearerToken struct {
	Token string
}

type ParsedAuthorizationHeader struct {
	BasicAuth   *BasicAuth
	BearerToken *BearerToken
}

func ParseAuthorizationHeader(header string) (ret ParsedAuthorizationHeader, _ bool) {
	parts := strings.Fields(header)
	if len(parts) != 2 {
		return ret, false
	}
	if util.AsciiEqualFold(parts[0], "basic") {
		s, err := base64.StdEncoding.DecodeString(parts[1])
		if err != nil {
			return ret, false
		}
		u, p, ok := strings.Cut(string(s), ":")
		if !ok {
			return ret, false
		}
		ret.BasicAuth = &BasicAuth{Username: u, Password: p}
		return ret, true
	} else if util.AsciiEqualFold(parts[0], "token") || util.AsciiEqualFold(parts[0], "bearer") {
		ret.BearerToken = &BearerToken{Token: parts[1]}
		return ret, true
	}
	return ret, false
}