mirror of
				https://gitea.augustin64.fr/piair/MsRewards-Reborn.git
				synced 2025-11-03 23:23:53 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			351 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			351 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from time import sleep
 | 
						|
import subprocess
 | 
						|
from flask import Flask, Response, redirect, url_for, request, session, abort, render_template
 | 
						|
from apscheduler.schedulers.background import BackgroundScheduler
 | 
						|
from apscheduler.triggers.cron import CronTrigger
 | 
						|
from flask_login import LoginManager, UserMixin, login_required, login_user, logout_user 
 | 
						|
import json
 | 
						|
 | 
						|
global password
 | 
						|
with open("./user_data/flask.json", "r") as inFile:
 | 
						|
    data = json.load(inFile)   
 | 
						|
 | 
						|
password = data["password"]
 | 
						|
secret = data["secret"]
 | 
						|
if secret == "":
 | 
						|
    import secrets
 | 
						|
    secret = secrets.token_hex()
 | 
						|
    with open("./user_data/flask.json", "w") as inFile:
 | 
						|
        data = {
 | 
						|
            "password": password, 
 | 
						|
            "secret": secret
 | 
						|
        }
 | 
						|
        json.dump(data, inFile)   
 | 
						|
 | 
						|
"""
 | 
						|
#Automatic start of MsRewards
 | 
						|
"""
 | 
						|
scheduler = BackgroundScheduler()
 | 
						|
scheduler.start()
 | 
						|
 | 
						|
trigger = CronTrigger(
 | 
						|
    year="*", month="*", day="*", hour="2", minute="25", second="25"
 | 
						|
)
 | 
						|
 | 
						|
def start_ms():
 | 
						|
    subprocess.Popen(["python3", "./V6.py", "-v", "2345"])
 | 
						|
 | 
						|
scheduler.add_job(
 | 
						|
        start_ms,
 | 
						|
        trigger=trigger,
 | 
						|
        #args=["hello world"],
 | 
						|
        name="Daily start",
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
"""
 | 
						|
#Flask app
 | 
						|
"""
 | 
						|
 | 
						|
app = Flask(__name__)
 | 
						|
 | 
						|
"""
 | 
						|
#Login stuff
 | 
						|
"""
 | 
						|
# config
 | 
						|
app.config.update(
 | 
						|
    SECRET_KEY = secret
 | 
						|
)
 | 
						|
 | 
						|
login_manager = LoginManager()
 | 
						|
login_manager.init_app(app)
 | 
						|
login_manager.login_view = "login"
 | 
						|
 | 
						|
# silly user model
 | 
						|
class User(UserMixin):
 | 
						|
    def __init__(self, id):
 | 
						|
        self.id = id
 | 
						|
        self.name = "user" + str(id)
 | 
						|
        self.password = password
 | 
						|
        
 | 
						|
    def __repr__(self):
 | 
						|
        return "%d/%s/%s" % (self.id, self.name, self.password)
 | 
						|
 | 
						|
users = [User(1)]
 | 
						|
 | 
						|
@app.route("/login/", methods=["GET", "POST"])
 | 
						|
def login():
 | 
						|
    if request.method == 'POST':
 | 
						|
        if request.form['password'] == password:
 | 
						|
            user = User(id)
 | 
						|
            login_user(user)
 | 
						|
            if password == "ChangeMe":
 | 
						|
                return(render_template("change_password.html"))
 | 
						|
            return(render_template("override.html"))
 | 
						|
        else:
 | 
						|
            return abort(401)
 | 
						|
    else:
 | 
						|
        return(render_template("login.html"))
 | 
						|
 | 
						|
 | 
						|
@app.route("/change_password/", methods=["GET", "POST"])
 | 
						|
@login_required
 | 
						|
def change_password():
 | 
						|
    global password
 | 
						|
    if request.method == 'POST':
 | 
						|
        password = request.form["password"]
 | 
						|
        with open("./user_data/flask.json", "w") as inFile:
 | 
						|
            data = {
 | 
						|
                "password": password, 
 | 
						|
                "secret": secret
 | 
						|
            }
 | 
						|
            json.dump(data, inFile)   
 | 
						|
    return(render_template("override.html"))
 | 
						|
 | 
						|
 | 
						|
# handle login failed
 | 
						|
@app.errorhandler(401)
 | 
						|
def page_not_found(e):
 | 
						|
    return(render_template("login.html"))
 | 
						|
 | 
						|
    
 | 
						|
# callback to reload the user object        
 | 
						|
@login_manager.user_loader
 | 
						|
def load_user(userid):
 | 
						|
    return User(userid)
 | 
						|
 | 
						|
"""
 | 
						|
#end of login stuff
 | 
						|
"""
 | 
						|
 | 
						|
@app.route("/", methods=["post"])
 | 
						|
def dev():
 | 
						|
    action = request.form
 | 
						|
    print(action)
 | 
						|
    if action == "dev":
 | 
						|
        print("dev action test")
 | 
						|
    return(f"<h1> TO IMPLEMENT - {action}</h1>")
 | 
						|
 | 
						|
 | 
						|
@app.route("/")
 | 
						|
def main():
 | 
						|
    return(render_template("override.html"))
 | 
						|
 | 
						|
 | 
						|
@app.route("/discord/")
 | 
						|
def discord_get():
 | 
						|
    with open("./user_data/discord.json", "r") as inFile:
 | 
						|
        data = json.load(inFile)
 | 
						|
    return(render_template("discord.html", data=data, len=len(data)))
 | 
						|
 | 
						|
 | 
						|
@app.route("/discord/", methods=["post"])
 | 
						|
def discord_post():
 | 
						|
    with open("./user_data/discord.json", "r") as inFile:
 | 
						|
        data = json.load(inFile)    
 | 
						|
    action = request.form
 | 
						|
 | 
						|
    config = action["select"]
 | 
						|
    successL = action["successL"]
 | 
						|
    try :
 | 
						|
        a = action["successT"] 
 | 
						|
        successT = "True"
 | 
						|
    except:
 | 
						|
        successT = "False"
 | 
						|
    try :
 | 
						|
        a = action["errorsT"] 
 | 
						|
        errorsT = "True"
 | 
						|
    except:
 | 
						|
        errorsT = "False"
 | 
						|
    errorsL = action["errorsL"]
 | 
						|
    name = action["name"] if action["name"] else f"unnamed{action['select']}"
 | 
						|
    data[config] = {"errorsL" : errorsL, "errorsT": errorsT, "successT": successT, "successL": successL, "name": name}
 | 
						|
 | 
						|
    with open("./user_data/discord.json", "w") as outFile:
 | 
						|
        json.dump(data, outFile)
 | 
						|
    return(render_template("discord.html", data=data, len=len(data)))
 | 
						|
 | 
						|
 | 
						|
@app.route("/dev/")
 | 
						|
def dev2():
 | 
						|
    with open("./user_data/proxy.json", "r") as inFile:
 | 
						|
        j = json.load(inFile)
 | 
						|
    new_proxy = {"address": "ADDRESS", "port": "PORT", "name":"NAME"}
 | 
						|
    max_index = 0
 | 
						|
    for i in range(1, 50):
 | 
						|
        try :
 | 
						|
            print(j[str(i)])
 | 
						|
        except :
 | 
						|
            print(f"found {i - 1} proxys")
 | 
						|
            max_index = i
 | 
						|
            break
 | 
						|
    j[f"{max_index}"] = new_proxy
 | 
						|
    print(j)
 | 
						|
    with open("./user_data/proxy.json", "w") as outfile:
 | 
						|
        json.dump(j, outfile)
 | 
						|
    return(render_template("dev.html"))
 | 
						|
 | 
						|
 | 
						|
@app.route("/settings/")
 | 
						|
def settings_get():
 | 
						|
    with open("./user_data/settings.json", "r") as inFile:
 | 
						|
        settings = json.load(inFile)
 | 
						|
    return(render_template("settings.html", data=settings))
 | 
						|
 | 
						|
@app.route("/settings/", methods=["post"])
 | 
						|
def settings_post():
 | 
						|
    settings = {}
 | 
						|
    action = request.form
 | 
						|
    settings['avatarlink'] = action["avatarlink"]
 | 
						|
    with open("./user_data/settings.json", "w") as inFile:
 | 
						|
        json.dump(settings, inFile)
 | 
						|
    return(render_template("settings.html", data=settings))
 | 
						|
 | 
						|
 | 
						|
@app.route("/proxy/")
 | 
						|
def proxy_get():
 | 
						|
    with open("./user_data/proxy.json", "r") as inFile:
 | 
						|
        j = json.load(inFile)
 | 
						|
    return(render_template("proxy.html", data=j, len=len(j)))
 | 
						|
 | 
						|
 | 
						|
@app.route("/proxy/", methods=["post"])
 | 
						|
def proxy_post():
 | 
						|
    with open("./user_data/proxy.json", "r") as inFile:
 | 
						|
        data = json.load(inFile)    
 | 
						|
    action = request.form
 | 
						|
    try :
 | 
						|
        config = action["select"]
 | 
						|
        address = action["address"]
 | 
						|
        port = action["port"]
 | 
						|
        name = action["name"] if action["name"] else f"@unnamed{action['select']}"
 | 
						|
        data[config] = {"address" : address, "port": port, "name": name}
 | 
						|
    except :
 | 
						|
        print("error : probably bad config")
 | 
						|
 | 
						|
    with open("./user_data/proxy.json", "w") as outFile:
 | 
						|
        json.dump(data, outFile)
 | 
						|
    return(render_template("proxy.html", data=data, len=len(data)))
 | 
						|
 | 
						|
 | 
						|
@app.route("/override/")
 | 
						|
def override_get():
 | 
						|
    return(render_template("override.html"))
 | 
						|
 | 
						|
 | 
						|
@app.route("/override/", methods=["post"])
 | 
						|
def override():
 | 
						|
    subprocess.run(["python3", "./V6.py", "-v", "2345"])
 | 
						|
    return(render_template("override.html"))
 | 
						|
 | 
						|
 | 
						|
@app.route("/database/")
 | 
						|
def database_get():
 | 
						|
    with open("./user_data/database.json", "r") as inFile:
 | 
						|
        database = json.load(inFile)
 | 
						|
    return(render_template("database.html", data = database))
 | 
						|
 | 
						|
 | 
						|
@app.route("/database/", methods=["post"])
 | 
						|
def database_post():
 | 
						|
    action = request.form
 | 
						|
    data = {
 | 
						|
        "host": action['address'],
 | 
						|
        "table": action['table'],
 | 
						|
        "usr": action['user'],
 | 
						|
        "pwd": action['password'],
 | 
						|
        "checked": ""
 | 
						|
        }  
 | 
						|
 | 
						|
    try :
 | 
						|
        if action["switch"] :
 | 
						|
            data['checked'] = "checked"
 | 
						|
    except:
 | 
						|
        pass
 | 
						|
 | 
						|
    with open("./user_data/database.json", "w") as inFile:
 | 
						|
        json.dump(data, inFile)
 | 
						|
 | 
						|
    return(render_template("database.html", data = data))
 | 
						|
 | 
						|
 | 
						|
@app.route("/accounts/")
 | 
						|
def accounts_get():
 | 
						|
    with open("./user_data/proxy.json", "r") as inFile:
 | 
						|
        proxys = json.load(inFile)
 | 
						|
    with open("./user_data/discord.json", "r") as inFile:
 | 
						|
        discords = json.load(inFile)
 | 
						|
    with open("./user_data/configs.json", "r") as inFile:
 | 
						|
        configs = json.load(inFile)
 | 
						|
    return(render_template("accounts.html", data=configs, discords=discords, proxys=proxys, configs=configs, len=len(configs)))
 | 
						|
 | 
						|
 | 
						|
@app.route("/accounts/", methods=["POST"])
 | 
						|
def accounts_post():
 | 
						|
    action = request.form
 | 
						|
    with open("./user_data/proxy.json", "r") as inFile:
 | 
						|
        proxys = json.load(inFile)
 | 
						|
    with open("./user_data/discord.json", "r") as inFile:
 | 
						|
        discords = json.load(inFile)
 | 
						|
    with open("./user_data/configs.json", "r") as inFile:
 | 
						|
        configs = json.load(inFile)
 | 
						|
 | 
						|
    comptes = {
 | 
						|
        "1":{"mail": action["mail1"], "pwd": action["pwd1"], "2fa": action["2fa1"]},
 | 
						|
        "2":{"mail": action["mail2"], "pwd": action["pwd2"], "2fa": action["2fa2"]},
 | 
						|
        "3":{"mail": action["mail3"], "pwd": action["pwd3"], "2fa": action["2fa3"]},
 | 
						|
        "4":{"mail": action["mail4"], "pwd": action["pwd4"], "2fa": action["2fa4"]},
 | 
						|
        "5":{"mail": action["mail5"], "pwd": action["pwd5"], "2fa": action["2fa5"]}
 | 
						|
    }
 | 
						|
 | 
						|
    configs[action["config"]] = {
 | 
						|
        "name" : action["name"] if action["name"] != "" else f"unnamed{action['config']}",
 | 
						|
        "proxy": action["proxy"],
 | 
						|
        "discord": action["discord"],
 | 
						|
        "accounts": comptes
 | 
						|
        }
 | 
						|
    with open("./user_data/configs.json", "w") as outFile:
 | 
						|
        json.dump(configs, outFile)
 | 
						|
    return(render_template("accounts.html", data=configs, discords=discords, proxys=proxys, configs=configs, len=len(configs)))
 | 
						|
 | 
						|
 | 
						|
def read_config_txt(ligne):
 | 
						|
    f = open("./user_data/config.cfg", "r")
 | 
						|
    txt = f.readlines()
 | 
						|
    f.close()
 | 
						|
    if txt.count(txt) >1:
 | 
						|
        raise NameError("Fail")
 | 
						|
    
 | 
						|
    for i in range(len(txt)) :
 | 
						|
        name = txt[i].split(" = ")[0]
 | 
						|
        if name == ligne:
 | 
						|
            ret = txt[i].split(" = ")[1]
 | 
						|
 | 
						|
    f = open("./user_data/config.cfg", "w")
 | 
						|
    for i in txt :
 | 
						|
        f.write(i)
 | 
						|
    f.close()
 | 
						|
    return(ret.replace("\n", ""))
 | 
						|
 | 
						|
 | 
						|
def edit_config_txt(ligne, contenu):
 | 
						|
    f = open("./user_data/config.cfg", "r")
 | 
						|
    txt = f.readlines()
 | 
						|
    f.close()
 | 
						|
    if txt.count(txt) >1:
 | 
						|
        raise NameError("Fail")
 | 
						|
    
 | 
						|
    for i in range(len(txt)) :
 | 
						|
        name = txt[i].split(" = ")[0]
 | 
						|
        if name == ligne:
 | 
						|
            txt[i] = name + " = " + str(contenu) + "\n"
 | 
						|
 | 
						|
    f = open("./user_data/config.cfg", "w")
 | 
						|
    for i in txt :
 | 
						|
        f.write(i)
 | 
						|
    f.close()
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    app.run(host='0.0.0.0', port=3456, debug=True) |