docxTemplater/main.go

174 lines
5.3 KiB
Go
Raw Normal View History

2022-07-28 15:00:43 +00:00
package main
import (
"amocrm_templategen_back/amo"
"amocrm_templategen_back/dal"
GDisk "amocrm_templategen_back/gdisk"
"amocrm_templategen_back/handlers"
"amocrm_templategen_back/middleware"
YaDisk "amocrm_templategen_back/yadisk"
"context"
"fmt"
2022-07-28 15:00:43 +00:00
"github.com/gorilla/mux"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"log"
"net/http"
"os"
"os/signal"
"syscall"
)
type Env struct {
Domain string `env:"DOMAIN" default:"solweb.site"`
LogFile string `env:"LOG_FILE" default:"./tmp/logs.log"`
MongoUrl string `env:"MONGO_URL" default:"mongodb+srv://user_1:cEDxC8ptLMMeoA5m@cluster0.aomle.mongodb.net/templategen"`
DbName string `env:"DB_NAME" default:"templategen"`
YaDiskClientID string `env:"YADISK_CLIENT_ID" default:"94482c181e5148c096ae6ad3b2a981ea"`
YaDiskClientSecret string `env:"YADISK_CLIENT_SECRET" default:"7dc4f541c3f64f4a9078e59d7494d222"`
GDiskCredentials string `env:"GDISK_CREDENTIALS" default:"./static/gdisk-credentials.json"`
AmoClientID string `env:"AMO_CLIENT_ID" default:"2fc35b41-f446-4ebb-95cb-b00c55d2f810"`
AmoClientSecret string `env:"AMO_CLIENT_SECRET" default:"j1jtyIUPplv5Qd8raBvDP6OvvOp9KA8c2HAtkewQ8MJCaVNvob7piPFIDdjS0aiY"`
}
2022-07-28 15:00:43 +00:00
func main() {
opts := getEnv(Env{})
fmt.Printf("OPTIONS: %+v \r\n", opts)
2022-07-28 15:00:43 +00:00
ctx, cancel := context.WithCancel(context.Background())
// Logger
cfgLogger := zap.NewDevelopmentConfig()
cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
2022-08-10 13:53:34 +00:00
cfgLogger.EncoderConfig.ConsoleSeparator = " "
2022-07-28 15:00:43 +00:00
logger, err := cfgLogger.Build()
if err != nil {
panic(err)
}
// Start Data Access Layer
mongoDal, err := dal.InitMongoDAL(ctx, opts.MongoUrl, opts.DbName, logger)
2022-07-28 15:00:43 +00:00
defer mongoDal.Disconnect()
if err != nil {
logger.Fatal("ErrorConnectToDAL", zap.Error(err))
}
// Yandex Disk
yaDisk := YaDisk.NewClientApp(
opts.YaDiskClientID,
opts.YaDiskClientSecret,
fmt.Sprintf("https://%v/yadisk", opts.Domain))
2022-07-28 15:00:43 +00:00
// Google Drive
gDisk, err := GDisk.NewClientApp(opts.GDiskCredentials)
2022-07-28 15:00:43 +00:00
if err != nil {
log.Fatal("ErrorCreateGoogleDriveClientApp:", err)
}
// Amo
amoApp := amo.NewClientApp(
opts.AmoClientSecret,
opts.AmoClientID,
fmt.Sprintf("https://%v/amo", opts.Domain))
2022-07-28 15:00:43 +00:00
// Handlers
h := handlers.NewHandlers(mongoDal, yaDisk, gDisk, amoApp, logger)
r := mux.NewRouter()
// Add Assets
fs := http.FileServer(http.Dir("assets"))
r.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", fs))
r.PathPrefix("/tmp/parsed/").Handler(http.StripPrefix("/tmp/parsed/", http.FileServer(http.Dir("tmp/parsed"))))
r.PathPrefix("/.well-known/pki-validation/").Handler(http.StripPrefix("/.well-known/pki-validation/", http.FileServer(http.Dir(".well-known/pki-validation"))))
2022-08-10 13:53:34 +00:00
r.PathPrefix("/.well-known/acme-challenge/").Handler(http.StripPrefix("/.well-known/acme-challenge/",
http.FileServer(http.Dir(".well-known/acme-challenge"))))
2022-07-28 15:00:43 +00:00
//# region ====== HANDLERS ======
2022-07-28 15:00:43 +00:00
r.HandleFunc("/", h.IndexPage)
r.HandleFunc("/pages/logout", h.LogoutPage)
r.HandleFunc("/pages/login", h.LoginPage)
r.HandleFunc("/pages/registration", h.RegistrationPage)
r.NotFoundHandler = http.HandlerFunc(h.PageNotFound)
2022-08-10 13:53:34 +00:00
r.HandleFunc("/amo", h.AmoSaveToken)
r.HandleFunc("/amo/settings/getData", h.AmoSettingsGetData)
//r.HandleFunc("/amo/saveToken", h.AmoSaveToken)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/amo/webhook", h.AmoWebhook)
r.HandleFunc("/amo/webhook2", h.AmoWebhook2)
2022-08-10 13:53:34 +00:00
r.HandleFunc("/amo/gdisk/getTemplateDir", h.GDiskGetDirTemplate)
r.HandleFunc("/amo/getTemplate", h.AmoGetTemplate)
r.HandleFunc("/amo/setTemplate", h.AmoSetTemplate)
r.HandleFunc("/amo/generateDoc", h.AmoGenerateDoc)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/user/registration", h.UserRegistration)
r.HandleFunc("/user/login", h.UserLogin)
r.HandleFunc("/user/logout", h.UserLogout)
r.HandleFunc("/yadisk", h.YaDiskPage)
r.HandleFunc("/yadisk/saveToken", h.YaDiskSaveToken)
r.HandleFunc("/yadisk/getInfo", h.YaDiskGetInfo)
r.HandleFunc("/yadisk/setFolders", h.YaDiskSetFolders)
r.HandleFunc("/gdisk", h.GDiskPage)
r.HandleFunc("/gdisk/saveToken", h.GDiskSaveToken)
2022-08-10 13:53:34 +00:00
r.HandleFunc("/gdisk/getDirInfo", h.GDiskGetDirInfo)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/template/new", h.TemplateNew)
r.HandleFunc("/template/getById", h.TemplateGetByID)
r.HandleFunc("/template/getListByUser", h.TemplateGetListByUser)
r.HandleFunc("/template/update", h.TemplateUpdate)
r.HandleFunc("/template/delete", h.TemplateDelete)
r.HandleFunc("/template/init", h.TemplateInit)
//#endregion
2022-07-28 15:00:43 +00:00
// Middlewares
2022-08-10 13:53:34 +00:00
mw := middleware.InitMiddleware(mongoDal, amoApp, logger)
2022-07-28 15:00:43 +00:00
r.Use(
2022-08-10 13:53:34 +00:00
mw.MiddlewareHeaders,
mw.MiddlewareCors,
2022-07-28 15:00:43 +00:00
mw.MiddlewareJwt,
2022-08-10 13:53:34 +00:00
mw.MiddlewareAmoJwt,
2022-07-28 15:00:43 +00:00
mw.Logger,
)
r.NotFoundHandler = r.NewRoute().HandlerFunc(h.PageNotFound).GetHandler()
srv := http.Server{
Handler: r,
}
go func() {
err := srv.ListenAndServe()
if err != nil {
logger.Fatal("CanNotServe", zap.Error(err))
}
}()
2022-08-10 13:53:34 +00:00
// TLS
2022-07-28 15:00:43 +00:00
go func() {
err := srv.ListenAndServeTLS("./static/cert/fullchain.pem", "./static/cert/privkey.pem")
2022-07-28 15:00:43 +00:00
if err != nil {
logger.Fatal("CanNotServe", zap.Error(err))
}
}()
// Graceful Shutdown
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
killSignal := <-interrupt
switch killSignal {
case os.Interrupt:
logger.Fatal("AppInterrupted")
case syscall.SIGTERM:
logger.Fatal("AppTerminated")
}
defer cancel()
}