Exemple #1
0
 def users(self):
     us = []
     auths = Auth.find_project_users(pid=self.id)
     for auth in auths:
         u = User.get(id=auth.user_id, status=User._status_ok)
         if u:
             us.append(u)
     return us
Exemple #2
0
 def load_player(self, userID, entityID, clientVersion='', featureCode='', clientIP=''):
     player = self.get_player(entityID)
     if player:
         return player
     user = User.get(userID)
     # 校验entityID
     if not user or entityID not in user.roles.get(settings.REGION['ID']):
         logger.error('player crossed failed %d', entityID)
         return
     player = Player.load(entityID)
     if not player:
         return
     player.userID = user.userID
     player.username = user.username
     player.username_alias = user.username_alias or ''
     player.channel = user.channel or ''
     self.set_player(player)
     if not player.lastlogin:
         create_player(player)
         player.totallogin = 1  # 累计登陆
         player.seriallogin = 1  # 连续登陆
         player.clientVersion = clientVersion
         player.featureCode = featureCode
         player.clientIP = clientIP
         from common.log import role_register
         role_register.info(player=player)
     else:
         player.load_mails()
         today = datedate.today()
         if player.lastlogin.date() != today:  # 当日重复不计算累计连续登陆
             if player.lastlogin.date() < (datedate.today() - timedelta(days=1)):  # 昨天没登陆
                 player.seriallogin = 1
             else:
                 player.seriallogin += 1
             player.totallogin += 1
             # 月卡减去每天登录的天数
             if player.monthly_card_30:
                 delta = today - player.lastlogin.date()
                 player.monthly_card_30 = max(player.monthly_card_30 - delta.days + 1, 0)
             # {{ 新月卡
             if player.monthcard1:
                 delta = today - player.lastlogin.date()
                 player.monthcard1 = max(player.monthcard1 - delta.days + 1, 0)
             if player.monthcard2:
                 delta = today - player.lastlogin.date()
                 player.monthcard2 = max(player.monthcard2 - delta.days + 1, 0)
             if player.weekscard1:
                 delta = today - player.lastlogin.date()
                 player.weekscard1 = max(player.weekscard1 - delta.days + 1, 0)
             if player.weekscard2:
                 delta = today - player.lastlogin.date()
                 player.weekscard2 = max(player.weekscard2 - delta.days + 1, 0)
             # }}
     player.daily_first_login = True
     now = int(time.time())
     player.lastlogin = datetime.fromtimestamp(now)
     player.save()
     return player
Exemple #3
0
 def post(self, *args, **kwargs):
     tid = kwargs.get('tid')
     if not tid:
         raise HTTPError(404)
     task = Task.get(id=tid)
     form = CommentForm(self.request.arguments)
     # set form data
     form.from_user_id.data = self.user.id
     form.from_user_name.data = self.user.name
     form.to_user_id.data = task.creator_id
     form.to_user_name.data = task.creator_name
     form.task_id.data = task.id
     form.task_title.data = task.title
     # 分析content 识别链接, 识别@
     # 链接 <a>url</a>
     content, at_users = analyse_content(form.content.data)
     print '****************content: ', repr(content)
     form.type.data = Comment._type_at if at_users else Comment._type_reply
     form.content.data = content
     if form.validate():
         comment = Comment.new(**form.data)
         # 评论消息 自己回复自己或者自己@自己不发消息
         if int(self.user.id) != int(task.creator_id):
             Message.set(
                 user_id=task.creator_id,
                 from_user=self.user,
                 task=task,
                 pid=self.pid,
                 pname=self.auth.project_name,
                 type='apply',
                 content=content,
             )
         # @消息
         for name in at_users:
             user = User.get(name=name, status=User._status_ok)
             if user and user.id != int(self.user.id):
                 Message.set(
                     user_id=user.id,
                     from_user=self.user,
                     task=task,
                     pid=self.pid,
                     pname=self.auth.project_name,
                     type='@',
                     content=content,
                 )
         return self.redirect('/%s/task/%s' % (self.pid, task.id))
     else:
         return self.render('comment.html',
                            errors=form.errors,
                            auth=self.auth,
                            task=task)
Exemple #4
0
 def check_auth(cls, pid, uid, is_admin=False):
     auth = cls.get(user_id=uid, project_id=pid, status=cls._status_allow)
     if not auth and is_admin:
         project = Project.get(id=pid, status__no=Project._status_del)
         user = User.get(id=uid, status=User._status_ok)
         if not user or not user.admin or not project:
             return None
         auth = cls.new(
             project_id=project.id,
             project_name=project.name,
             user_id=user.id,
             user_name=user.name,
             status=cls._status_allow
         )
     return auth
Exemple #5
0
 def post(self, *args, **kwargs):
     tid = kwargs.get('tid')
     if not tid:
         raise HTTPError(404)
     task = Task.get(id=tid)
     form = CommentForm(self.request.arguments)
     # set form data
     form.from_user_id.data = self.user.id
     form.from_user_name.data = self.user.name
     form.to_user_id.data = task.creator_id
     form.to_user_name.data = task.creator_name
     form.task_id.data = task.id
     form.task_title.data = task.title
     # 分析content 识别链接, 识别@
     # 链接 <a>url</a>
     content, at_users = analyse_content(form.content.data)
     print '****************content: ', repr(content)
     form.type.data = Comment._type_at if at_users else Comment._type_reply
     form.content.data = content
     if form.validate():
         comment = Comment.new(**form.data)
         # 评论消息 自己回复自己或者自己@自己不发消息
         if int(self.user.id) != int(task.creator_id):
             Message.set(
                 user_id=task.creator_id,
                 from_user=self.user,
                 task=task,
                 pid=self.pid,
                 pname=self.auth.project_name,
                 type='apply',
                 content=content,
             )
         # @消息
         for name in at_users:
             user = User.get(name=name, status=User._status_ok)
             if user and user.id != int(self.user.id):
                 Message.set(
                     user_id=user.id,
                     from_user=self.user,
                     task=task,
                     pid=self.pid,
                     pname=self.auth.project_name,
                     type='@',
                     content=content,
                 )
         return self.redirect('/%s/task/%s' % (self.pid, task.id))
     else:
         return self.render('comment.html', errors=form.errors, auth=self.auth, task=task)
Exemple #6
0
def common_login(request,
                 raw_username,
                 req,
                 auto_register=False,
                 check_password=True):
    # 检查版本
    try:
        clientversion = int(getattr(req.deviceInfo, 'clientVersion', 1))
    except ValueError:
        clientversion = 1

    if get_device_id(req.deviceInfo) in g_block_devices:
        raise ApplicationError(0, u"该设备已被禁止登录 如有疑问请联系客服")
    if get_g_version() and clientversion and get_g_version() > clientversion:
        raise ApplicationError(msgTips.FAIL_MSG_LOGIN_OLDVERSION,
                               settings.CLIENTOLDVERSION_NOTICE)

    username = raw_username

    # 检查白名单
    if username not in g_whitelist:
        raise ApplicationError(0, get_loginlimitmsg())

    # 查找用户
    userID = UsernameIndexing.get_pk(username)
    if userID:
        user = User.get(userID)
        user.load_containers()

        # 检查设备锁定
        if user.lock_device and get_device_id(
                req.deviceInfo) != user.lock_device:
            raise ApplicationError(0, u'该帐号为试玩帐号,只能在注册时的使用的设备上登录!')
    else:
        user = None

    clientIP = request.env.get('REMOTE_ADDR', '')
    password = getattr(req, 'password', '') or "dummy"

    if not user and auto_register:
        # register
        try:
            user = register(raw_username, password,
                            get_device_id(req.deviceInfo))
        except RegisterError as e:
            raise ApplicationError(0, e.message)

        # 创建成功
        userID = user.userID
        info = unpack_login_info(req.deviceInfo,
                                 userID=userID,
                                 username=user.username,
                                 featureCode=req.featureCode,
                                 clientIP=clientIP)
        info.update({
            'userID': userID,
            'username': user.username,
            'type': 'register'
        })
        gm_logger.info({'sessionaccess': info})
        account_register.info(**info)

    if not user:
        raise ApplicationError(msgTips.FAIL_MSG_LOGIN_WRONG_ACCOUNT)

    # 检查密码
    userID = user.userID
    if check_password:
        hashed = user.password
        if not utils.check_password(password, hashed):
            raise ApplicationError(msgTips.FAIL_MSG_INVALID_PASSWORD)

    # 检查封停
    now = int(time.time())
    if user.blocktime and user.blocktime > now:
        raise ApplicationError(0, u"该账号已被禁止登录 如有疑问请联系客服")
    if user.imsi in g_block_devices:
        raise ApplicationError(0, u"该账号已被禁止登录 如有疑问请联系客服")

    do_login(request, userID)
    user.lastserver = req.regionID
    user.save()

    # log
    info = unpack_login_info(req.deviceInfo,
                             userID=userID,
                             username=user.username,
                             featureCode=req.featureCode,
                             clientIP=clientIP)
    info.update({'userID': userID, 'username': user.username, 'type': 'login'})
    gm_logger.info({'sessionaccess': info})
    account_login.info(**info)

    # 响应
    entityIDs = user.roles.get(req.regionID, [])
    return poem_pb.HTTPLoginResponse(
        userID=userID,
        sdk_username=user.username,
        world=encode_world(
            route(req.regionID, entityIDs[0] if entityIDs else None)),
        verify_code=request.sid,
    )
Exemple #7
0
 def load_player(
         self,
         userID,
         entityID,
         clientVersion='',
         featureCode='',
         clientIP=''):
     from reward.manager import givegoldmail
     player = self.get_player(entityID)
     if player:
         return player
     user = User.get(userID)
     # 校验entityID
     if not user or entityID not in user.roles.get(settings.REGION['ID']):
         logger.error('player crossed failed %d', entityID)
         return
     player = Player.load(entityID)
     player.userID = user.userID
     player.username = user.username
     player.username_alias = user.username_alias or ''
     player.channel = user.channel or ''
     if not player:
         return
     self.set_player(player)
     if not player.lastlogin:
         create_player(player)
         player.totallogin = 1  # 累计登陆
         player.seriallogin = 1  # 连续登陆
         givegoldmail(player)
         player.clientVersion = clientVersion
         player.featureCode = featureCode
         player.clientIP = clientIP
         from common.log import role_register
         role_register.info(player=player)
         if not user.back_reward_received:
             data = get_player_reward()
             try:
                 gold, credits = data[user.username]
             except KeyError:
                 pass
             else:
                 from mail.manager import send_mail
                 send_mail(
                     player.entityID, u'老训练师钻石大礼',
                     u' 亲爱的训练师,您好!这是您在《神奇小精灵》充值所获得钻石的返还,请查收!',
                     addition={'gold': gold})
                 player.credits = credits
                 user.back_reward_received = True
                 user.save()
     else:
         player.load_pets()
         player.load_equips()
         player.load_mails()
         player.load_faction()
         player.load_group()
         player.load_offline_attrs()
         # player.load_offline_mail()
         today = datedate.today()
         if player.lastlogin.date() != today:  # 当日重复不计算累计连续登陆
             # 永久商店还没开启的情况下每天都要清空玩家身上商品信息
             # 目的是临时商店开启时第一次有效地刷新商品信息
             clean_yesterday_daily_taskrewards(player)  # 策划要求,隔天的任务奖励全部清空
             if player.lastlogin.date() < (
                 datedate.today() -
                 timedelta(
                     days=1)):  # 昨天没登陆
                 player.seriallogin = 1
                 if player.guide_end_signal:
                     player.seriallogin_after_guide = 1
             else:
                 player.seriallogin += 1
                 if player.guide_end_signal:
                     player.seriallogin_after_guide += 1
             player.totallogin += 1
             if player.guide_end_signal:
                 player.totallogin_after_guide += 1
             player.get_serialloginreward = 0
             # 月卡减去每天登录的天数
             if player.monthly_card_30:
                 delta = today - player.lastlogin.date()
                 player.monthly_card_30 = max(
                     player.monthly_card_30 - delta.days + 1, 0)
             # {{ 新月卡
             if player.monthcard1:
                 delta = today - player.lastlogin.date()
                 player.monthcard1 = max(
                     player.monthcard1 - delta.days + 1, 0)
             if player.monthcard2:
                 delta = today - player.lastlogin.date()
                 player.monthcard2 = max(
                     player.monthcard2 - delta.days + 1, 0)
             if player.weekscard1:
                 delta = today - player.lastlogin.date()
                 player.weekscard1 = max(
                     player.weekscard1 - delta.days + 1, 0)
             if player.weekscard2:
                 delta = today - player.lastlogin.date()
                 player.weekscard2 = max(
                     player.weekscard2 - delta.days + 1, 0)
             # }}
             # build_loginreward_set(player)
             givegoldmail(player)
         # 控制日冒险礼包
         if player.trigger_packs_flag:
             player.trigger_packs_flag = getattr(
                 settings, "TRIGGER_PACKS_FLAG", True)
         from pvp.rank import g_rankManager
         g_rankManager.check_mail(player)
         g_rankManager.reset_rank(player)
         from pvp.swap import g_swapManager
         g_swapManager.give_rewards(player)
         from campaign.manager import g_campaignManager
         g_campaignManager.reset(player)
         from pvp.daily import g_dailyManager
         g_dailyManager.reset(player)
         from faction.city import g_cityDungeon
         g_cityDungeon.reset_player(player, all=True)
         from faction.city import g_cityContend
         g_cityContend.reset_player(player, all=True)
         from campaign.manager import reset_check_in_monthly
         reset_check_in_monthly(player)
         from pvp.rob import check_rob, resize_rob_history_by_time
         check_rob(player)
         from pvp.loot import check_loot
         check_loot(player)
         resize_rob_history_by_time(player)
         from campaign.manager import start_count_down
         start_count_down(player)
         from mall.manager import reset_vip_packs
         reset_vip_packs(player)
         from mall.manager import first_recharge_patch
         first_recharge_patch(player)
         from campaign.manager import reset_fund
         reset_fund(player)
         from explore.dlc import g_dlcCampaignManager
         g_dlcCampaignManager.reset_task(player)
         from group.manager import give_reward_by_mail
         give_reward_by_mail(player)
         from explore.boss import give_reward
         give_reward(player)
         from world.service import give_goods
         configs = get_config(RechargeConfig)
         # from task.manager import patch_noob_tasks
         # patch_noob_tasks(player)
         # patch_guide_fb(player)
         for g, amount in player.offline_recharges or []:
             config = configs.get(g)
             if config:
                 give_goods(player, config, amount=amount)
         player.offline_recharges = []
     from explore.ambition import reload_ambition
     reload_ambition(player)
     from explore.ambition import reload_vip_ambition
     reload_vip_ambition(player)
     from task.manager import on_monthly_card
     on_monthly_card(player)
     from task.manager import on_vip_level
     on_vip_level(player)
     from task.manager import on_login
     on_login(player)
     from task.manager import on_vip_level
     on_vip_level(player)
     from task.manager import on_levelup
     on_levelup(player)
     from task.manager import on_dlc_score
     on_dlc_score(player)
     from task.manager import on_friends_count
     on_friends_count(player)
     from campaign.manager import reset_online_packs
     reset_online_packs(player, refresh=True)
     from campaign.manager import reset_consume_campaign
     reset_consume_campaign(player)
     from campaign.manager import reset_login_campaign
     reset_login_campaign(player)
     from mail.manager import apply_condition_mail
     apply_condition_mail(player)
     from campaign.manager import do_login_campaign
     do_login_campaign(player)
     from campaign.manager import reset_recharges
     reset_recharges(player)
     check_power_packs(player)
     player.daily_first_login = True
     now = int(time.time())
     player.lastlogin = datetime.fromtimestamp(now)
     # 推荐好友
     from friend.manager import recommendp
     recommendp(player)
     if player.first_recharge_flag:
         player.first_recharge_flag = getattr(
             settings, "PAY", True)
     # 触发power计算, 更新indexing
     if not user.back_level_reward_received:
         data = get_player_level_reward()
         try:
             level, gold = data[user.username]
         except KeyError:
             pass
         else:
             from mail.manager import send_mail
             send_mail(
                 player.entityID, u'老训练师等级返利',
                 u'亲爱的训练师:  您在旧版《神奇小精灵》1月17日之前,达到[colorF:246;255;0]%d级[colorF:255;255;255],向您奉上[colorF:246;255;0]钻石*%d[colorF:255;255;255]。祝您游戏愉快~' % (level, gold),
                 addition={'gold': gold})
             user.back_level_reward_received = True
             user.save()
     # update seed state
     from campaign.manager import g_campaignManager
     if g_campaignManager.seed_campaign.is_open():
         g_campaignManager.seed_campaign.updateSeedState(player)
     # player.update_power()
     player.save()
     return player
Exemple #8
0
def load_user(userid):
    user = User()
    return user.get(userid)