Skip to content
This repository was archived by the owner on Jul 14, 2025. It is now read-only.

Commit d0fc5d6

Browse files
committed
Initial commit
0 parents  commit d0fc5d6

File tree

12 files changed

+697
-0
lines changed

12 files changed

+697
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/progpt-session.txt

CODE_OF_CONDUCT.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, religion, or sexual identity
10+
and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
* Demonstrating empathy and kindness toward other people
21+
* Being respectful of differing opinions, viewpoints, and experiences
22+
* Giving and gracefully accepting constructive feedback
23+
* Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
* Focusing on what is best not just for us as individuals, but for the
26+
overall community
27+
28+
Examples of unacceptable behavior include:
29+
30+
* The use of sexualized language or imagery, and sexual attention or
31+
advances of any kind
32+
* Trolling, insulting or derogatory comments, and personal or political attacks
33+
* Public or private harassment
34+
* Publishing others' private information, such as a physical or email
35+
address, without their explicit permission
36+
* Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official e-mail address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at
63+
64+
All complaints will be reviewed and investigated promptly and fairly.
65+
66+
All community leaders are obligated to respect the privacy and security of the
67+
reporter of any incident.
68+
69+
## Enforcement Guidelines
70+
71+
Community leaders will follow these Community Impact Guidelines in determining
72+
the consequences for any action they deem in violation of this Code of Conduct:
73+
74+
### 1. Correction
75+
76+
**Community Impact**: Use of inappropriate language or other behavior deemed
77+
unprofessional or unwelcome in the community.
78+
79+
**Consequence**: A private, written warning from community leaders, providing
80+
clarity around the nature of the violation and an explanation of why the
81+
behavior was inappropriate. A public apology may be requested.
82+
83+
### 2. Warning
84+
85+
**Community Impact**: A violation through a single incident or series
86+
of actions.
87+
88+
**Consequence**: A warning with consequences for continued behavior. No
89+
interaction with the people involved, including unsolicited interaction with
90+
those enforcing the Code of Conduct, for a specified period of time. This
91+
includes avoiding interactions in community spaces as well as external channels
92+
like social media. Violating these terms may lead to a temporary or
93+
permanent ban.
94+
95+
### 3. Temporary Ban
96+
97+
**Community Impact**: A serious violation of community standards, including
98+
sustained inappropriate behavior.
99+
100+
**Consequence**: A temporary ban from any sort of interaction or public
101+
communication with the community for a specified period of time. No public or
102+
private interaction with the people involved, including unsolicited interaction
103+
with those enforcing the Code of Conduct, is allowed during this period.
104+
Violating these terms may lead to a permanent ban.
105+
106+
### 4. Permanent Ban
107+
108+
**Community Impact**: Demonstrating a pattern of violation of community
109+
standards, including sustained inappropriate behavior, harassment of an
110+
individual, or aggression toward or disparagement of classes of individuals.
111+
112+
**Consequence**: A permanent ban from any sort of public interaction within
113+
the community.
114+
115+
## Attribution
116+
117+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118+
version 2.0, available at
119+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120+
121+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
122+
enforcement ladder](https://github.com/mozilla/diversity).
123+
124+
[homepage]: https://www.contributor-covenant.org
125+
126+
For answers to common questions about this code of conduct, see the FAQ at
127+
https://www.contributor-covenant.org/faq. Translations are available at
128+
https://www.contributor-covenant.org/translations.

LICENSE.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2023 Ensta
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

ProGPT/Authentication.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
from requests import Session
2+
from requests import Response, JSONDecodeError
3+
from urllib.parse import unquote_plus, quote_plus
4+
5+
6+
class Authentication:
7+
8+
@staticmethod
9+
def login(email: str, password: str) -> str:
10+
11+
session: Session = Session()
12+
13+
session.headers["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " \
14+
"(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
15+
16+
session.get(
17+
url="https://chat.openai.com/api/auth/session",
18+
headers={
19+
"accept": "*/*",
20+
"accept-language": "en-US,en;q=0.9",
21+
"content-type": "application/x-www-form-urlencoded",
22+
"sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
23+
"sec-ch-ua-mobile": "?0",
24+
"sec-ch-ua-platform": "\"Windows\"",
25+
"sec-fetch-dest": "empty",
26+
"sec-fetch-mode": "cors",
27+
"sec-fetch-site": "same-origin",
28+
"Referer": "https://chat.openai.com/auth/login",
29+
"Referrer-Policy": "strict-origin-when-cross-origin"
30+
}
31+
)
32+
33+
redirect_response: Response = session.post(
34+
url="https://chat.openai.com/api/auth/signin/auth0?prompt=login",
35+
headers={
36+
"accept": "*/*",
37+
"accept-language": "en-US,en;q=0.9",
38+
"content-type": "application/x-www-form-urlencoded",
39+
"sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
40+
"sec-ch-ua-mobile": "?0",
41+
"sec-ch-ua-platform": "\"Windows\"",
42+
"sec-fetch-dest": "empty",
43+
"sec-fetch-mode": "cors",
44+
"sec-fetch-site": "same-origin",
45+
"Referer": "https://chat.openai.com/auth/login",
46+
"Referrer-Policy": "strict-origin-when-cross-origin"
47+
},
48+
data=f'callbackUrl=%2F&csrfToken='
49+
f'{unquote_plus(session.cookies.get("__Host-next-auth.csrf-token")).split("|")[0]}'
50+
f'&json=true'
51+
)
52+
53+
try:
54+
redirect_response_json: dict = redirect_response.json()
55+
56+
if "url" not in redirect_response_json:
57+
raise Exception("Key 'url' not in response JSON. Most probably it's a CSRF issue with this package.")
58+
59+
# Get State
60+
state: str = session.get(
61+
redirect_response_json["url"],
62+
allow_redirects=False
63+
).headers.get("location").split("state=")[-1]
64+
65+
# Load Login Page for Cookies!
66+
session.get(
67+
url=f"https://auth0.openai.com/u/login/password?state={state}",
68+
headers={
69+
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
70+
"image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
71+
"accept-language": "en-US,en;q=0.9",
72+
"cache-control": "no-cache",
73+
"pragma": "no-cache",
74+
"sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
75+
"sec-ch-ua-mobile": "?0",
76+
"sec-ch-ua-platform": "\"Windows\"",
77+
"sec-fetch-dest": "document",
78+
"sec-fetch-mode": "navigate",
79+
"sec-fetch-site": "same-origin",
80+
"sec-fetch-user": "?1",
81+
"upgrade-insecure-requests": "1",
82+
"Referer": f"https://auth0.openai.com/u/login/identifier?state={state}",
83+
"Referrer-Policy": "same-origin"
84+
}
85+
)
86+
87+
# Authenticate
88+
auth_response: Response = session.post(
89+
url=f"https://auth0.openai.com/u/login/password?state={state}",
90+
headers={
91+
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,"
92+
"image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
93+
"accept-language": "en-US,en;q=0.9",
94+
"cache-control": "max-age=0",
95+
"content-type": "application/x-www-form-urlencoded",
96+
"sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
97+
"sec-ch-ua-mobile": "?0",
98+
"sec-ch-ua-platform": "\"Windows\"",
99+
"sec-fetch-dest": "document",
100+
"sec-fetch-mode": "navigate",
101+
"sec-fetch-site": "same-origin",
102+
"sec-fetch-user": "?1",
103+
"upgrade-insecure-requests": "1",
104+
"Referer": f"https://auth0.openai.com/u/login/password?state={state}",
105+
"Referrer-Policy": "same-origin"
106+
},
107+
data=f"state={state}&username={quote_plus(email)}&password={quote_plus(password)}",
108+
allow_redirects=False
109+
# data={
110+
# "state": state,
111+
# "username": email,
112+
# "password": password
113+
# }
114+
)
115+
116+
return auth_response.status_code
117+
118+
except JSONDecodeError:
119+
raise Exception("HTTP response is not a valid JSON. Most probably it's a CSRF issue with this package.")

0 commit comments

Comments
 (0)