mirror of
https://github.com/woodchen-ink/Oapi-Feishu.git
synced 2025-07-18 22:02:08 +08:00
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
package initialization
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func loadCertificate(config Config) (cert tls.Certificate, err error) {
|
|
cert, err = tls.LoadX509KeyPair(config.CertFile, config.KeyFile)
|
|
if err != nil {
|
|
return cert, fmt.Errorf("failed to load certificate: %v", err)
|
|
}
|
|
|
|
// check certificate expiry
|
|
if len(cert.Certificate) == 0 {
|
|
return cert, fmt.Errorf("no certificates found in %s", config.CertFile)
|
|
}
|
|
parsedCert, err := x509.ParseCertificate(cert.Certificate[0])
|
|
if err != nil {
|
|
return cert, fmt.Errorf("failed to parse certificate: %v", err)
|
|
}
|
|
cert.Leaf = parsedCert
|
|
certExpiry := cert.Leaf.NotAfter
|
|
if certExpiry.Before(time.Now()) {
|
|
return cert, fmt.Errorf("certificate expired on %v", certExpiry)
|
|
}
|
|
|
|
return cert, nil
|
|
}
|
|
|
|
func startHTTPServer(config Config, r *gin.Engine) (err error) {
|
|
log.Printf("http server started: http://localhost:%d/webhook/event\n", config.HttpPort)
|
|
err = r.Run(fmt.Sprintf(":%d", config.HttpPort))
|
|
if err != nil {
|
|
return fmt.Errorf("failed to start http server: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
func startHTTPSServer(config Config, r *gin.Engine) (err error) {
|
|
cert, err := loadCertificate(config)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to load certificate: %v", err)
|
|
}
|
|
server := &http.Server{
|
|
Addr: fmt.Sprintf(":%d", config.HttpsPort),
|
|
Handler: r,
|
|
TLSConfig: &tls.Config{
|
|
Certificates: []tls.Certificate{cert},
|
|
},
|
|
}
|
|
fmt.Printf("https server started: https://localhost:%d/webhook/event\n", config.HttpsPort)
|
|
err = server.ListenAndServeTLS("", "")
|
|
if err != nil {
|
|
return fmt.Errorf("failed to start https server: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
func StartServer(config Config, r *gin.Engine) (err error) {
|
|
if config.UseHttps {
|
|
err = startHTTPSServer(config, r)
|
|
} else {
|
|
err = startHTTPServer(config, r)
|
|
}
|
|
return err
|
|
}
|