File: challenges.go

package info (click to toggle)
golang-github-xenolf-lego 4.9.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,080 kB
  • sloc: xml: 533; makefile: 128; sh: 18
file content (44 lines) | stat: -rw-r--r-- 1,238 bytes parent folder | download | duplicates (2)
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
package challenge

import (
	"fmt"

	"github.com/go-acme/lego/v4/acme"
)

// Type is a string that identifies a particular challenge type and version of ACME challenge.
type Type string

const (
	// HTTP01 is the "http-01" ACME challenge https://www.rfc-editor.org/rfc/rfc8555.html#section-8.3
	// Note: ChallengePath returns the URL path to fulfill this challenge.
	HTTP01 = Type("http-01")

	// DNS01 is the "dns-01" ACME challenge https://www.rfc-editor.org/rfc/rfc8555.html#section-8.4
	// Note: GetRecord returns a DNS record which will fulfill this challenge.
	DNS01 = Type("dns-01")

	// TLSALPN01 is the "tls-alpn-01" ACME challenge https://www.rfc-editor.org/rfc/rfc8737.html
	TLSALPN01 = Type("tls-alpn-01")
)

func (t Type) String() string {
	return string(t)
}

func FindChallenge(chlgType Type, authz acme.Authorization) (acme.Challenge, error) {
	for _, chlg := range authz.Challenges {
		if chlg.Type == string(chlgType) {
			return chlg, nil
		}
	}

	return acme.Challenge{}, fmt.Errorf("[%s] acme: unable to find challenge %s", GetTargetedDomain(authz), chlgType)
}

func GetTargetedDomain(authz acme.Authorization) string {
	if authz.Wildcard {
		return "*." + authz.Identifier.Value
	}
	return authz.Identifier.Value
}