Rahulk2197 commited on
Commit
ca2d324
·
verified ·
1 Parent(s): bc747de

Upload 3 files

Browse files
Files changed (3) hide show
  1. details.json +1 -0
  2. req.txt +0 -0
  3. test.py +154 -0
details.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"installed":{"client_id":"89307648764-14kv87qknb5ajjgsblalpkobdgjglvoh.apps.googleusercontent.com","project_id":"elite-particle-434617-c1","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["http://localhost"]}}
req.txt ADDED
Binary file (2.21 kB). View file
 
test.py ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from google_auth_oauthlib.flow import InstalledAppFlow
3
+ from googleapiclient.discovery import build
4
+ from googleapiclient.errors import HttpError
5
+ import pickle
6
+ import os
7
+ import hashlib
8
+
9
+ # Constants
10
+ CREDS_FILE = 'token.pickle'
11
+ CREDENTIALS_FILE = 'details.json'
12
+ SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
13
+ SPREADSHEET_ID = "17KIBySu21Oh0ajtyo4A9jUTjnwOIl69KlqNlTfszrXQ"
14
+ RANGE_NAME = "Sheet1!A:C"
15
+
16
+ # Google Sheets API setup with OAuth
17
+ def get_gsheet_service(creds):
18
+ try:
19
+ service = build('sheets', 'v4', credentials=creds)
20
+ return service
21
+ except HttpError as err:
22
+ st.error(f"Failed to create service: {err}")
23
+ return None
24
+
25
+ def append_data_to_sheet(service, spreadsheet_id, range_name, values):
26
+ try:
27
+ body = {
28
+ 'values': values
29
+ }
30
+ result = service.spreadsheets().values().append(
31
+ spreadsheetId=spreadsheet_id,
32
+ range=range_name,
33
+ valueInputOption="RAW",
34
+ body=body
35
+ ).execute()
36
+ return result
37
+ except HttpError as err:
38
+ st.error(f"Failed to append data: {err}")
39
+ return None
40
+
41
+ def read_data_from_sheet(service, spreadsheet_id, range_name):
42
+ try:
43
+ result = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_name).execute()
44
+ return result.get('values', [])
45
+ except HttpError as err:
46
+ st.error(f"Failed to read data: {err}")
47
+ return []
48
+
49
+ # Function to hash passwords
50
+ def hash_password(password):
51
+ return hashlib.sha256(password.encode()).hexdigest()
52
+
53
+ # OAuth flow setup
54
+ def get_credentials():
55
+ if os.path.exists(CREDS_FILE):
56
+ with open(CREDS_FILE, 'rb') as token:
57
+ creds = pickle.load(token)
58
+ if creds and creds.valid:
59
+ return creds
60
+ if creds and creds.expired and creds.refresh_token:
61
+ creds.refresh(Request())
62
+ with open(CREDS_FILE, 'wb') as token:
63
+ pickle.dump(creds, token)
64
+ return creds
65
+ flow = InstalledAppFlow.from_client_secrets_file(CREDENTIALS_FILE, SCOPES)
66
+ creds = flow.run_local_server(port=0)
67
+ with open(CREDS_FILE, 'wb') as token:
68
+ pickle.dump(creds, token)
69
+ return creds
70
+
71
+ # Sign Up Page
72
+ def signup(service):
73
+ st.subheader("Sign Up")
74
+
75
+ with st.form(key='signup_form'):
76
+ new_username = st.text_input("Username")
77
+ new_password = st.text_input("Password", type="password")
78
+ signup_button = st.form_submit_button("Sign Up")
79
+
80
+ if signup_button:
81
+ if new_username and new_password:
82
+ # Check if username already exists
83
+ user_data = read_data_from_sheet(service, SPREADSHEET_ID, RANGE_NAME)
84
+ for user in user_data:
85
+ if user[0] == new_username:
86
+ st.error("Username already exists. Please choose a different username.")
87
+ return
88
+
89
+ # Hash the password
90
+ hashed_password = hash_password(new_password)
91
+
92
+ # Store the username and hashed password
93
+ values = [[new_username, hashed_password]]
94
+ result = append_data_to_sheet(service, SPREADSHEET_ID, RANGE_NAME, values)
95
+
96
+ if result:
97
+ st.success("Signup successful! Please go to the login page.")
98
+ else:
99
+ st.error("Failed to sign up.")
100
+ else:
101
+ st.error("Please provide both a username and password.")
102
+
103
+ # Login Page
104
+ def login(service):
105
+ st.subheader("Login")
106
+
107
+ with st.form(key='login_form'):
108
+ username = st.text_input("Username")
109
+ password = st.text_input("Password", type="password")
110
+ login_button = st.form_submit_button("Login")
111
+
112
+ if login_button:
113
+ if username and password:
114
+ # Hash the password
115
+ hashed_password = hash_password(password)
116
+
117
+ # Read data from Google Sheets
118
+ user_data = read_data_from_sheet(service, SPREADSHEET_ID, RANGE_NAME)
119
+
120
+ # Verify login credentials
121
+ for user in user_data:
122
+ if user[0] == username and user[1] == hashed_password:
123
+ st.success("Login successful!")
124
+ return True
125
+ st.error("Invalid username or password.")
126
+ else:
127
+ st.error("Please enter both username and password.")
128
+ return False
129
+
130
+ # Streamlit app
131
+ def main():
132
+ st.title("Google Sheets Authentication System")
133
+
134
+ # Get OAuth credentials
135
+ creds = get_credentials()
136
+
137
+ # Create a service object
138
+ service = get_gsheet_service(creds)
139
+
140
+ if service:
141
+ # Choose between login and signup
142
+ page = st.sidebar.selectbox("Choose a page", ["Login", "Signup"])
143
+
144
+ if page == "Login":
145
+ logged_in = login(service)
146
+ if logged_in:
147
+ st.write("You are logged in! You can add more functionality here.")
148
+ elif page == "Signup":
149
+ signup(service)
150
+ else:
151
+ st.error("Failed to create the service.")
152
+
153
+ if __name__ == "__main__":
154
+ main()