Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

194 wiersze
4.8KB

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