25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
4.9KB

  1. import flask_login
  2. import yaml
  3. from flask import json, url_for, Response
  4. from flask_classy import FlaskView, route
  5. from flask_login import login_required, current_user
  6. from git import Repo, Git
  7. from modules.core.core import cbpi
  8. import pprint
  9. import time
  10. from modules.login import User
  11. class SystemView(FlaskView):
  12. def doShutdown(self):
  13. time.sleep(5)
  14. from subprocess import call
  15. call("halt")
  16. @login_required
  17. @route('/shutdown', methods=['POST'])
  18. def shutdown(self):
  19. """
  20. System Shutdown
  21. ---
  22. tags:
  23. - system
  24. responses:
  25. 200:
  26. description: Shutdown triggered
  27. """
  28. self.doShutdown()
  29. return ('', 204)
  30. def doReboot(self):
  31. time.sleep(5)
  32. from subprocess import call
  33. call("reboot")
  34. @login_required
  35. @route('/reboot', methods=['POST'])
  36. def reboot(self):
  37. """
  38. System Reboot
  39. ---
  40. tags:
  41. - system
  42. responses:
  43. 200:
  44. description: Reboot triggered
  45. """
  46. self.doReboot()
  47. return ('', 204)
  48. @login_required
  49. @route('/tags/<name>', methods=['GET'])
  50. def checkout_tag(self,name):
  51. repo = Repo('./')
  52. repo.git.reset('--hard')
  53. o = repo.remotes.origin
  54. o.fetch()
  55. g = Git('./')
  56. g.checkout(name)
  57. cbpi.notify("Checkout successful", "Please restart the system")
  58. return ('', 204)
  59. @login_required
  60. @route('/git/status', methods=['GET'])
  61. def git_status(self):
  62. """
  63. Check for GIT status
  64. ---
  65. tags:
  66. - system
  67. responses:
  68. 200:
  69. description: Git Status
  70. """
  71. repo = Repo('./')
  72. o = repo.remotes.origin
  73. o.fetch()
  74. # Tags
  75. tags = []
  76. for t in repo.tags:
  77. tags.append({"name": t.name, "commit": str(t.commit), "date": t.commit.committed_date,
  78. "committer": t.commit.committer.name, "message": t.commit.message})
  79. try:
  80. branch_name = repo.active_branch.name
  81. # test1
  82. except:
  83. branch_name = None
  84. changes = []
  85. commits_behind = repo.iter_commits('master..origin/master')
  86. for c in list(commits_behind):
  87. changes.append({"committer": c.committer.name, "message": c.message})
  88. return json.dumps({"tags": tags, "headcommit": str(repo.head.commit), "branchname": branch_name,
  89. "master": {"changes": changes}})
  90. @login_required
  91. @route('/check_update', methods=['GET'])
  92. def check_update(self):
  93. """
  94. Check for GIT update
  95. ---
  96. tags:
  97. - system
  98. responses:
  99. 200:
  100. description: Git Changes
  101. """
  102. repo = Repo('./')
  103. o = repo.remotes.origin
  104. o.fetch()
  105. changes = []
  106. commits_behind = repo.iter_commits('master..origin/master')
  107. for c in list(commits_behind):
  108. changes.append({"committer": c.committer.name, "message": c.message})
  109. return json.dumps(changes)
  110. @login_required
  111. @route('/git/pull', methods=['POST'])
  112. def update(self):
  113. """
  114. System Update
  115. ---
  116. tags:
  117. - system
  118. responses:
  119. 200:
  120. description: Git Pull Triggered
  121. """
  122. repo = Repo('./')
  123. o = repo.remotes.origin
  124. info = o.pull()
  125. cbpi.notify("Pull successful", "The lasted updated was downloaded. Please restart the system")
  126. return ('', 204)
  127. @route('/connect', methods=['GET'])
  128. def connect(self):
  129. """
  130. Connect
  131. ---
  132. tags:
  133. - system
  134. responses:
  135. 200:
  136. description: CraftBeerPi System Cache
  137. """
  138. if cbpi.get_config_parameter("password_security", "NO") == "NO":
  139. user = User()
  140. user.id = "craftbeerpi"
  141. flask_login.login_user(user)
  142. if self.api.get_config_parameter("setup", "YES") == "YES":
  143. return json.dumps(dict(setup=True, loggedin= current_user.is_authenticated ))
  144. else:
  145. return json.dumps(dict(setup=False, loggedin= current_user.is_authenticated))
  146. @login_required
  147. @route('/dump', methods=['GET'])
  148. def dump(self):
  149. """
  150. Dump Cache
  151. ---
  152. tags:
  153. - system
  154. responses:
  155. 200:
  156. description: CraftBeerPi System Cache
  157. """
  158. return Response(response=json.dumps(cbpi.cache, sort_keys=True, indent=4), status=200, mimetype='application/json')
  159. @cbpi.addon.core.initializer()
  160. def init(cbpi):
  161. SystemView.api = cbpi
  162. SystemView.register(cbpi._app, route_base='/api/system')