File size: 2,630 Bytes
03e7882
0db0b4e
c8e724a
 
0db0b4e
 
 
c8e724a
79e247b
c8e724a
 
 
b722bd0
c8e724a
 
 
 
 
03e7882
c8e724a
 
 
 
 
 
 
 
 
 
 
03e7882
c8e724a
03e7882
c8e724a
79e247b
c8e724a
 
 
03e7882
c8e724a
79e247b
c8e724a
79e247b
c8e724a
 
 
79e247b
 
03e7882
c8e724a
79e247b
 
c8e724a
79e247b
 
 
 
c8e724a
 
79e247b
c8e724a
79e247b
 
 
 
c8e724a
79e247b
c8e724a
79e247b
c8e724a
0db0b4e
 
976388a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from flask import Flask, request, jsonify
import requests
import json
import base64

app = Flask(__name__)

# GitHub credentials from environment variables
GITHUB_TOKEN = 'your_github_token'  # Replace with your GitHub token
REPO_OWNER = 'hussein2000-oo'
REPO_NAME = 'dbailloolloloolollhrthlnewrgnk'
USER_FILE_NAME = 'user.json'

# Function to fetch user data from GitHub
def fetch_user_data():
    url = f'https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/contents/{USER_FILE_NAME}'
    headers = {'Authorization': f'token {GITHUB_TOKEN}'}
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        content = response.json()
        user_data = json.loads(base64.b64decode(content['content']).decode('utf-8'))
        return user_data, content['sha']  # Return the SHA for updating the file
    else:
        return {}, None  # Return an empty dict if fetching fails

# Function to update user data on GitHub
def update_user_data(user_data, sha):
    url = f'https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/contents/{USER_FILE_NAME}'
    headers = {'Authorization': f'token {GITHUB_TOKEN}'}
    
    updated_content = base64.b64encode(json.dumps(user_data).encode('utf-8')).decode('utf-8')
    
    payload = {
        "message": "Update user.json with new password",
        "content": updated_content,
        "sha": sha
    }
    
    response = requests.put(url, headers=headers, json=payload)
    return response.status_code == 200

@app.route('/reset_password', methods=['POST'])
def reset_password():
    data = request.json
    username = data.get('username')
    
    user_data, sha = fetch_user_data()
    
    if username in user_data:
        questions = user_data[username]['security_questions']
        answers = {}
        
        for question in questions:
            answer = input(f"{question}: ")
            answers[question] = answer
            
        # Check if answers match
        if all(user_data[username]['security_questions'][q] == answers[q] for q in questions):
            new_password = input("Enter your new password: ")
            user_data[username]['password'] = new_password
            if update_user_data(user_data, sha):
                return jsonify({"message": "Password reset successfully."}), 200
            else:
                return jsonify({"message": "Failed to update user data."}), 500
        else:
            return jsonify({"message": "Security answers do not match."}), 403
    else:
        return jsonify({"message": "User  not found."}), 404


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=7860)