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"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"go.uber.org/zap/zapcore"
|
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"syscall"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
logfile = "./tmp/logs.log"
|
|
|
|
postgres = "postgresql://docker:docker@localhost:5432/templategen"
|
|
|
|
MONGO_URL = "mongodb+srv://user_1:cEDxC8ptLMMeoA5m@cluster0.aomle.mongodb.net/templategen"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
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, MONGO_URL, "templategen", logger)
|
|
|
|
defer mongoDal.Disconnect()
|
|
|
|
if err != nil {
|
|
|
|
logger.Fatal("ErrorConnectToDAL", zap.Error(err))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Yandex Disk
|
|
|
|
yaDisk := YaDisk.NewClientApp("94482c181e5148c096ae6ad3b2a981ea", "7dc4f541c3f64f4a9078e59d7494d222",
|
|
|
|
"https://solweb.site/yadisk")
|
|
|
|
|
|
|
|
gDisk, err := GDisk.NewClientApp()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal("ErrorCreateGoogleDriveClientApp:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Amo
|
|
|
|
amoApp := amo.NewClientApp(
|
2022-08-10 13:53:34 +00:00
|
|
|
"j1jtyIUPplv5Qd8raBvDP6OvvOp9KA8c2HAtkewQ8MJCaVNvob7piPFIDdjS0aiY",
|
2022-07-28 15:00:43 +00:00
|
|
|
"2fc35b41-f446-4ebb-95cb-b00c55d2f810",
|
|
|
|
"https://solweb.site/amo")
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
|
|
// Handlers
|
|
|
|
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)
|
|
|
|
|
|
|
|
// 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() {
|
2022-08-10 13:53:34 +00:00
|
|
|
err := srv.ListenAndServeTLS("./cert/fullchain.pem", "./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()
|
|
|
|
}
|