(outFile string, next, expiresIn, renewPeriod time.Duration, afterRenew func() error)
| 584 | } |
| 585 | |
| 586 | func (r *renewer) Daemon(outFile string, next, expiresIn, renewPeriod time.Duration, afterRenew func() error) error { |
| 587 | // Loggers |
| 588 | infoLog := log.New(os.Stdout, "INFO: ", log.LstdFlags) |
| 589 | errLog := log.New(os.Stderr, "ERROR: ", log.LstdFlags) |
| 590 | |
| 591 | // Daemon loop |
| 592 | signals := make(chan os.Signal, 1) |
| 593 | signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) |
| 594 | defer signal.Stop(signals) |
| 595 | |
| 596 | infoLog.Printf("first renewal in %s", next.Round(time.Second)) |
| 597 | var err error |
| 598 | for { |
| 599 | select { |
| 600 | case sig := <-signals: |
| 601 | switch sig { |
| 602 | case syscall.SIGHUP: |
| 603 | if next, err = r.RenewAndPrepareNext(outFile, expiresIn, renewPeriod); err != nil { |
| 604 | errLog.Println(err) |
| 605 | } else if err := afterRenew(); err != nil { |
| 606 | errLog.Println(err) |
| 607 | } |
| 608 | case syscall.SIGINT, syscall.SIGTERM: |
| 609 | return nil |
| 610 | } |
| 611 | case <-time.After(next): |
| 612 | if next, err = r.RenewAndPrepareNext(outFile, expiresIn, renewPeriod); err != nil { |
| 613 | errLog.Println(err) |
| 614 | } else if err := afterRenew(); err != nil { |
| 615 | errLog.Println(err) |
| 616 | } |
| 617 | } |
| 618 | } |
| 619 | } |
| 620 | |
| 621 | // RenewWithToken creates an authorization token with the given certificate and |
| 622 | // attempts to renew the given certificate. It can be used to renew expired |
no test coverage detected