handlerbase.py 文件源码

python
阅读 13 收藏 0 点赞 0 评论 0

项目:enkiWS 作者: juliettef 项目源码 文件源码
def delete_account( self, delete_posts = False, token = '' ):
        token_to_save = 'accountdelete'
        if not token:
            # there is no token if the user has no email address: they are deleted immediately. They must be logged in.
            user_to_delete = self.enki_user
        else:
            # a user has followed a accountdelete token link. The user account associated with the token will be deleted
            tokenEntity = EnkiModelTokenVerify.get_by_token( token )
            user_to_delete = EnkiModelUser.get_by_id( tokenEntity.user_id )
            # delete all user related tokens except any verify token related to account deletion that's not yet been used
            if tokenEntity.type == token_to_save:
                token_to_save = 'accountandpostsdelete'
        verify_tokens_to_delete = EnkiModelTokenVerify.fetch_keys_by_user_id_except_type( user_to_delete.key.id(), token_to_save )
        if verify_tokens_to_delete:
            ndb.delete_multi( verify_tokens_to_delete )
        email_rollback_tokens_to_delete = EnkiModelTokenEmailRollback.fetch_keys_by_user_id( user_to_delete.key.id())
        if email_rollback_tokens_to_delete:
            ndb.delete_multi( email_rollback_tokens_to_delete )
        # Delete the user account and log them out.
        if not HandlerBase.account_is_active( user_to_delete.key.id()):
            # delete user if the account is inactive
            display_names = EnkiModelDisplayName.fetch_keys_by_user_id(user_to_delete.key.id())
            if display_names:
                ndb.delete_multi( display_names )
            user_to_delete.key.delete()
        else:
            # anonymise the user
            if user_to_delete.email:
                user_to_delete.email = None
            if user_to_delete.password:
                user_to_delete.password = None
            if user_to_delete.auth_ids_provider:
                user_to_delete.auth_ids_provider = []
            user_to_delete.put()
            # keep all historical display_names. Add a new current display_name '[deleted]' (unless it's already been deleted)
            display_name = EnkiModelDisplayName.get_by_user_id_current( user_to_delete.key.id())
            if display_name:
                if display_name.prefix != EnkiModelDisplayName.DELETED_PREFIX or display_name.suffix != EnkiModelDisplayName.DELETED_SUFFIX:
                    EnkiModelDisplayName.set_display_name( user_to_delete.key.id(), EnkiModelDisplayName.DELETED_PREFIX, EnkiModelDisplayName.DELETED_SUFFIX )
            # delete user's sent and received messages
            EnkiModelMessage.delete_user_messages( user_to_delete.key.id())
            # delete user's posts if required
            if delete_posts:
                EnkiModelPost.delete_user_posts( user_to_delete.key.id())
        # log the deleted user out
        if self.enki_user == user_to_delete.key.id():
            self.log_out()
        EnkiModelTokenAuth.revoke_user_authentications( user_to_delete.key.id())
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号