general.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-03-25 11:15:01
  6. :author: wushuiyong@walle-web.io
  7. """
  8. import os
  9. import platform
  10. from flask import abort
  11. from git import Repo
  12. from walle.api.api import SecurityResource
  13. from walle.model.menu import MenuModel
  14. from walle.model.record import RecordModel
  15. from walle.model.user import UserModel
  16. from walle.service import emails
  17. from walle.service.deployer import Deployer
  18. from walle.service.extensions import permission
  19. from walle.service.rbac.role import *
  20. class GeneralAPI(SecurityResource):
  21. actions = ['menu', 'websocket', 'info']
  22. # TODO 更细致的检查
  23. @permission.upper_reporter
  24. def get(self, action):
  25. """
  26. fetch role list or one role
  27. :return:
  28. """
  29. if action in self.actions:
  30. self_action = getattr(self, action.lower(), None)
  31. return self_action()
  32. else:
  33. abort(404)
  34. def post(self, action):
  35. """
  36. fetch role list or one role
  37. :return:
  38. """
  39. if action == 'avatar':
  40. return self.avater()
  41. def menu(self):
  42. role = SUPER if current_user.role == SUPER else ROLE_ACCESS[session['space_info']['role']]
  43. user = UserModel(id=current_user.id).item()
  44. menu = MenuModel().menu(role=role)
  45. space = {
  46. 'current': '',
  47. 'available': '',
  48. }
  49. UserModel.fresh_session()
  50. # TODO
  51. # 超管不需要展示空间列表
  52. if current_user.role != SUPER:
  53. space = {
  54. 'current': session['space_info'],
  55. 'available': session['space_list'],
  56. }
  57. data = {
  58. 'user': user,
  59. 'menu': menu,
  60. 'space': space,
  61. }
  62. return self.render_json(data=data)
  63. def mail(self):
  64. ret = emails.send_email('wushuiyong@renrenche.com', 'email from service@walle-web.io', 'xxxxxxx', 'yyyyyyy')
  65. return self.render_json(data={
  66. 'avatar': 'emails.send_email',
  67. 'done': ret,
  68. })
  69. def websocket(self, task_id=None):
  70. task_id = 12
  71. wi = Deployer(task_id)
  72. ret = wi.walle_deploy()
  73. record = RecordModel().fetch(task_id)
  74. return self.render_json(data={
  75. 'command': ret,
  76. 'record': record,
  77. })
  78. def info(self):
  79. try:
  80. repo = Repo(current_app.config.get('PROJECT_ROOT'))
  81. branch = str(repo.active_branch)
  82. heads = os.path.join(current_app.config.get('PROJECT_ROOT'), '.git/refs/heads/', branch)
  83. commit = ''
  84. with open(heads) as f:
  85. commit = f.read().strip()[0:8]
  86. except Exception as e:
  87. branch, commit = '获取不到git信息', '获取不到git信息'
  88. return self.render_json(data={
  89. 'version': current_app.config.get('VERSION'),
  90. 'branch': branch,
  91. 'commit': commit,
  92. 'server': platform.platform(),
  93. 'python': platform.python_version(),
  94. 'error': '',
  95. })