mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2025-02-16 14:24:29 +00:00
Added SSH disable option. Added user addition feature. Rewritten user deletion logic
This commit is contained in:
parent
1ceda086f5
commit
d2716f5816
52
main.py
52
main.py
|
@ -1,18 +1,26 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from flask import Flask, jsonify, request, json
|
from flask import Flask, jsonify, request, json
|
||||||
from flask_restful import Resource, Api, reqparse
|
from flask_restful import Resource, Api, reqparse
|
||||||
|
from flask_socketio import SocketIO
|
||||||
import base64
|
import base64
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import ast
|
import ast
|
||||||
import subprocess
|
import subprocess
|
||||||
import os
|
import os
|
||||||
import fileinput
|
import fileinput
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
api = Api(app)
|
api = Api(app)
|
||||||
|
socketio = SocketIO(app)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/systemVersion", methods=["GET"])
|
@app.route("/systemVersion", methods=["GET"])
|
||||||
def uname():
|
def uname():
|
||||||
uname = subprocess.check_output(["uname", "-arm"])
|
uname = subprocess.check_output(["uname", "-arm"])
|
||||||
return jsonify(uname)
|
return jsonify(uname)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/getDKIM", methods=["GET"])
|
@app.route("/getDKIM", methods=["GET"])
|
||||||
def getDkimKey():
|
def getDkimKey():
|
||||||
with open("/var/domain") as domainFile:
|
with open("/var/domain") as domainFile:
|
||||||
|
@ -29,31 +37,42 @@ def getDkimKey():
|
||||||
mimetype='application/json'
|
mimetype='application/json'
|
||||||
)
|
)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
@app.route("/pythonVersion", methods=["GET"])
|
@app.route("/pythonVersion", methods=["GET"])
|
||||||
def getPythonVersion():
|
def getPythonVersion():
|
||||||
pythonVersion = subprocess.check_output(["python","--version"])
|
pythonVersion = subprocess.check_output(["python","--version"])
|
||||||
return jsonify(pythonVersion)
|
return jsonify(pythonVersion)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/apply", methods=["GET"])
|
@app.route("/apply", methods=["GET"])
|
||||||
def rebuildSystem():
|
def rebuildSystem():
|
||||||
rebuildResult = subprocess.Popen(["nixos-rebuild","switch"])
|
rebuildResult = subprocess.Popen(["nixos-rebuild","switch"])
|
||||||
rebuildResult.communicate()[0]
|
rebuildResult.communicate()[0]
|
||||||
return jsonify(rebuildResult.returncode)
|
return jsonify(rebuildResult.returncode)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/rollback", methods=["GET"])
|
@app.route("/rollback", methods=["GET"])
|
||||||
def rollbackSystem():
|
def rollbackSystem():
|
||||||
rollbackResult = subprocess.Popen(["nixos-rebuild","switch","--rollback"])
|
rollbackResult = subprocess.Popen(["nixos-rebuild","switch","--rollback"])
|
||||||
rollbackResult.communicate()[0]
|
rollbackResult.communicate()[0]
|
||||||
return jsonify(rollbackResult.returncode)
|
return jsonify(rollbackResult.returncode)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/upgrade", methods=["GET"])
|
@app.route("/upgrade", methods=["GET"])
|
||||||
def upgradeSystem():
|
def upgradeSystem():
|
||||||
upgradeResult = subprocess.Popen(["nixos-rebuild","switch","--upgrade"])
|
upgradeResult = subprocess.Popen(["nixos-rebuild","switch","--upgrade"])
|
||||||
upgradeResult.communicate()[0]
|
upgradeResult.communicate()[0]
|
||||||
return jsonify(upgradeResult.returncode)
|
return jsonify(upgradeResult.returncode)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/createUser", methods=["POST"])
|
@app.route("/createUser", methods=["POST"])
|
||||||
def createUser():
|
def createUser():
|
||||||
readOnlyFileDescriptor = open("users.nix", "r")
|
readOnlyFileDescriptor = open("users.nix", "r")
|
||||||
fileContent = list()
|
fileContent = list()
|
||||||
index = int(0)
|
index = int(0)
|
||||||
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
line = readOnlyFileDescriptor.readline()
|
line = readOnlyFileDescriptor.readline()
|
||||||
|
|
||||||
|
@ -62,30 +81,40 @@ def createUser():
|
||||||
else:
|
else:
|
||||||
fileContent.append(line)
|
fileContent.append(line)
|
||||||
|
|
||||||
|
|
||||||
userTemplate = """
|
userTemplate = """
|
||||||
|
#begin
|
||||||
\"{0}\" = {{
|
\"{0}\" = {{
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
hashedPassword = \"{1}\";
|
hashedPassword = \"{1}\";
|
||||||
}};\n""".format(request.headers.get("X-User"), request.headers.get("X-Password"))
|
}};
|
||||||
|
#end""".format(request.headers.get("X-User"), request.headers.get("X-Password"))
|
||||||
|
|
||||||
|
|
||||||
for line in fileContent:
|
for line in fileContent:
|
||||||
index += 1
|
index += 1
|
||||||
if line.startswith(" #delimiter"):
|
if line.startswith(" #begin"):
|
||||||
fileContent.insert(index, userTemplate)
|
fileContent.insert(index, userTemplate)
|
||||||
|
|
||||||
readWriteFileDescriptor = open("users.nix", "w")
|
readWriteFileDescriptor = open("users.nix", "w")
|
||||||
operationResult = readWriteFileDescriptor.writelines(fileContent)
|
operationResult = readWriteFileDescriptor.writelines(fileContent)
|
||||||
|
|
||||||
|
|
||||||
return jsonify(
|
return jsonify(
|
||||||
result=0
|
result=0,
|
||||||
|
descriptor = operationResult
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/deleteUser", methods=["DELETE"])
|
@app.route("/deleteUser", methods=["DELETE"])
|
||||||
def deleteUser():
|
def deleteUser():
|
||||||
user = subprocess.Popen(["userdel",request.headers.get("X-User")])
|
user = subprocess.Popen(["userdel",request.headers.get("X-User")])
|
||||||
user.communicate()[0]
|
user.communicate()[0]
|
||||||
return jsonify(user.returncode)
|
return jsonify(user.returncode)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/serviceStatus", methods=["GET"])
|
@app.route("/serviceStatus", methods=["GET"])
|
||||||
|
|
||||||
def getServiceStatus():
|
def getServiceStatus():
|
||||||
imapService = subprocess.Popen(["systemctl", "status", "dovecot2.service"])
|
imapService = subprocess.Popen(["systemctl", "status", "dovecot2.service"])
|
||||||
imapService.communicate()[0]
|
imapService.communicate()[0]
|
||||||
|
@ -98,15 +127,23 @@ def getServiceStatus():
|
||||||
smtp=smtpService.returncode,
|
smtp=smtpService.returncode,
|
||||||
http=httpService.returncode
|
http=httpService.returncode
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/decryptDisk", methods=["POST"])
|
@app.route("/decryptDisk", methods=["POST"])
|
||||||
def requestDiskDecryption():
|
def requestDiskDecryption():
|
||||||
decryptionService = subprocess.Popen(["echo", "-n", request.headers['X-Decryption-Key'], "|", "cryptsetup", "luksOpen", "/dev/sdb", "decryptedVar"], stdout=subprocess.PIPE, shell=False)
|
|
||||||
decryptionService.communicate()[0]
|
decryptionCommand = '''
|
||||||
|
echo -n {0} | cryptsetup luksOpen /dev/sdb decryptedVar'''.format(request.headers.get("X-Decryption-Key"))
|
||||||
|
|
||||||
|
decryptionService = subprocess.Popen(decryptionCommand, shell=True, stdout=subprocess.PIPE)
|
||||||
|
decryptionService.communicate()
|
||||||
return jsonify(
|
return jsonify(
|
||||||
status=decryptionService.returncode
|
status=decryptionService.returncode
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/enableSSH", methods=["POST"])
|
@app.route("/enableSSH", methods=["POST"])
|
||||||
|
|
||||||
def enableSSH():
|
def enableSSH():
|
||||||
readOnlyFileDescriptor = open("/etc/nixos/configuration.nix", "rt")
|
readOnlyFileDescriptor = open("/etc/nixos/configuration.nix", "rt")
|
||||||
readWriteFileDescriptor = open("/etc/nixos/configuration.nix", "wt")
|
readWriteFileDescriptor = open("/etc/nixos/configuration.nix", "wt")
|
||||||
|
@ -121,7 +158,6 @@ def enableSSH():
|
||||||
status=0
|
status=0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(port=5050, debug=False)
|
app.run(port=5050, debug=False)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue