Skip to content
Snippets Groups Projects
main.go 2.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    package main
    
    import (
    
    	"fmt"
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    	"net/http"
    
    	"strconv"
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    
    
    	"forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server/internal/common"
    	"forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server/internal/mocks"
    
    	"forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server/internal/models"
    
    	"forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server/internal/rootmux"
    	"forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-server/internal/tokens"
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    )
    
    
    	httpsPort      = common.IntValueFromEnv("HTTPS_PORT", 443)         // HTTPS port to serve on
    	debugMode      = common.BoolValueFromEnv("DEBUG_MODE", false)      // Debug mode, disable Secure attribute for cookies
    	mockOAuth2     = common.BoolValueFromEnv("MOCK_OAUTH2", false)     // Enable mock OAuth2 login
    	fetchGrdfToken = common.BoolValueFromEnv("FETCH_GRDF_TOKEN", true) // HTTPS port to serve on
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    func main() {
    
    	log.Printf("--- Server is starting on port %v ---", httpsPort)
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    
    
    	// Initializations
    
    	tokens.Init("./mnt/configs/tokenskey.json", debugMode)
    
    
    	// Create the server
    
    	rootMux := rootmux.CreateRootMux()
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    	// Init the hostname
    	mocks.Init(httpsPort)
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    	// Start a mock oauth2 server if debug mode is on
    
    	if mockOAuth2 {
    		mockOAuth2Port := ":8090"
    		go http.ListenAndServe(mockOAuth2Port, mocks.CreateMockOAuth2())
    		fmt.Println("Mock OAuth2 server Listening on: http://localhost" + mockOAuth2Port)
    
    	quit := make(chan struct{})
    
    
    	// If needed, we shall request a new GRDF token every 2-hours
    	if fetchGrdfToken {
    		// Call the function immediately when the server starts
    		models.FetchGRDFAuthAPI()
    
    		// then call GRDF auth api every two hours
    		ticker := time.NewTicker(time.Hour * 2)
    		go func() {
    			for {
    				select {
    				case <-ticker.C:
    					models.FetchGRDFAuthAPI()
    				case <-quit:
    					ticker.Stop()
    					return
    				}
    
    	// Deletes outdated consents every 24h
    	dh := models.NewDataHandler()
    	dailyTicker := time.NewTicker(time.Hour * 24)
    	go func() {
    		for {
    			select {
    			case <-dailyTicker.C:
    				models.DeleteOutdatedConsents(dh)
    			case <-quit:
    				dailyTicker.Stop()
    				return
    			}
    		}
    	}()
    
    
    	// Serve locally with https
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    	log.Fatal(http.ListenAndServeTLS(":"+strconv.Itoa(httpsPort), "./dev_certificates/localhost.crt", "./dev_certificates/localhost.key", rootMux.Router))
    
    	// log.Fatal(http.ListenAndServe(":"+strconv.Itoa(httpsPort), rootMux.Router))
    
    Rémi PAILHAREY's avatar
    Rémi PAILHAREY committed
    }