274 lines
6.2 KiB
Go
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) {
|
|
|
|
}
|