We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Methods
enable_auth
bool
auth_key
string
secret
time
int
unix
Invalid Signature
AsyncMethod
def _generate_authorisation( self, end_point_url: str, method_name: t.Literal[ "blogEntry.comments", "blogEntry.view", "contest.hacks", "contest.list", "contest.ratingChanges", "contest.standings", "contest.status", "problemset.problems", "problemset.recentStatus", "recentActions", "user.blogEntries", "user.friends", "user.info", "user.ratedList", "user.rating", "user.status", ], ) -> str: if self._auth_enabled is True: if not self._time: self._time = int(time.time()) randon_six_digit_num = random.randint(111111, 999999) head = end_point_url.removeprefix( f"https://codeforces.com/api/{method_name}?" ) to_hash = f"{randon_six_digit_num}/{method_name}?apiKey={self._auth_key}&{head}&time={self._time}#{self._secret}" hashed_string = (hashlib.sha512(to_hash.encode("utf8"))).hexdigest() final_url = f"https://codeforces.com/api/{method_name}?{head}&apiKey={self._auth_key}&time={self._time}&apiSig={randon_six_digit_num}{hashed_string}" return final_url else: return end_point_url
SyncMethod
import asyncio import pycodeforces async def main(): api = pycodeforces.AsyncMethod(enable_auth=True, auth_key="YOUR_AUTH_KEY", secret="YOUR SECRET") users = await api.get_user_info(handles="DmitriyH;Fefer_Ivan") # use `;` to add multiple parameters. async for user in users: print(user.avatar) asyncio.run(main())
import pycodeforces async def main(): get = pycodeforces.SyncMethod(enable_auth=True, auth_key="YOUR_AUTH_KEY", secret="YOUR SECRET") users = get.get_user_info(handles="DmitriyH;Fefer_Ivan") # use `;` to add multiple parameters. for user in users: print(user.avatar)
In: Documentation
Ref:
Hashing of apiSig. Or the way apiSig is hashed.
apiSig
The text was updated successfully, but these errors were encountered:
The Codeforces API may requires the params to be sorted in lexicographical order. Try.
head = "&".join(sorted(head.split("&"))) # ... ?{head}&apiKey= ...
Sorry, something went wrong.
The Codeforces API may requires the params to be sorted in lexicographical order. Try. head = "&".join(sorted(head.split("&"))) # ... ?{head}&apiKey= ...
Thank you for the recommendation, but seems like it should be ; and not &. PS: I've fixed the issue but thank you for the review.
;
&
halfstackpgr
Successfully merging a pull request may close this issue.
Status:
Issue related to Authorization.
Methods
contain these parameters:enable_auth
which is abool
auth_key
which is astring
.secret
which is astring
as well.time
which is anint
representing time inunix
format.Invalid Signature
is being returned from the API.Code where the problem is:
In
AsyncMethod
:In
SyncMethod
:To reproduce the error:
Asynchronous usage:
Synchronous usage:
Reference to authorization with API:
In: Documentation
Ref:
Guessed Problem:
Hashing of
apiSig
. Or the wayapiSig
is hashed.The text was updated successfully, but these errors were encountered: