general.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. from flask import request, abort, session, current_app
  10. from flask_login import current_user, login_required
  11. from walle.api.api import SecurityResource
  12. from walle.model.record import RecordModel
  13. from walle.model.menu import MenuModel
  14. from walle.model.user import UserModel
  15. from walle.service import emails
  16. from walle.service.deployer import Deployer
  17. from walle.service.rbac.role import *
  18. from werkzeug.utils import secure_filename
  19. from walle.service.extensions import permission
  20. class GeneralAPI(SecurityResource):
  21. actions = ['menu', 'websocket']
  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. # TODO
  50. # 超管不需要展示空间列表
  51. if current_user.role != SUPER:
  52. space = {
  53. 'current': session['space_info'],
  54. 'available': session['space_list'],
  55. }
  56. data = {
  57. 'user': user,
  58. 'menu': menu,
  59. 'space': space,
  60. }
  61. return self.render_json(data=data)
  62. def mail(self):
  63. ret = emails.send_email('wushuiyong@renrenche.com', 'email from service@walle-web.io', 'xxxxxxx', 'yyyyyyy')
  64. return self.render_json(data={
  65. 'avatar': 'emails.send_email',
  66. 'done': ret,
  67. })
  68. def websocket(self, task_id=None):
  69. task_id = 12
  70. wi = Deployer(task_id)
  71. ret = wi.walle_deploy()
  72. record = RecordModel().fetch(task_id)
  73. return self.render_json(data={
  74. 'command': ret,
  75. 'record': record,
  76. })