feat: Add HTTPS support
All checks were successful
/ pre-commit (push) Successful in 1m6s

Fixes #19.

Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
Julien Riou 2025-09-19 07:12:21 +02:00
commit b62a807f89
Signed by: jriou
GPG key ID: 9A099EDA51316854
3 changed files with 18 additions and 3 deletions

View file

@ -34,6 +34,8 @@ The file format is **JSON**:
* **languages** ([]string): List of supported [languages](https://github.com/microsoft/monaco-editor/tree/main/src/basic-languages) * **languages** ([]string): List of supported [languages](https://github.com/microsoft/monaco-editor/tree/main/src/basic-languages)
* **language** (string): Default language (default "text") * **language** (string): Default language (default "text")
* **enable_upload_file_button** (bool): Display the upload file button in the UI (default true) * **enable_upload_file_button** (bool): Display the upload file button in the UI (default true)
* **tls_cert_file** (string): Path to TLS certificate file to enable HTTPS
* **tls_key_file** (string): Path to TLS key file to enable HTTPS
The configuration file is not required but the service might not be exposed to the public. The configuration file is not required but the service might not be exposed to the public.

View file

@ -26,6 +26,8 @@ type Config struct {
Languages []string `json:"languages"` Languages []string `json:"languages"`
Language string `json:"language"` Language string `json:"language"`
EnableUploadFileButton bool `json:"enable_upload_file_button"` EnableUploadFileButton bool `json:"enable_upload_file_button"`
TLSCertFile string `json:"tls_cert_file"`
TLSKeyFile string `json:"tls_key_file"`
} }
func NewConfig() *Config { func NewConfig() *Config {
@ -94,3 +96,7 @@ func (c *Config) Check() error {
} }
return nil return nil
} }
func (c *Config) HasTLS() bool {
return c.TLSCertFile != "" && c.TLSKeyFile != ""
}

View file

@ -13,9 +13,10 @@ import (
"strconv" "strconv"
"strings" "strings"
"git.riou.xyz/jriou/coller/internal"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
"git.riou.xyz/jriou/coller/internal"
) )
var passwordLength = internal.MIN_PASSWORD_LENGTH var passwordLength = internal.MIN_PASSWORD_LENGTH
@ -472,6 +473,12 @@ func (s *Server) Start() error {
r.Path("/").Handler(&HomeHandler{Templates: templates, PageData: p}).Methods("GET") r.Path("/").Handler(&HomeHandler{Templates: templates, PageData: p}).Methods("GET")
addr := fmt.Sprintf("%s:%d", s.config.ListenAddress, s.config.ListenPort) addr := fmt.Sprintf("%s:%d", s.config.ListenAddress, s.config.ListenPort)
s.logger.Info(fmt.Sprintf("listening to %s:%d", s.config.ListenAddress, s.config.ListenPort))
return http.ListenAndServe(addr, r) if s.config.HasTLS() {
s.logger.Info(fmt.Sprintf("listening to %s:%d (https)", s.config.ListenAddress, s.config.ListenPort))
return http.ListenAndServeTLS(addr, s.config.TLSCertFile, s.config.TLSKeyFile, r)
} else {
s.logger.Info(fmt.Sprintf("listening to %s:%d (http)", s.config.ListenAddress, s.config.ListenPort))
return http.ListenAndServe(addr, r)
}
} }