initial commit
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
import os
|
||||
import json
|
||||
import sys
|
||||
import subprocess
|
||||
import datetime
|
||||
|
||||
if sys.version_info.major >= 3:
|
||||
try:
|
||||
sys.stdin.reconfigure(encoding='utf-8')
|
||||
sys.stdout.reconfigure(encoding='utf-8')
|
||||
except AttributeError:
|
||||
import io
|
||||
sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||
|
||||
|
||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
os.chdir(script_dir)
|
||||
print(f"SatanGPT: Changed current working directory to: {os.getcwd()}")
|
||||
|
||||
CONFIG_FILE = 'config.json'
|
||||
|
||||
VALID_USERNAME = None
|
||||
VALID_PASSWORD = None
|
||||
LISTEN_PORT = None
|
||||
GLOBAL_SECRET_KEY = None
|
||||
|
||||
def load_config():
|
||||
|
||||
global VALID_USERNAME, VALID_PASSWORD, LISTEN_PORT, GLOBAL_SECRET_KEY
|
||||
|
||||
if os.path.exists(CONFIG_FILE):
|
||||
try:
|
||||
with open(CONFIG_FILE, 'r') as f:
|
||||
config_data = json.load(f)
|
||||
VALID_USERNAME = config_data.get('username')
|
||||
VALID_PASSWORD = config_data.get('password')
|
||||
LISTEN_PORT = config_data.get('port')
|
||||
GLOBAL_SECRET_KEY = bytes.fromhex(config_data.get('secret_key'))
|
||||
print("Configuration loaded from config.json.")
|
||||
return True
|
||||
except (json.JSONDecodeError, KeyError) as e:
|
||||
print(f"Error loading configuration from {CONFIG_FILE}: {e}. Running setup CLI.")
|
||||
if os.path.exists(CONFIG_FILE):
|
||||
os.remove(CONFIG_FILE)
|
||||
return False
|
||||
return False
|
||||
|
||||
def setup_cli():
|
||||
"""
|
||||
Launches the CLI for initial server setup.
|
||||
"""
|
||||
global VALID_USERNAME, VALID_PASSWORD, LISTEN_PORT, GLOBAL_SECRET_KEY
|
||||
|
||||
print("""
|
||||
██████ ██████ ███████ █████ ███ ███ ███████ ████████ ██████ ██████
|
||||
██ ██ ██ ██ ██ ██ ██ ████ ████ ██ ██ ██ ██
|
||||
██████ ██ ██ █████ ███████ ██ ████ ██ █████ ██ ██ █████
|
||||
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
||||
██████ ██████ ██ ██ ██ ██ ██ ███████ ██ ██████ ███████
|
||||
|
||||
""")
|
||||
print("\n--- Initial Server Setup ---")
|
||||
print("This appears to be the first run or configuration is missing.")
|
||||
print("Please set up the admin panel credentials and listening port.")
|
||||
|
||||
username = input("Enter desired admin username: ").strip()
|
||||
password = input("Enter desired admin password: ").strip()
|
||||
|
||||
while True:
|
||||
try:
|
||||
port = int(input("Enter desired listening port (e.g., 8000): ").strip())
|
||||
if not (1024 <= port <= 65535):
|
||||
print("Invalid port. Please choose a port between 1024 and 65535.")
|
||||
continue
|
||||
break
|
||||
except ValueError:
|
||||
print("Invalid input. Please enter a numeric value for the port.")
|
||||
|
||||
secret_key_bytes = os.urandom(32)
|
||||
secret_key_hex = secret_key_bytes.hex()
|
||||
|
||||
config_data = {
|
||||
'username': username,
|
||||
'password': password,
|
||||
'port': port,
|
||||
'secret_key': secret_key_hex
|
||||
}
|
||||
|
||||
with open(CONFIG_FILE, 'w') as f:
|
||||
json.dump(config_data, f, indent=4)
|
||||
print(f"Configuration saved to {CONFIG_FILE}.")
|
||||
|
||||
VALID_USERNAME = username
|
||||
VALID_PASSWORD = password
|
||||
LISTEN_PORT = port
|
||||
GLOBAL_SECRET_KEY = secret_key_bytes
|
||||
|
||||
if __name__ == '__main__':
|
||||
config_exists = os.path.exists(CONFIG_FILE)
|
||||
config_loaded_successfully = False
|
||||
|
||||
if config_exists:
|
||||
print(f"\n--- Configuration File '{CONFIG_FILE}' Found ---")
|
||||
print("Do you want to:")
|
||||
print("1. Load existing configuration (recommended)")
|
||||
print("2. Set up a new configuration (will overwrite existing)")
|
||||
|
||||
while True:
|
||||
choice_config = input("Enter your choice (1 or 2): ").strip()
|
||||
if choice_config == '1':
|
||||
config_loaded_successfully = load_config()
|
||||
if not config_loaded_successfully:
|
||||
print("SatanGPT: Existing configuration is corrupted. Running setup CLI to create a new one.")
|
||||
setup_cli()
|
||||
break
|
||||
elif choice_config == '2':
|
||||
print("SatanGPT: Proceeding with new configuration setup. Existing config will be overwritten!")
|
||||
if os.path.exists(CONFIG_FILE):
|
||||
os.remove(CONFIG_FILE)
|
||||
setup_cli()
|
||||
config_loaded_successfully = True
|
||||
break
|
||||
else:
|
||||
print("Invalid choice. Please enter 1 or 2.")
|
||||
else:
|
||||
print("SatanGPT: Configuration file not found. Running initial setup CLI.")
|
||||
setup_cli()
|
||||
config_loaded_successfully = True
|
||||
|
||||
if not config_loaded_successfully:
|
||||
print("SatanGPT: Failed to load or set up configuration. Exiting!")
|
||||
sys.exit(1)
|
||||
|
||||
while True:
|
||||
print("\n--- Server Launch Options ---")
|
||||
print("How do you want to run the server?")
|
||||
print("1. Run server in debug mode (foreground)")
|
||||
print("2. Run server in background (with nohup, recommended for production)")
|
||||
print("3. Set up a new configuration (username, password, port)")
|
||||
|
||||
choice = input("Enter your choice (1, 2, or 3): ").strip()
|
||||
if choice == '1':
|
||||
print(f"Starting server in debug mode on http://0.0.0.0:{LISTEN_PORT}...")
|
||||
print("Enter your server's IP address and listening port in the following format: IP:PORT")
|
||||
print("It may take some time to start the server for the first time, but don't worry!")
|
||||
os.execv(sys.executable, [sys.executable, 'server.py'])
|
||||
break
|
||||
elif choice == '2':
|
||||
print(f"Starting server in background using nohup on http://0.0.0.0:{LISTEN_PORT}...")
|
||||
try:
|
||||
command = f"nohup uvicorn server:app --host 0.0.0.0 --port {LISTEN_PORT} &"
|
||||
subprocess.Popen(command, shell=True)
|
||||
|
||||
print("Server process initiated in background. Check 'nohup.out' for logs.")
|
||||
print("Enter your server's IP address and listening port in the following format: IP:PORT")
|
||||
print("It may take some time to start the server for the first time, but don't worry!")
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
print(f"Error launching server in background: {e}. Try running manually.")
|
||||
break
|
||||
elif choice == '3':
|
||||
print("SatanGPT: Reconfiguring the server. Prepare for new settings!")
|
||||
if os.path.exists(CONFIG_FILE):
|
||||
os.remove(CONFIG_FILE)
|
||||
setup_cli()
|
||||
else:
|
||||
print("Invalid choice. Please enter 1, 2, or 3.")
|
||||
Reference in New Issue
Block a user