mirror of
https://github.com/restic/rest-server.git
synced 2025-12-07 01:26:18 -08:00
reload htpasswd on SIGHUP
This commit is contained in:
15
htpasswd.go
15
htpasswd.go
@@ -30,8 +30,10 @@ import (
|
||||
"encoding/csv"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"regexp"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
@@ -54,6 +56,8 @@ type HtpasswdFile struct {
|
||||
// NewHtpasswdFromFile reads the users and passwords from a htpasswd file and returns them. If an error is encountered,
|
||||
// it is returned, together with a nil-Pointer for the HtpasswdFile.
|
||||
func NewHtpasswdFromFile(path string) (*HtpasswdFile, error) {
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, syscall.SIGHUP)
|
||||
stat, err := os.Stat(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -73,6 +77,17 @@ func NewHtpasswdFromFile(path string) (*HtpasswdFile, error) {
|
||||
// Start a goroutine that limits reload checks to once per CheckInterval
|
||||
go h.throttleTimer()
|
||||
|
||||
go func() {
|
||||
for range c {
|
||||
err := h.Reload()
|
||||
if err == nil {
|
||||
log.Printf("Reloaded htpasswd file")
|
||||
} else {
|
||||
log.Printf("Could not reload htpasswd file: %v", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
return h, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user