docxTemplater/main.go

235 lines
7.9 KiB
Go
Raw Normal View History

2022-07-28 15:00:43 +00:00
package main
import (
"context"
"fmt"
2022-12-16 21:44:45 +00:00
"log"
"net/http"
"os"
"os/signal"
"syscall"
"github.com/gorilla/mux"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
2022-12-31 14:46:28 +00:00
"penahub.gitlab.yandexcloud.net/backend/templategen/amo"
"penahub.gitlab.yandexcloud.net/backend/templategen/dal"
GDisk "penahub.gitlab.yandexcloud.net/backend/templategen/gdisk"
"penahub.gitlab.yandexcloud.net/backend/templategen/handlers"
"penahub.gitlab.yandexcloud.net/backend/templategen/middleware"
2023-05-14 18:27:13 +00:00
"penahub.gitlab.yandexcloud.net/backend/templategen/privileges"
2022-12-31 14:46:28 +00:00
YaDisk "penahub.gitlab.yandexcloud.net/backend/templategen/yadisk"
2022-07-28 15:00:43 +00:00
)
type Env struct {
2022-12-31 14:46:28 +00:00
Domain string `env:"DOMAIN" default:"tempgen.pena.digital"`
LogFile string `env:"LOG_FILE" default:"./tmp/logs.log"`
MongoUrl string `env:"MONGO_URL" default:"mongodb://mongo:30000/?replicaSet=penahub-rs"`
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"`
2023-06-27 21:32:46 +00:00
AmoClientID string `env:"AMO_CLIENT_ID" default:"6c7f3fdb-cce7-4fb0-a8a3-640b695c8d00"`
2023-07-04 01:11:43 +00:00
AmoClientSecret string `env:"AMO_CLIENT_SECRET" default:"5oJU1L8pScLKfEasShJ6KuDU32VrIs6BVKQ6BiY4vABIQycUWJziULytiUs5jaZU"`
2023-06-27 21:32:46 +00:00
AmoRedirectUrn string `env:"AMO_REDIRECT_URN" default:"/settings/widgets/penagen/"`
}
2022-07-28 15:00:43 +00:00
func main() {
opts := GetOpts()
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()
2022-11-26 06:08:53 +00:00
logger.Info("OPTIONS", zap.Any("ENV", opts))
2022-07-28 15:00:43 +00:00
if err != nil {
panic(err)
}
2023-05-14 18:27:13 +00:00
if err := privileges.PublishPrivileges(ctx, "https://admin.pena.digital/strator"); err != nil {
logger.Error("ErrorPublishPrivileges", zap.Error(err))
}
2022-07-28 15:00:43 +00:00
// 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),
fmt.Sprintf("https://%v", 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.AmoClientID,
opts.AmoClientSecret,
fmt.Sprintf("https://%v/amo", opts.Domain))
2022-07-28 15:00:43 +00:00
// Handlers
h := handlers.NewHandlers(mongoDal, yaDisk, gDisk, amoApp, logger, &handlers.HandlerVars{
Domain: opts.Domain,
AmoRedirectUrn: opts.AmoRedirectUrn,
})
2022-07-28 15:00:43 +00:00
r := mux.NewRouter()
// Add Assets
//fs := http.FileServer(http.Dir("assets"))
2022-07-28 15:00:43 +00:00
//r.PathPrefix("/assets/").Handler(http.StripPrefix("/assets/", fs))
r.PathPrefix("/tmp/generated/").Handler(http.StripPrefix("/tmp/generated/",
http.FileServer(http.Dir("tmp/generated"))))
r.PathPrefix("/tmp/downloaded/").Handler(http.StripPrefix("/tmp/downloaded/",
http.FileServer(http.Dir("tmp/downloaded"))))
2022-07-28 15:00:43 +00:00
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
r.PathPrefix("/static/examples/docx/").Handler(http.StripPrefix("/static/examples/docx/",
http.FileServer(http.Dir("/static/examples/docx/"))))
//# region ====== HANDLERS ======
2022-07-28 15:00:43 +00:00
r.NotFoundHandler = http.HandlerFunc(h.PageNotFound)
2022-08-10 13:53:34 +00:00
r.HandleFunc("/amo", h.AmoSaveToken)
r.HandleFunc("/amo/state", h.AmoState)
r.HandleFunc("/amo/access_rules", h.AmoAccessRules)
// Set rules for Amo end-points
amoAccess := map[string]string{
"/amo/webhook": "visibility",
"/amo/generateDoc": "creation",
}
2022-07-28 15:00:43 +00:00
r.HandleFunc("/yadisk", h.YaDiskSaveToken)
r.HandleFunc("/yadisk/setSettings", h.YaDiskSetSettings)
r.HandleFunc("/yadisk/getList", h.YaDiskGetList)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/yadisk/resources/get", h.YaDiskGetResources)
r.HandleFunc("/yadisk/resources/put", h.YaDiskPutResources)
r.HandleFunc("/yadisk/resources/delete", h.YaDiskDeleteResources)
r.HandleFunc("/yadisk/resources/upload", h.YaDiskUploadResources)
r.HandleFunc("/yadisk/resources/downloadlink", h.YaDiskDownloadLink)
2022-12-16 21:44:45 +00:00
r.HandleFunc("/yadisk/resources/download", h.YaDiskDownload)
r.HandleFunc("/gdisk/getTemplateDir", h.GDiskGetDirTemplate) // устарело?
r.HandleFunc("/gdisk", h.GDiskSaveToken)
r.HandleFunc("/gdisk/setSettings", h.GDiskSetSettings)
2022-09-15 14:39:16 +00:00
r.HandleFunc("/gdisk/getList", h.GDiskGetList)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/gdisk/resources/get", h.GDiskGetResources)
r.HandleFunc("/gdisk/resources/put", h.GDiskPutResources)
r.HandleFunc("/gdisk/resources/delete", h.GDiskDeleteResources)
r.HandleFunc("/gdisk/resources/upload", h.GDiskUploadResources)
r.HandleFunc("/penadisk/setSettings", h.PenaDiskSetSettings)
r.HandleFunc("/penadisk/resources/get", h.PenaDiskGetResources)
r.HandleFunc("/penadisk/resources/put", h.PenaDiskPutResources)
r.HandleFunc("/penadisk/resources/delete", h.PenaDiskDeleteResources)
r.HandleFunc("/penadisk/resources/upload", h.PenaDiskUploadResources)
2023-04-18 12:56:05 +00:00
r.HandleFunc("/penadisk/resources/downloadlink", h.PenaDiskDownloadLink)
r.HandleFunc("/template/set", h.TemplateSet)
r.HandleFunc("/template/get", h.TemplateGet)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/template/getListByUser", h.TemplateGetListByUser)
r.HandleFunc("/template/getListByGroup", h.TemplateGetListByGroup)
2022-07-28 15:00:43 +00:00
r.HandleFunc("/template/update", h.TemplateUpdate)
r.HandleFunc("/template/delete", h.TemplateDelete)
2022-11-19 13:24:30 +00:00
r.HandleFunc("/template/init", h.TemplateInit) // устарело
2022-07-28 15:00:43 +00:00
r.HandleFunc("/group/create", h.TemplateGroupCreate)
r.HandleFunc("/group/getList", h.TemplateGroupGetList)
r.HandleFunc("/group/edit", h.TemplateGroupEdit)
r.HandleFunc("/group/put", h.TemplateGroupPut)
r.HandleFunc("/group/remove", h.TemplateGroupRemove)
r.HandleFunc("/group/delete", h.TemplateGroupDelete)
r.HandleFunc("/group/{id}", h.TemplateGroupGet)
r.HandleFunc("/generator/byAmoLead", h.GeneratorByAmoLead)
r.HandleFunc("/generator/byData", h.GeneratorByData)
r.HandleFunc("/generator/byTemplate", h.GeneratorByData)
r.HandleFunc("/generator/byAmoWebhook", h.GeneratorByAmoWebhook)
r.HandleFunc("/generator/byamowebhook", h.GeneratorByAmoWebhook)
2022-12-19 12:01:38 +00:00
r.HandleFunc("/history/get", h.GetHistoryByID)
2023-01-13 13:31:06 +00:00
//r.HandleFunc("/history/getListByFilter", h.GetHistoryListByFilter)
//r.HandleFunc("/history/getlistbyfilter", h.GetHistoryListByFilter)
r.HandleFunc("/history/getList", h.GetHistoryList)
r.HandleFunc("/history/getlist", h.GetHistoryList)
2022-12-19 12:01:38 +00:00
//#endregion
2022-07-28 15:00:43 +00:00
// Middlewares
mw := middleware.InitMiddleware(mongoDal, amoApp, logger, amoAccess)
2022-07-28 15:00:43 +00:00
r.Use(
2022-08-10 13:53:34 +00:00
mw.MiddlewareHeaders,
mw.MiddlewareCors,
mw.MiddlewareAmoJwt,
2023-04-29 22:55:33 +00:00
//mw.MiddlewareJwt,
//mw.MiddlewareAmoPlug,
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
fullCert := fmt.Sprintf("./static/cert/%v/fullchain.pem", opts.Domain)
privCert := fmt.Sprintf("./static/cert/%v/privkey.pem", opts.Domain)
2022-07-28 15:00:43 +00:00
go func() {
err := srv.ListenAndServeTLS(fullCert, privCert)
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()
}
func GetOpts() Env {
return getEnv(Env{})
}