57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
import igmirror
|
|
import sys
|
|
import os
|
|
import re
|
|
|
|
class MyServer(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
self.send_response(200)
|
|
self.send_header("Content-type", "application/json")
|
|
self.end_headers()
|
|
# the account is the first part of the URL
|
|
# and the action for the account is the last part
|
|
# example: /shakira/add
|
|
path = self.path.strip('/')
|
|
parts = path.split('/')
|
|
if len(parts) == 1:
|
|
if parts[0] == 'list':
|
|
accounts = os.listdir('./db/accounts')
|
|
for acc in sorted(set(accounts)):
|
|
self.wfile.write(bytes(acc+'\n', "utf-8"))
|
|
elif len(parts) == 2:
|
|
# a wilcard select all accounts
|
|
if parts[0] == '*':
|
|
if parts[1].lower() == 'update':
|
|
igmirror.update_allaccounts_async()
|
|
else:
|
|
# make sure account name contains only safe characters
|
|
# i think IG usernames can only have this characters:
|
|
accname = re.sub(r'[^a-zA-Z0-9_\.]+', '', parts[0])
|
|
if parts[1].lower() == 'add':
|
|
igmirror.add_igaccount(accname)
|
|
elif parts[1].lower() == 'update':
|
|
igmirror.update_igaccount_async(accname)
|
|
elif parts[1].lower() == 'logout':
|
|
igmirror.logout_account(accname)
|
|
elif parts[1].lower() == 'nuke':
|
|
igmirror.delete_statuses(accname)
|
|
self.wfile.write(bytes('{"status": "ok"}', "utf-8"))
|
|
else:
|
|
self.wfile.write(bytes('{"status": "parameters are not correct"}', "utf-8"))
|
|
|
|
if __name__ == "__main__":
|
|
port = 8080
|
|
if len(sys.argv) > 1:
|
|
port = int(sys.argv[1])
|
|
webServer = HTTPServer(('0.0.0.0', port), MyServer)
|
|
print("Server started http://%s:%s" % ('0.0.0.0', port))
|
|
|
|
try:
|
|
webServer.serve_forever()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
webServer.server_close()
|
|
print("Server stopped.")
|