原理

  • osroom系统提供部分功能的hook, 供插件开发使用.

目录结构

  1. - plugin_test # 为你的插件名称, 可自定义
  2. | - main.py # 调用主程序
  3. | - config.py # 插件配置
  4. | - conf.yaml # 插件安装配置,比如名称之类的
  5. | - README.md # 说明

conf.yaml

conf.yaml示范

  1. # 插件名称必须和主目录名称一致
  2. alias_name: plugin_test
  3. author: Allen Woo
  4. author_uri: www.xxx.com/plugin
  5. plugin_uri: www.xxx.com/plugin
  6. introduce: 这里是简单介绍.
  7. version: v0.1
  8. license: BSD-3
  9. hook_name: file_storage
  10. startup_file_name: main.py
  11. execution_func_name: main

config.py

config.py示范

mian.py

  1. # -*-coding:utf-8-*-
  2. # 导入插件里的其他程序方法
  3. from apps.core.plug_in.config_process import import_plugin_config, get_plugin_config
  4. from apps.plugins.plugin_test.upfile_cloud import fun_test
  5. from apps.plugins.plugin_test.config import CONFIG, PLUGIN_NAME
  6. '''
  7. osroom提供了插件设置导入函数
  8. import_plugin_config(<plugin name>, <config:dict>)
  9. 可以用于把插件的一些设置导入到osroom系统保存, 方便调用.
  10. 比如密码之类数据.
  11. 之后可以调用get_plugin_config(<plugin name>, <str>)获取导入的dict数据中
  12. '''
  13. # 导入插件的设置
  14. import_plugin_config(PLUGIN_NAME, CONFIG)
  15. # 调用插件插件的设置
  16. get_plugin_config(PLUGIN_NAME, "TEST1")
  17. def main(**kwargs):
  18. '''
  19. 主函数
  20. :param kwargs:
  21. :return:
  22. '''
  23. # 这里可以调用其他程序方法来完成工作...
  24. ...
  25. # 最后返回结果
  26. return data

实例参考

hook

目前osroom提供以下hook

file_storage文件存储

主要用于接入第三方图床/文集储存, 如aliyun oss, 七牛云存储. 解决集群部署图片等文件保存问题.

  1. 1.上传
  2. 插件接受参数:
  3. action"upload"
  4. localfile_path:<str> 服务器本地文件路径
  5. filename <str>,要保存的文件名
  6. prefix:<str>,要保存的文件名前缀
  7. 返回结果格式:
  8. 如{"type":"aliyun_oss", "bucket_name":"demo_osr"}
  9. 2. 复制文件
  10. 插件接受参数:
  11. action"copy_file"
  12. file_url_obj:<dict> 在使用插件上传时, 插件返回的结果dict
  13. new_filename:<str>, 新文件名
  14. 返回结果格式:
  15. 复制的副本文件的{type:"<你的储存平台名>", ...其他需要保存的信息}
  16. 3.删除文件
  17. 插件接收参数:
  18. action"delete"
  19. file_url_obj:<dict> 在使用插件上传或复制时, 插件返回的结果dict
  20. 返回的结果格式:
  21. bool值, 删除成功:True 删除失败False
  22. 4.重命名
  23. 插件接收参数:
  24. action"rename"
  25. file_url_obj:<dict> 在使用插件上传或复制时, 插件返回的结果dict
  26. new_filename:<str>, 新名称
  27. 返回的结果格式:
  28. bool值, 删除成功:True 删除失败False
  29. 5. 获取文件url
  30. 插件接收参数:
  31. action"get_file_url"
  32. file_url_obj:<dict> 在使用插件上传或复制时, 插件返回的结果dict
  33. 返回的结果格式:
  34. 成功:return url
  35. 失败:return None

短信发送send_msg

发送短信

邮件send_email

  1. hooknamesend_email
  2. 1.邮件发送
  3. 插件接受参数:
  4. msg:<dict> , 字典类型, 里面包含如下数据:
  5. {
  6. "subject": <subject>,
  7. "recipients": <list:[email, email]>
  8. }
  9. send_independently:<bool> 如果为Ture,给每个收件人独立发送, 不一次性发送给多个,导致收件人邮件中可以看到此邮件发送给了多少人,
  10. html:<str> html格式邮件
  11. text:<str> text格式邮件
  12. attach : <str> 附件文件路径
  13. 需要返回的结果格式:
  14. bool值, 成功:True 失败False

内容安全检测

用于检测内容安全, 比如鉴定文本, 图片等文件敏感信息.

  1. 1. 文本安全鉴定
  2. hookname: content_inspection_text
  3. 插件接受参数:
  4. 需要返回的结果格式:
  5. dict: {"lable":"<鉴定结果的类型>", "score":<int or float>}
  6. score范围是1100分,违规越可疑,分值越高. 如果无法判断是否正常或违规,那就返回
  7. 2. 图片安全鉴定
  8. hookname: content_inspection_image
  9. 插件接受参数:
  10. url:<str>, 可获取的图片url
  11. 需要返回的结果格式:
  12. dict: {"lable":"<鉴定结果的类型>", "score":<int or float>}
  13. score范围是1100分,违规越可疑,分值越高. 如果无法判断是否正常或违规,那就返回
  14. {"suggestion”:"review", "lable":"<鉴定结果的类型>", score":0}
  15. 2. 视频安全鉴定
  16. hookname: content_inspection_video
  17. 插件接受参数:
  18. url:<str>, 可获取的视频url
  19. 需要返回的结果格式:
  20. dict: {"lable":"<鉴定结果的类型>", "score":<int or float>}
  21. score范围是1100分,违规越可疑,分值越高. 如果无法判断是否正常或违规,那就返回
  22. {"suggestion”:"review", "lable":"<鉴定结果的类型>", score":0}
  23. 2. 音频安全鉴定
  24. hookname: content_inspection_audio
  25. 插件接受参数:
  26. url:<str>, 可获取的音频url
  27. 需要返回的结果格式:
  28. dict: {"lable":"<鉴定结果的类型>", "score":<int or float>}
  29. score范围是1100分,违规越可疑,分值越高. 如果无法判断是否正常或违规,那就返回
  30. {"suggestion”:"review", "lable":"<鉴定结果的类型>", score":0}

ip geo

根据IP获取geo(地理位置), osroom中用于鉴定用户登录地区, 识别用户登录是否异常等功能中

第三方登录

  1. hookname: wechat_login
  2. hookname: qq_login
  3. hookname: github_login
  4. hookname: sina_weibo_login
  5. hookname: alipay_login
  6. hookname: facebook_login
  7. hookname: twitter_login
  8. 插件接受参数:
  9. request_argget_all:<obj>, 一个获取第三方平台登录验证后,回调osroom系统url时传过来的数据.
  10. 登录回调地址:
  11. http://youdomain/open-api/sign-in/third-party/<platform>/callback
  12. 比如:微信登录可以这样回调:/open-api/sign-in/third-party/wechat/callback
  13. 第三方平台回调地址后, 系统会根据地址执行相关的登录插件
  14. 如:/open-api/sign-in/third-party/wechat/callback 则执行wechat登录插件
  15. request_argget_all使用:
  16. 在插件中可以使用osroom传入的request_argget_all对象获取登录回调地址参数
  17. 使用方式: request_argget.all("unionid"), 获取用户唯一标识
  18. 插件需要返回结果格式:
  19. {
  20. "unionid":<用户唯一标示> # 必须返回
  21. "nickname": <用户昵称>,
  22. "gender" :<性别>, # 只能是 "secret", "m", "f"中的一个,分别代表保密, 男, 女
  23. "email" :<email>,
  24. "avatar_url":<头像地址>,
  25. "province" :<地址区>,
  26. "city": <地址城市>,
  27. "country":<地址国家>
  28. }