chekuser.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from crypt import methods
  2. import subprocess
  3. import sys
  4. import typing as t
  5. import json
  6. from datetime import datetime
  7. from flask import Flask, jsonify, url_for, request, redirect
  8. LISTENING_PORT = int(sys.argv[1])
  9. FORMATO = sys.argv[2]
  10. app = Flask(__name__)
  11. app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
  12. app.config['JSON_SORT_KEYS'] = False
  13. def get_expiry(account):
  14. try:
  15. chage = subprocess.Popen(('chage', '-l', account), stdout=subprocess.PIPE)
  16. grep = subprocess.Popen(('grep', 'Account expires'), stdin=chage.stdout, stdout=subprocess.PIPE)
  17. cut = subprocess.Popen('cut -d : -f2'.split(), stdin=grep.stdout, stdout=subprocess.PIPE)
  18. output = cut.communicate()[0].strip()
  19. output = output.decode("utf-8")
  20. return output if output != 'never' else None
  21. except subprocess.CalledProcessError as e:
  22. return None
  23. def get_format(username):
  24. if FORMATO == '1':
  25. date = datetime.strptime(username, '%b %d, %Y')
  26. format_date = datetime.strftime(date, '%Y%m%d')
  27. return format_date
  28. elif FORMATO == '2':
  29. date = datetime.strptime(username, '%b %d, %Y')
  30. format_date = datetime.strftime(date, '%d%m%Y')
  31. return format_date
  32. @app.route('/checkUser',methods = ['POST', 'GET'])
  33. def check_user():
  34. if request.method == 'POST':
  35. try:
  36. req_data = request.get_json()
  37. user = req_data.get("user")
  38. strDate = get_expiry(user)
  39. x = get_format(strDate)
  40. return x
  41. except Exception as e:
  42. return jsonify({'error': str(e)})
  43. else:
  44. try:
  45. return 'Cannot GET /checkUser'
  46. except Exception as e:
  47. return jsonify({'error': str(e)})
  48. if __name__ == '__main__':
  49. app.run(
  50. host='0.0.0.0',
  51. port=int(sys.argv[1]) if len(sys.argv) > 1 else LISTENING_PORT,
  52. )