package main import ( "fmt" "log" "net/http" "time" "git.coopgo.io/coopgo-apps/parcoursmob/handlers/api" "git.coopgo.io/coopgo-apps/parcoursmob/handlers/application" "git.coopgo.io/coopgo-apps/parcoursmob/handlers/auth" "git.coopgo.io/coopgo-apps/parcoursmob/renderer" "git.coopgo.io/coopgo-apps/parcoursmob/services" "git.coopgo.io/coopgo-apps/parcoursmob/utils/cache" "git.coopgo.io/coopgo-apps/parcoursmob/utils/identification" "github.com/gorilla/mux" ) func main() { cfg, err := ReadConfig() if err != nil { panic(err) } var ( address = cfg.GetString("server.listen") service_name = cfg.GetString("service_name") templates_public_dir = cfg.GetString("templates.public_dir") ) svc, err := services.NewServicesHandler(cfg) if err != nil { panic(err) } idp, err := identification.NewIdentificationProvider(cfg, svc) if err != nil { panic(err) } cache, err := cache.NewCacheHandler(cfg) if err != nil { panic(err) } emailing, err := renderer.NewEmailingHandler(cfg) if err != nil { panic(err) } apiHandler, _ := api.NewAPIHandler(cfg, idp, svc, cache) applicationHandler, _ := application.NewApplicationHandler(cfg, svc, cache, emailing) authHandler, _ := auth.NewAuthHandler(cfg, idp, svc, cache) fmt.Println("Running", service_name, ":") r := mux.NewRouter() r.PathPrefix("/public/").Handler(http.StripPrefix("/public/", http.FileServer(http.Dir(templates_public_dir)))) r.HandleFunc("/auth/onboarding", authHandler.Onboarding) r.HandleFunc("/auth/groups/", authHandler.Groups) r.HandleFunc("/auth/groups/switch", authHandler.GroupSwitch) r.HandleFunc("/", redirectApp) api_router := r.PathPrefix("/api").Subrouter() api_router.HandleFunc("/", apiHandler.NotFound) api_router.HandleFunc("/geo/autocomplete", apiHandler.GeoAutocomplete) api_router.HandleFunc("/cache/{cacheid}", apiHandler.GetCache) api_router.HandleFunc("/oauth2/callback", apiHandler.OAuth2Callback) application := r.PathPrefix("/app").Subrouter() application.HandleFunc("/", applicationHandler.Dashboard) application.HandleFunc("/beneficiaries/", applicationHandler.BeneficiariesList) application.HandleFunc("/beneficiaries/create", applicationHandler.BeneficiaryCreate) application.HandleFunc("/beneficiaries/{beneficiaryid}", applicationHandler.BeneficiaryDisplay) application.HandleFunc("/beneficiaries/{beneficiaryid}/update", applicationHandler.BeneficiaryUpdate) application.HandleFunc("/beneficiaries/{beneficiaryid}/picture", applicationHandler.BeneficiaryPicture) application.HandleFunc("/members/{beneficiaryid}/picture", applicationHandler.BeneficiaryPicture) application.HandleFunc("/journeys/", applicationHandler.JourneysSearch) application.HandleFunc("/vehicles/", applicationHandler.VehiclesSearch) application.HandleFunc("/vehicles/bookings/", applicationHandler.VehiclesBookingsList) application.HandleFunc("/vehicles/bookings/{bookingid}", applicationHandler.VehicleBookingDisplay) application.HandleFunc("/vehicles/v/{vehicleid}/b/{beneficiaryid}", applicationHandler.Book) application.HandleFunc("/vehicles-management/", applicationHandler.VehiclesManagementOverview) application.HandleFunc("/vehicles-management/fleet/add", applicationHandler.VehiclesFleetAdd) application.HandleFunc("/vehicles-management/fleet/{vehicleid}", applicationHandler.VehiclesFleetDisplay) application.HandleFunc("/vehicles-management/fleet/{vehicleid}/update", applicationHandler.VehiclesFleetUpdate) application.HandleFunc("/vehicles-management/bookings/{bookingid}", applicationHandler.VehicleManagementBookingDisplay) application.HandleFunc("/agenda/", applicationHandler.AgendaHome) application.HandleFunc("/agenda/create-event", applicationHandler.AgendaCreateEvent) application.HandleFunc("/agenda/{eventid}", applicationHandler.AgendaDisplayEvent) application.HandleFunc("/agenda/{eventid}/subscribe", applicationHandler.AgendaSubscribeEvent) application.HandleFunc("/directory/", applicationHandler.DirectoryHome) application.HandleFunc("/group/settings", applicationHandler.GroupSettingsDisplay) application.HandleFunc("/group/settings/invite-member", applicationHandler.GroupSettingsInviteMember) /********************Code Supprt Emailing************************/ application.HandleFunc("/support/", applicationHandler.SupportSend) // application.HandleFunc("/group_module/", applicationHandler.GroupModule) // application.HandleFunc("/group_module/create", applicationHandler.GroupModuleCreate) /*********************** CODE GROUP **************************/ appGroup := application.PathPrefix("/group_module").Subrouter() appGroup.HandleFunc("/", applicationHandler.Groups) appGroup.HandleFunc("/groups", applicationHandler.CreateGroupModule) //appGroup.HandleFunc("/createBeneficaire", applicationHandler.CreateGroupBeneficaire) //appGroup.HandleFunc("/groups/{groupid}/createBeneficaire", applicationHandler.BeneficaireSearch) //appGroup.HandleFunc("/groups/{groupid}/{beneficiaryid}", applicationHandler.DisplayGroupBeneficaire) appGroup.HandleFunc("/groups/{groupid}", applicationHandler.DisplayGroupModule) //appGroup.HandleFunc("/groups/{groupid}/invite-admin", applicationHandler.AdministrationGroupInviteAdmin) /****************************************************************/ //TODO Subrouters with middlewares checking security for each module ? application.Use(idp.Middleware) application.Use(idp.GroupsMiddleware) appAdmin := application.PathPrefix("/administration").Subrouter() appAdmin.HandleFunc("/", applicationHandler.Administration) appAdmin.HandleFunc("/groups/", applicationHandler.AdministrationCreateGroup) appAdmin.HandleFunc("/groups/{groupid}", applicationHandler.AdministrationGroupDisplay) appAdmin.HandleFunc("/groups/{groupid}/invite-admin", applicationHandler.AdministrationGroupInviteAdmin) //TODO Secure with Middleware checking for modules fmt.Println("-> HTTP server listening on", address) srv := &http.Server{ Handler: r, Addr: address, WriteTimeout: 15 * time.Second, ReadTimeout: 15 * time.Second, } log.Fatal(srv.ListenAndServe()) } func redirectApp(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/app/", http.StatusFound) }