def do_GET(self): code = dict(parse.parse_qsl(parse.urlsplit(self.path).query)).get( 'code', None) if code: response = requests.post( 'https://hh.ru/oauth/token', { 'grant_type': 'authorization_code', 'client_id': os.getenv('APP_ID'), 'client_secret': os.getenv('APP_SECRET'), 'code': code, 'redirect_uri': redirect_uri }) result = json.loads(response.text) if 'access_token' in result: c = Config() c.setAccessToken(AccessTokenEntity(result)) print(c.getAccessToken().getAccessToken()) exit() self.send_response(200) self.end_headers() return
class Refresher: config = None accessToken = None resumeService = None resume_bump_handler = ResumeBumpHandler() resume_check_views_handler = ResumeCheckViewsHandler() resume_collect_black_list_handler = ResumeCollectBlackListHandler() resume_update_black_list_handler = ResumeUpdateBlackListHandler() resume_update_description_handler = ResumeUpdateDescriptionHandler() def __init__(self): self.config = Config() self.accessToken = AccessToken() self.resumeService = ResumeService() def execute(self): while True: try: expired = self.accessToken.isTokenExpired() break except Exception as e: logger.info('Access key is not found') time.sleep(10) if expired: logger.info('Access token expired. Try to get new') self.accessToken.handleRefreshToken(self.config.getAccessToken().getRefreshToken()) resumes = self.resumeService.get_published_resumes() # Resumes read for resume in resumes: # Who watched our resume self.resume_check_views_handler.handle(resume.get_id()) # Bump if it is possibly self.resume_bump_handler.handle(resume) # Collect black list self.resume_collect_black_list_handler.handle(resume) # Resumes write for resume in resumes: self.resume_update_black_list_handler.handle(resume) # Update resume description for resume in resumes: self.resume_update_description_handler.handle(resume)
class AccessToken: config = None def __init__(self): self.config = Config() def handleRefreshToken(self, refresh_token: str) -> None: try: response = requests.post(self.config.getOauthTokenEndpoint(), { 'grant_type': 'refresh_token', 'refresh_token': refresh_token, }) result = json.loads(response.text) if 'access_token' in result: logger.info('Refresh access_token') self.config.setAccessToken(AccessTokenEntity(result)) except Exception as e: logger.error(e) def isTokenExpired(self) -> bool: return DateHelper.getCurrentUnixDate() > self.config.getAccessToken( ).getExpiresAt()