ngn
30a0a1fa27
nerdfonts are now gonna be loaded from nerdfonts website, with the webfonts css however the ubuntu font will be hosted localy
177 lines
4.1 KiB
Python
177 lines
4.1 KiB
Python
#!/bin/python3
|
|
|
|
"""
|
|
Administration script for my website (ngn.tf)
|
|
#############################################
|
|
I really enjoy doing stuff from the terminal,
|
|
so I wrote this simple python script that interacts
|
|
with the API and lets me add/remove new posts/services
|
|
from the terminal
|
|
"""
|
|
|
|
from os import remove, getenv
|
|
from getpass import getpass
|
|
import requests as req
|
|
from sys import argv
|
|
|
|
URL = ""
|
|
|
|
def join(pth: str) -> str:
|
|
if URL == None:
|
|
return ""
|
|
|
|
if URL.endswith("/"):
|
|
return URL+pth
|
|
return URL+"/"+pth
|
|
|
|
def get_token() -> str:
|
|
try:
|
|
f = open("/tmp/wa", "r")
|
|
token = f.read()
|
|
f.close()
|
|
return token
|
|
except:
|
|
print("[-] You are not authenticated")
|
|
exit(1)
|
|
|
|
def login() -> None:
|
|
pwd = getpass("[>] Enter your password: ")
|
|
res = req.get(join("admin/login")+f"?pass={pwd}").json()
|
|
if res["error"] != "":
|
|
print(f"[-] Error logging in: {res['error']}")
|
|
return
|
|
|
|
token = res["token"]
|
|
f = open("/tmp/wa", "w")
|
|
f.write(token)
|
|
f.close()
|
|
|
|
def logout() -> None:
|
|
token = get_token()
|
|
res = req.get(join("admin/logout"), headers={
|
|
"Authorization": token
|
|
}).json()
|
|
if res["error"] != "":
|
|
print(f"[-] Error logging out: {res['error']}")
|
|
return
|
|
|
|
remove("/tmp/wa")
|
|
print("[+] Logged out")
|
|
|
|
def add_post() -> None:
|
|
token = get_token()
|
|
title = input("[>] Post title: ")
|
|
author = input("[>] Post author: ")
|
|
content_file = input("[>] Post content file: ")
|
|
public = input("[>] Should post be public? (y/n): ")
|
|
|
|
try:
|
|
f = open(content_file, "r")
|
|
content = f.read()
|
|
f.close()
|
|
except:
|
|
print("[-] Content file not found")
|
|
return
|
|
|
|
res = req.put(join("admin/blog/add"), json={
|
|
"title": title,
|
|
"author": author,
|
|
"content": content,
|
|
"public": 1 if public == "y" else 0
|
|
}, headers={
|
|
"Authorization": token
|
|
}).json()
|
|
|
|
if res["error"] != "":
|
|
print(f"[-] Error adding post: {res['error']}")
|
|
return
|
|
|
|
print("[+] Post has been added")
|
|
|
|
def remove_post() -> None:
|
|
token = get_token()
|
|
id = input("[>] Post ID: ")
|
|
res = req.delete(join("admin/blog/remove")+f"?id={id}", headers={
|
|
"Authorization": token
|
|
}).json()
|
|
|
|
if res["error"] != "":
|
|
print(f"[-] Error removing post: {res['error']}")
|
|
return
|
|
|
|
print("[-] Post has been removed")
|
|
|
|
def add_service() -> None:
|
|
token = get_token()
|
|
name = input("[>] Serivce name: ")
|
|
desc = input("[>] Serivce desc: ")
|
|
link = input("[>] Serivce URL: ")
|
|
|
|
res = req.put(join("admin/service/add"), json={
|
|
"name": name,
|
|
"desc": desc,
|
|
"url": link
|
|
}, headers={
|
|
"Authorization": token
|
|
}).json()
|
|
|
|
if res["error"] != "":
|
|
print(f"[-] Error adding service: {res['error']}")
|
|
return
|
|
|
|
print("[+] Service has been added")
|
|
|
|
def remove_service() -> None:
|
|
token = get_token()
|
|
name = input("[>] Service name: ")
|
|
res = req.delete(join("admin/service/remove")+f"?name={name}", headers={
|
|
"Authorization": token
|
|
}).json()
|
|
|
|
if res["error"] != "":
|
|
print(f"[-] Error removing service: {res['error']}")
|
|
return
|
|
|
|
print("[+] Serivce has been removed")
|
|
|
|
cmds = {
|
|
"login": login,
|
|
"logout": logout,
|
|
"add_post": add_post,
|
|
"remove_post": remove_post,
|
|
"add_service": add_service,
|
|
"remove_service": remove_service,
|
|
}
|
|
|
|
def main():
|
|
global URL
|
|
URL = getenv("API")
|
|
if URL == None or URL == "":
|
|
print("[-] API enviroment variable not set")
|
|
exit(1)
|
|
|
|
if len(argv) != 2:
|
|
print(f"[-] Usage: admin_script <command>")
|
|
print(f"[+] Run \"admin_script help\" to get all commands")
|
|
exit(1)
|
|
|
|
if argv[1] == "help":
|
|
print("Avaliable commands:")
|
|
for k in cmds.keys():
|
|
print(f" {k}")
|
|
exit()
|
|
|
|
for k in cmds.keys():
|
|
if k != argv[1]:
|
|
continue
|
|
try:
|
|
cmds[k]()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
exit()
|
|
|
|
print("[-] Command not found")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|