-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdashboard.py
More file actions
167 lines (132 loc) · 5.37 KB
/
Copy pathdashboard.py
File metadata and controls
167 lines (132 loc) · 5.37 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import tkinter as tk
from tkinter import messagebox
from unittest import result
import requests
import configparser
from dotenv import load_dotenv
import os
import sys
load_dotenv()
def save_token(token, id, email, avatar):
config = configparser.ConfigParser()
config['DEFAULT'] = {
'token': str(token),
'id': str(id),
'email': str(email),
'avatar': str(avatar)
}
with open('config.ini', 'w') as configfile:
config.write(configfile)
def get_saved_token():
config = configparser.ConfigParser()
if not os.path.exists('config.ini'):
return {}
try:
config.read('config.ini')
return {
'token': config['DEFAULT'].get('token', ''),
'id': config['DEFAULT'].get('id', ''),
'email': config['DEFAULT'].get('email', ''),
'avatar': config['DEFAULT'].get('avatar', '')
}
except (configparser.Error, KeyError):
return {}
def fetch_user_data():
saved_config = get_saved_token()
token = saved_config.get('token')
userid = saved_config.get('id')
if not token:
messagebox.showerror("Error", "Token not found. Please login.")
return None, saved_config
if not userid:
messagebox.showerror("Error", "User ID not found. Please check your configuration.")
return None, saved_config
dashboard_url = os.getenv('DASHBOARD_URL')
api_key = os.getenv('API_KEY')
headers = {'X-API-KEY': api_key, 'X-Token': token}
params = {'id': userid}
try:
response = requests.get(dashboard_url, headers=headers, params=params)
response.headers["content-type"].strip().startswith("application/json")
response.raise_for_status()
#messagebox.showerror("ijin debug bro", response.json())
result = response.json()
# messagebox.showerror("Mode Debug", result)
if not result.get('status'):
messagebox.showerror("Error", result.get('message', 'Unknown error'))
return None, saved_config
user_data = result.get('data', {}).get('user', {})
if not isinstance(user_data, dict):
user_data = {}
return user_data, saved_config
except requests.exceptions.RequestException as e:
messagebox.showerror("Error", str(e))
import main
main.form_login()
return None, saved_config
except ValueError as e:
messagebox.showerror("Error", "Invalid response format received from the server.")
import main
main.form_login()
def create_label_and_value(frame, row, label_text, value_text, default_value='N/A'):
label = tk.Label(frame, text=label_text)
label.grid(row=row, column=0, sticky="w")
value = tk.Label(frame, text=value_text if value_text else default_value)
value.grid(row=row, column=1, sticky="w")
def show_dashboard():
user_data, saved_config = fetch_user_data()
if user_data is None:
return
path_user = os.getenv('PATH_USER', '')
email = saved_config.get('email', 'N/A')
userid = saved_config.get('id', 'N/A')
token = saved_config.get('token', 'N/A')
avatar = path_user + saved_config.get('avatar', 'N/A')
api_email = user_data.get('email', 'N/A')
api_username = user_data.get('username', 'N/A')
api_avatar = path_user + user_data.get('avatar', 'N/A')
def logout():
config = configparser.ConfigParser()
config.read('config.ini')
config['DEFAULT']['token'] = ''
config['DEFAULT']['id'] = ''
config['DEFAULT']['email'] = ''
config['DEFAULT']['avatar'] = ''
with open('config.ini', 'w') as configfile:
config.write(configfile)
root.destroy()
import main
main.form_login()
def go_to_list():
root.destroy()
import list
list.list_page()
# Pindahkan fungsi on_close ke sini
def on_close():
if messagebox.askokcancel("Exit", "Do you really want to close the application?"):
root.destroy()
sys.exit() # Akhiri program secara eksplisit
root = tk.Tk()
root.title("Dashboard")
# Hubungkan tombol close ke fungsi on_close
root.protocol("WM_DELETE_WINDOW", on_close)
session_frame = tk.LabelFrame(root, text="Session Data", padx=10, pady=10)
session_frame.pack(padx=10, pady=10, fill="both", expand="yes")
create_label_and_value(session_frame, 0, "Session Email", email)
create_label_and_value(session_frame, 1, "Session ID", userid)
create_label_and_value(session_frame, 2, "Session Token", token)
create_label_and_value(session_frame, 3, "Session Avatar", avatar)
api_frame = tk.LabelFrame(root, text="API Data", padx=10, pady=10)
api_frame.pack(padx=10, pady=10, fill="both", expand="yes")
create_label_and_value(api_frame, 0, "API Email", api_email)
create_label_and_value(api_frame, 1, "API Username", api_username)
create_label_and_value(api_frame, 2, "API Avatar", api_avatar)
logout_button = tk.Button(root, text="Logout", command=logout)
logout_button.pack(pady=5)
list_button = tk.Button(root, text="Go to List", command=go_to_list)
list_button.pack(pady=5)
# Tambahkan pemanggilan go_to_list() setelah jendela ditampilkan
# root.after(100, go_to_list) # Menjadwalkan go_to_list() untuk dipanggil setelah 100ms
root.mainloop()
# Panggil fungsi show_dashboard untuk menampilkan dashboard
show_dashboard()