Go
iris二开onlyoffice
iris生成token并处理回调
上一篇跟大家分享了docker如何部署onlyoffice并开启jwt,今天跟大家分享iris如何生成前端需要的token以及处理onlyoffice回调。
一、生成token
我们先新建一个生成token的方法,可以外部调用,包名命名为onlyoffice,代码如下
package onlyoffice
import (
"errors"
"encoding/json"
jwt "github.com/golang-jwt/jwt/v4"
"aiblog/config"
)
/**
onlyoffice
*/
// 生成token
func OnlyofficeCreateToken(payload string) (string, error) {
// 获取配置
secret := config.Instance.Onlyoffice.JwtSecret
// 将原始字符串作为MapClaims负载
var claims jwt.MapClaims
if err := json.Unmarshal([]byte(payload), &claims); err != nil {
return "", errors.New("could not parse JSON payload")
}
// 创建JWT签名方法
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
// 使用密钥签署JWT
ss, err := token.SignedString([]byte(secret))
if err != nil {
return "", errors.New("could not generate a new jwt")
}
// 返回
return ss, nil
}然后我们直接在控制器写一个方法,将用户传过来的config生成token,代码如下
type OnlyofficeController struct {
Ctx iris.Context
}
type tokenResponse struct {
Token string `json:"token"`
}
/**
生成token
*/
func (c *OnlyofficeController) PostCreateToken() *web.JsonResult {
// 获取配置
config := params.FormValue(c.Ctx, "config")
if config == "" {
return web.JsonErrorMsg("请输入配置")
}
// 获取token
token, err := onlyoffice.OnlyofficeCreateToken(config)
if err != nil {
return web.JsonErrorMsg("创建失败")
}
//返回
return web.JsonData(&tokenResponse{token})
}我们将前端传过来的config生成token之后,再通过token返回给前端,这里的config内容就是前端请求onlyoffice的配置参数。
二、处理回调
我们回调需要返回{"error": 0},不然在onlyoffice编辑的时候会提示这个报错
The document could not be saved. Please check connection settings or contact your administrator.
下面直接贴出代码
/**
回调函数
*/
func (c *OnlyofficeController) PostCallBack() {
//打印接受内容
body, err := io.ReadAll(c.Ctx.Request().Body)
if err != nil {
logrus.Error("Onlyoffice通知参数错误:", err)
c.Ctx.JSON(iris.Map{"error": 1, "message": "获取参数失败"})
return
}
//记录数据
logrus.Info("Onlyoffice通知参数:", string(body))
//初始化结构体
var onlyOfficeResult onlyoffice.OnlyOffice
// 解析 JSON 数据到结构体
err = json.Unmarshal(body, &onlyOfficeResult)
if err != nil {
c.Ctx.JSON(iris.Map{"error": 1, "message": "转化结构失败"})
return
}
// 判断是否是编辑完成的
if onlyOfficeResult.Status != 2 {
c.Ctx.JSON(iris.Map{"error": 0, "message": "未编辑完成,不处理"})
return
}
// 判断是否存在标识
if onlyOfficeResult.Key == "" {
c.Ctx.JSON(iris.Map{"error": 1, "message": "标识不存在,不处理"})
return
}
// 判断是否存在链接
if onlyOfficeResult.URL == "" {
c.Ctx.JSON(iris.Map{"error": 1, "message": "链接不存在,不处理"})
return
}
//保存修改后文件
//这里填写自己处理的逻辑
//返回
c.Ctx.JSON(iris.Map{"error": 0})
}上面我只是贴出接收跟返回的代码,中间的处理逻辑代码我是没放出来,大家根据自己的实际需求进行开发。
0条评论