Advertisement
jsprieto10

Flask service to authenticate user of mqtt with auth_plugin

Nov 5th, 2017
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.18 KB | None | 0 0
  1. """
  2. En node red debe el nodo de mqtt que publica debe autenticarse con el nombre "microcontrolador" y clave "Isis2503"
  3. el nodo que se subscribe debe tener como nombre de usuario "subscriptor" y su clave es "4321" con este usuario solo
  4. se puede leer no puede publicar
  5. """
  6.  
  7.  
  8.  
  9. import base64
  10. import hashlib
  11. import redis
  12. from flask import Flask, Response, request
  13.  
  14. app = Flask(__name__)
  15. r = redis.Redis()
  16. hexa = hashlib.md5(b'Isis2503.').hexdigest()
  17. claveS = hashlib.md5(b'4321').hexdigest()
  18. claveP = hashlib.md5(b'1234').hexdigest()
  19. r.set('microcontrolador', hexa)
  20. r.set('subscriptor', claveS)
  21. r.set('publicador', claveP)
  22. puede = True
  23.  
  24. @app.route('/auth', methods=['POST'])
  25. def auth():
  26.     response = Response(content_type='text/plain', status=403)
  27.  
  28.     try:
  29.       auth = request.headers.get('Authorization')
  30.       token = auth.split(' ')[1]
  31.       data = base64.b64decode(token).decode("utf-8").split(':')
  32.       username = data[0]
  33.       password = bytes(data[1], 'utf-8')
  34.       print(password)
  35.       hexdi = hashlib.md5(password).hexdigest()
  36.       if r.get(username).decode("utf-8") == hexdi:
  37.           response.status_code = 200
  38.     except:
  39.       pass
  40.     return response
  41.  
  42. @app.route('/superuser', methods=['POST'])
  43. def superuser():
  44.     response =  Response(content_type='text/plain', status=403)
  45.     try:
  46.       auth = request.headers.get('Authorization')
  47.       token = auth.split(' ')[1]
  48.       data = base64.b64decode(token).decode("utf-8").split(':')
  49.       username = data[0]
  50.       # password = data[1]
  51.       if username == 'microcontrolador': #  and password == '13579':
  52.           response.status_code = 200
  53.     except:
  54.       pass
  55.     return response
  56.  
  57. @app.route('/acl', methods=['POST'])
  58. def acl():
  59.     response =  Response(content_type='text/plain', status=403)
  60.     try:
  61.       auth = request.headers.get('Authorization')
  62.       acc = request.form.get('acc')
  63.       token = auth.split(' ')[1]
  64.       data = base64.b64decode(token).decode("utf-8").split(':')
  65.       username = data[0]
  66.       if username == 'subscriptor' and int(acc) == 1:
  67.          response.status_code = 200
  68.     except:
  69.       pass
  70.     return response
  71.  
  72. if __name__ == '__main__':
  73.     app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement