Skip to content

Commit

Permalink
feat(provider): support for the HTTP-01 challenge
Browse files Browse the repository at this point in the history
  • Loading branch information
tgragnato committed Jan 5, 2024
1 parent ee7facb commit 909128c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 7 deletions.
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ RUN go build
FROM alpine:3.19
WORKDIR /tmp
COPY --from=builder /workspace/inca /usr/sbin/
RUN mkdir -p /tmp/server/webroot
COPY --from=builder /workspace/server/views /tmp/server/views
COPY --from=builder /workspace/server/static /tmp/server/static
ENTRYPOINT ["/usr/sbin/inca"]
Expand Down
26 changes: 20 additions & 6 deletions provider/letsencrypt.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/go-acme/lego/v4/lego"
"github.com/go-acme/lego/v4/log"
"github.com/go-acme/lego/v4/providers/dns"
"github.com/go-acme/lego/v4/providers/http/webroot"
"github.com/go-acme/lego/v4/registration"
"github.com/immobiliare/inca/pki"
"github.com/immobiliare/inca/util"
Expand Down Expand Up @@ -171,12 +172,7 @@ func (p *LetsEncrypt) Get(name string, options map[string]string) ([]byte, []byt
}
}

provider, err := dns.NewDNSChallengeProviderByName(targetProvider.provider)
if err != nil {
return nil, nil, err
}

if err := p.client.Challenge.SetDNS01Provider(provider); err != nil {
if err := p.SetChallengeProvider(targetProvider.provider); err != nil {
return nil, nil, err
}

Expand All @@ -198,6 +194,24 @@ func (p *LetsEncrypt) Get(name string, options map[string]string) ([]byte, []byt
return certificates.Certificate, certificates.PrivateKey, nil
}

func (p *LetsEncrypt) SetChallengeProvider(providerId string) error {
if providerId == "webroot" {
provider, err := webroot.NewHTTPProvider("./server/webroot")
if err != nil {
return err
}

return p.client.Challenge.SetHTTP01Provider(provider)
}

provider, err := dns.NewDNSChallengeProviderByName(providerId)
if err != nil {
return err
}

return p.client.Challenge.SetDNS01Provider(provider)
}

func (p *LetsEncrypt) Del(name string, data []byte) error {
targetProvider, err := p.getChallengeProvider(name)
if err != nil {
Expand Down
4 changes: 3 additions & 1 deletion server/inca.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ func Spinup(path string) (*Inca, error) {
inca.Use(middleware.Logger(zerolog.New(os.Stdout), func(c *fiber.Ctx) bool {
return strings.HasPrefix(c.Path(), "/health") ||
strings.HasPrefix(c.Path(), "/static/") ||
strings.HasPrefix(c.Path(), "/favicon.ico")
strings.HasPrefix(c.Path(), "/favicon.ico") ||
strings.HasPrefix(c.Path(), "/.well-known/acme-challenge/")
}))
inca.Use(redirect.New(redirect.Config{
Rules: map[string]string{
Expand All @@ -87,6 +88,7 @@ func Spinup(path string) (*Inca, error) {
static.CacheDuration = 5 * time.Second
}
inca.Static("/static", "./server/static", static)
inca.Static("/.well-known/acme-challenge/", "./server/webroot")
incaWeb := inca.Group("/web")
incaWeb.Use(middleware.Session(inca.sessionStore, inca.acl))
incaWeb.Get("/", inca.handlerWebIndex)
Expand Down

0 comments on commit 909128c

Please sign in to comment.