docxTemplater/handlers/gdisk.go
Danil Solovyov f0b557a895 Some changes:
- gdrive.MakeDefaultDirs()
- getEnv
2022-08-12 01:32:10 +05:00

274 lines
6.2 KiB
Go

package handlers
import (
"amocrm_templategen_back/dal/model"
"errors"
"github.com/gorilla/schema"
"go.uber.org/zap"
"google.golang.org/api/drive/v3"
"net/http"
)
type RespGDiskSaveToken struct {
State string
Code string
Scope string
}
// GDiskSaveToken - сохраняет токен авторизации
func (h *Handlers) GDiskSaveToken(w http.ResponseWriter, r *http.Request) {
var resp RespGDiskSaveToken
err := r.ParseForm()
if err != nil {
h.reportError(w, err, http.StatusBadRequest)
return
}
err = schema.NewDecoder().Decode(&resp, r.Form)
if err != nil {
h.reportError(w, err, 500)
return
}
// get user
user := getJwtUser(r)
if user == nil {
h.reportError(w, ErrorUnauthorized, http.StatusUnauthorized)
return
}
// generate token
token, err := h.GDisk.GetToken(r.Context(), resp.Code)
if err != nil {
h.reportError(w, err, 500)
return
}
gDisk, err := h.GDisk.NewClient(r.Context(), token)
if err != nil {
h.logger.Error("ErrorHandler", zap.Error(err))
}
// Make default directories in Google Drive
gDiskData, err := h.dal.GDisk.GetByUserID(r.Context(), user.UserID)
var templateId, saveId string
if gDiskData != nil {
templateId = gDiskData.TemplateFolderID
saveId = gDiskData.SaveFolderID
}
templateId, saveId, err = gDisk.MakeDefaultDirs(templateId, saveId)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
//
//// Check folders: Basic Folder
//fileList, err := gDisk.GetResourceByName("templategen", "")
//if err != nil {
// h.logger.Error("ErrorHandler", zap.Error(err))
//}
//
//var basicFolder, templateFolder, saveFolder *drive.File
//if fileList == nil {
// basicFolder, err = gDisk.PutResources("templategen", "")
// if err != nil {
// h.logger.Error("ErrorHandler", zap.Error(err))
// }
//
//} else {
// basicFolder = fileList[0]
//}
//
//// Check folders: Template Folder
//fileList, err = gDisk.GetResourceByName("templates", basicFolder.Id)
//if err != nil {
// h.logger.Error("ErrorHandler", zap.Error(err))
//}
//
//if fileList == nil {
// templateFolder, err = gDisk.PutResources("templates", basicFolder.Id)
// if err != nil {
// h.logger.Error("ErrorHandler", zap.Error(err))
// }
//} else {
// templateFolder = fileList[0]
//}
//
//// Check folders: Save Folder
//
//fileList, err = gDisk.GetResourceByName("saved", basicFolder.Id)
//if err != nil {
// h.logger.Error("ErrorHandler", zap.Error(err))
//}
//
//if fileList == nil {
// saveFolder, err = gDisk.PutResources("saved", basicFolder.Id)
// if err != nil {
// h.logger.Error("ErrorHandler", zap.Error(err))
// }
//} else {
// saveFolder = fileList[0]
//}
// Insert/Update token in DB
_, err = h.dal.GDisk.InsertOrUpdate(r.Context(), &model.GDisk{
UserID: user.UserID,
AccessToken: token.AccessToken,
RefreshToken: token.RefreshToken,
ExpiresIn: token.Expiry,
TokenType: token.TokenType,
TemplateFolder: "templategen/templates",
TemplateFolderID: templateId,
SaveFolder: "templategen/saved",
SaveFolderID: saveId,
})
if err != nil {
h.reportError(w, err, 500)
return
}
}
func (h *Handlers) GDiskGetFile(w http.ResponseWriter, r *http.Request) {
}
type RespGDiskGetDirInfo struct {
ID string
Name string
ParentID string
}
// GDiskGetDirInfo - возвращает данные по папке, включая список её файлов и папок
func (h *Handlers) GDiskGetDirInfo(w http.ResponseWriter, r *http.Request) {
var resp RespGDiskGetDirInfo
err := decodePost(&resp, r)
if err != nil {
h.reportError(w, err, http.StatusBadRequest)
return
}
if resp.ID == "" && resp.Name == "" {
h.reportError(w, err, http.StatusBadRequest)
return
}
amoData := getAmoByJwt(r)
user := getJwtUser(r)
if amoData == nil && user == nil {
h.reportError(w, errors.New("amo account not found"), http.StatusUnauthorized)
return
}
var userId string
if amoData != nil {
userId = amoData.UserID
} else {
userId = user.UserID
}
gdiskInfo, err := h.dal.GDisk.GetByUserID(r.Context(), userId)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
if gdiskInfo == nil {
h.reportError(w, errors.New("gdisk info not found"), http.StatusForbidden)
return
}
if gdiskInfo.Token() == nil {
h.reportError(w, errors.New("google token invalid"), http.StatusForbidden)
return
}
client, err := h.GDisk.NewClient(r.Context(), gdiskInfo.Token())
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
var res []*drive.File
if resp.Name != "" {
res, err = client.GetResourceByName(resp.Name, resp.ParentID)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
}
dir, err := client.GetResources(res[0].Id)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
sendResponse(w, 200, dir)
}
// GDiskGetDirTemplate - возвращает данные по папке, включая список её файлов и папок
func (h *Handlers) GDiskGetDirTemplate(w http.ResponseWriter, r *http.Request) {
amoData := getAmoByJwt(r)
user := getJwtUser(r)
if amoData == nil && user == nil {
h.reportError(w, errors.New("amo account not found"), http.StatusUnauthorized)
return
}
var userId string
if amoData != nil {
userId = amoData.UserID
} else {
userId = user.UserID
}
gdiskInfo, err := h.dal.GDisk.GetByUserID(r.Context(), userId)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
if gdiskInfo == nil {
h.reportError(w, errors.New("gdisk info not found"), http.StatusForbidden)
return
}
if gdiskInfo.Token() == nil {
h.reportError(w, errors.New("google token invalid"), http.StatusForbidden)
return
}
client, err := h.GDisk.NewClient(r.Context(), gdiskInfo.Token())
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
dir, err := client.GetResources(gdiskInfo.TemplateFolderID)
if err != nil {
h.reportError(w, err, http.StatusInternalServerError)
return
}
sendResponse(w, 200, dir)
}
func (h *Handlers) GDiskMkDir(w http.ResponseWriter, r *http.Request) {
}
func (h *Handlers) GDiskDelDir(w http.ResponseWriter, r *http.Request) {
}