def generateUserToken(user_id: str): """ Creates a token for a specific user. Removes any token previously created for the user. """ response = ApiResponse() user = User.query.filter_by(id=user_id).first() timestamp = time.time() timestamp_millis = int(round(timestamp * 1000)) token_ids = sha256(hash_id(timestamp_millis + randint(0, 9999))) token_value = sha256(hash_id(timestamp_millis) + str(uuid4())) expires_at = int(timestamp + TOKEN_EXPIRATION_TIME) if user: token = Token(ids=token_ids, ip=request.remote_addr, token=token_value, User_id=user.id, ut_created_at=timestamp, ut_expires_at=expires_at) TokenService.clearUserTokens(user.id) if database.save_changes(token) is False: response.setMessage( "An error occured while persisting data to the database") else: response.setSuccess() response.setMessage("Token successfuly generated") response.setDetails({ "token": token_value, "expires_at": expires_at }) else: response.setMessage("User not found in the database") return response
def get(self, query, limit): apiResponse = ApiResponse() icons.updateImages() icons_found = icons.searchImages(query, limit) apiResponse.setError(False if (len(icons_found)) else True) apiResponse.setMessage( str(len(icons_found)) + " images found for your query" if ( len(icons_found)) else "No image found for that query") apiResponse.setDetails(icons_found) return apiResponse.getResponse()
def checkToken(token_value: str): response = ApiResponse() token = TokenService.getValidToken(token_value) if token is not None: expires_at_dt = datetime.datetime.fromtimestamp( token.ut_expires_at) response.setSuccess() response.setMessage("Valid token until : " + str(expires_at_dt)) response.setDetails({"expires_at": token.ut_expires_at}) else: response.setMessage("Invalid or expired token, please login") return response
def getProfile(user: User): response = ApiResponse() if user is not None: response.setSuccess() response.setMessage("Details of {} found".format(user.username)) response.setDetails({ "ids": user.ids, "username": user.username, "first_name": user.first_name, "last_name": user.last_name, "email": user.email, "updated_at": user.updated_at }) else: response.setMessage("Impossible to find your profile") return response
def renewToken(token_id: int): """ Renews a token for the maximum expiration time. """ response = ApiResponse() timestamp = time.time() expires_at = int(timestamp + TOKEN_EXPIRATION_TIME) token = Token.query.filter_by(id=token_id).first() token.ut_expires_at = expires_at if database.save_changes(token) is False: response.setMessage( "An error occured while renewing the token in the database") else: response.setSuccess() response.setMessage("Token successfuly renewed") response.setDetails({ "token": token.token, "expires_at": expires_at }) return response