def generate_feed_token(cls, feed_pk, user_pk): user_secret_key, created_unused = FeedSecretKey.objects.get_or_create(feed_id=feed_pk) secret_key = user_secret_key.secret_key.encode('utf-8') checksum = generate_random_from_vschar_set(length=10) return encrypt_cbc(int_to_base36(int(feed_pk)) + "." + int_to_base36(int(user_pk)) + '.' + '.' + checksum, SOCIAL_SETTINGS.FEED_TOKEN_SECRET_KEY) + '.' + encrypt_cbc(checksum, secret_key)
def authorization(self): if self._request.response_type != "code": raise InvalidRequestError() state = self._request.state if not state: state = generate_random_from_vschar_set(length=30) self._state = state #self._request.save_session(AUTHORIZATION_STATE_KEY , state) self._server.check_available_scope(self._client, self._request.scope) code = self._server.generate_code(self._client, self._request.scope, self._request.user) return add_params_to_url(self.redirect_uri, {'code': code, 'state': self._state})
def _generate_access_token(cls, client_pk, user_pk, scope, expires_in, is_refreshable): user_secret_key, created_unused = UserClientSecretKey.objects.get_or_create_safe(user_id=user_pk, client=Client(pk=client_pk)) secret_key = user_secret_key.secret_key.encode('utf-8') expire = CurrentTimestamp(expires_in)() checksum = generate_random_from_vschar_set(length=10) scope_str = cls.scope_to_str(scope) info = scope_str + "." + int_to_base36(int(is_refreshable)) access_token = int_to_base36(expire) + "." + \ encrypt_cbc(int_to_base36(client_pk) + "." + int_to_base36(user_pk) + '.' + \ int_to_base36(expire) + '.' + info + '.' + checksum, OAUTH2_SETTINGS.ACCESS_TOKEN_SECRET_KEY) \ + '.' + encrypt_cbc(checksum, secret_key) if is_refreshable: refresh_token = encrypt_cbc(checksum + "." + generate_random_from_vschar_set(length=2), secret_key) else: refresh_token = None ret = OAuth2Credential(access_token=access_token, refresh_token=refresh_token, user_secret_key=secret_key, expires_in=expires_in) cls.store_credential(ret, client_pk, user_pk, scope, expire, is_refreshable) return ret
def implicit(self, expires_in): if self._request.response_type != "token": raise InvalidRequestError() redirect_uri = self._request.redirect_uri state = self._request.state scope = self._request.scope if not state: state = generate_random_from_vschar_set(length=30) access_token = self._server.generate_access_token(self._client, self._request.user, scope, expires_in, is_refreshable=False) return add_params_to_url(redirect_uri, {'access_token': access_token.access_token, 'state': state, 'scope': ' '.join(scope), 'expires_in': expires_in, 'token_type': 'Bearer'})
def _feed_rand_key(): return generate_random_from_vschar_set(10)
def _generate_random_from_vschar_set_for_secret_key(): return generate_random_from_vschar_set(OAUTH2_SETTINGS.USER_SECRET_KEY_LENGTH)
def _generate_random_from_vschar_set_for_client_secret(): return generate_random_from_vschar_set(OAUTH2_SETTINGS.CLIENT_ID_LENGTH)
def generate_code(cls, client, scope, user): checksum = generate_random_from_vschar_set(length=3) info = int_to_base36(client.pk) + "." + cls.scope_to_str(scope) + "." + int_to_base36(user.pk) + "." \ + int_to_base36(CurrentTimestamp(OAUTH2_SETTINGS.CODE_EXPIRATION)()) + '.' + checksum return encrypt_cbc(info, OAUTH2_SETTINGS.CODE_SECRET_KEY)
def generate_client_id(length=30): return generate_random_from_vschar_set(length)