def play(request):
    obj = None
    user_id = None
    if request.POST:
        if "user_id" in request.COOKIES:
            user_id = request.COOKIES["user_id"]
            user = User.objects.get(id=user_id)
        else:
            user = User()
            user.save()
        if "image-data" in request.POST:
            obj = Drawing()
            obj.image = request.POST["image-data"]
        elif "caption" in request.POST:
            obj = Caption()
            obj.content = request.POST["caption"]
        if "previous-id" in request.POST:
            obj.previous_id = request.POST["previous-id"]

        obj.user = user
        obj.save()
    is_drawing = obj.__class__ == Caption
    response = render(request, 'index.html', {
        'drawing': is_drawing,
        'obj': obj
    })
    if user_id is None and request.POST:
        response.set_cookie("user_id", user.id)
    return response
Exemple #2
0
def sinalogin(request):
    """a method for sina login"""

    #use the access_token to get uid from sina server    
    #TODO:this appkey should be written in the conf file
    appkey = "2600055104"
    access_token = request.POST['access_token']
    payload = {'source': appkey, 'access_token': access_token}
    r = requests.get('https://api.weibo.com/2/account/get_uid.json', params = payload)
    response = r.json()
    if ("uid" in response):
        uid = str(response['uid'])
    else:
        result = __resultToJson('1', '', {})
        return HttpResponse(result, content_type = 'application/json')

    #get the userinfo according to the access_token and uid
    payload = {'source': appkey, 'access_token': access_token, 'uid': uid}
    r = requests.get('https://api.weibo.com/2/users/show.json', params = payload)
    userinfo = r.json()
    if ('name' in userinfo):
        count = User.objects.filter(uid = uid).count()
        if (count == 0):
            user = User(uid, userinfo['name'], userinfo['profile_image_url'])
            user.save()
        request.session["mid"] = uid
        result = __resultToJson('0', '', {'uid': uid, 'nickname': userinfo['name'], 'imageUrl': userinfo['profile_image_url']}) 
        return HttpResponse(result, content_type = 'application/json')
    else:
        result = __resultToJson('2', '', {})
        return HttpResponse(result, content_type = 'application/json')
Exemple #3
0
def qqlogin(request):
    """a method for qq login"""

    #use the access_token to get the openid from qq server
    access_token = request.POST['access_token']
    payload = {'access_token': access_token}
    r = requests.get("https://graph.qq.com/oauth2.0/me", params = payload)
    callback = r.text
    if (callback.find("openid") == -1):
        result = __resultToJson('1', '', {})
        return HttpResponse(result, content_type = 'application/json')

    try:
        openid = str(callback.split("{")[1].split("}")[0].split(",")[1].split(":")[1].split("\"")[1])
    except:
       result = __resultToJson('2', '', {})
       return HttpResponse(result, content_type = 'application/json')

    #get the userinfo according to the access_token and openid
    #TODO:this appid should be written in the conf file
    appid = "100510779"
    payload = {'access_token': access_token, 'oauth_consumer_key': appid, 'openid': openid}
    r = requests.get('https://graph.qq.com/user/get_user_info?', params = payload)
    userinfo = r.json()
    if ("nickname" in userinfo):
        count = User.objects.filter(uid = openid).count()
        if (count == 0):
            user = User(openid, userinfo['nickname'], userinfo['figureurl'])
            user.save()
        request.session['mid'] = openid
        result = __resultToJson('0', '', {'uid':openid, 'nickname': userinfo['nickname'], 'imageUrl': userinfo['figureurl']})
        return HttpResponse(result, content_type = 'application/json')
    else:
        result = __resultToJson('2', '', {})
        return HttpResponse(result, content_type = 'application/json')
Exemple #4
0
def create_room(nickname):
    room = Room(code=generate_room_code(), state=Room.WAITING)
    room.save()
    user = User(room=room,
                nickname=nickname,
                is_owner=True,
                unique_id=uuid.uuid4().__str__())
    user.save()
    return CreateRoomResult(room, user)
Exemple #5
0
def register(request):
    if request.GET:
        username = request.GET.get('username')
        pwd = request.GET.get('password')
        email = request.GET.get('email')

        u = User.objects.filter(UserName=username)
        if u:
            return HttpResponse("The name has already been used.")
        else:
            u = User(UserName=username, Password=pwd, Email=email)
            u.save()
            return HttpResponseRedirect("/game/")
Exemple #6
0
def register(request):
    if request.GET:
        username = request.GET.get('username')
        pwd = request.GET.get('password')
        email = request.GET.get('email')

        u = User.objects.filter(UserName = username)
        if u:
            return HttpResponse("The name has already been used.")
        else:
            u = User(UserName = username,Password = pwd,Email = email)
            u.save()
            return HttpResponseRedirect("/game/")
Exemple #7
0
 def register(self):
     # register a new player account
     email = self.get_post('em', '')
     name = self.get_post('nm', '')
     password = self.get_post('pw', '')
     
     if len(email)<3 or not game._email_re.match(email) or not mail.is_email_valid(email):
         self.respond("0Please enter a valid e-mail address. This is important to retrieve your password if you forget it."); return
     if len(password)<5 or len(password)>15:
         self.respond("0Please enter a password of between 5 and 15 characters."); return
     if len(name)<5 or len(name)>15 or not game._name_re.match(name):
         self.respond("0Please enter a public name of between 5 and 15 characters. Only letters and numbers allowed."); return
     
     email = email.lower()
     success, info = User.create_user(auth_id='own:' + email,
                                      unique_properties=['name_lower'],
                                      password_raw=password, 
                                      email=email,
                                      name=name,
                                      name_lower=name.lower()
                                      )
     if success:
         self.respond("1"); return
     else:
         if 'auth_id' in info: # email is used as auth_id/user/login name
             self.respond('0That e-mail address is in use. Use password recovery if you forgot your password.'); return
         if 'name_lower' in info:
             self.respond('0That public name is in use, please choose another one.'); return
     
     self.respond('0')
Exemple #8
0
 def post(self):
     if not self.auth():
         self.respond('!') # not authenticated
         return
     self.out = '0'
     if self.user.friends:
         players = User.get_multi_by_id(self.user.friends)
         if players:
             # now lookup statuses
             check_t = int(time.time() - 90) # 1.5 minutes
             q = UserToken.query(UserToken.uid.IN(self.user.friends), UserToken.last_chat_refresh >= check_t)
             q.order(-UserToken.updated)
             tokens = q.fetch()
             
             self.out = '1'
             for p in players:
                 uid = int(p.get_id())
                 st = '0' # check if player is - 0:offline, 1:online, 2:bussy, 3:unknown
                 if tokens:
                     for t in tokens:
                         if t.uid == uid:
                             st = '1' # is online
                             if t.location != 'L': # not in lobby
                                 st = '2' # but is bussy (ingame)
                             break
                                         
                 self.out += '|' + str(uid) + ',' + st + ',' + p.name
                 
     self.respond()
Exemple #9
0
    def post(self):
        if not self.auth():
            self.respond('!') # not authenticated
            return
        name = self.get_post('u', '')
        self.out = '0'
        
        if name:
            # find the player's uid since I work with UIDs and not names
            q = User.query(User.name_lower == name.lower())
            user = q.get()
            if not user:
                self.respond('0'); return # not found                
            uid = int(user.get_id())            
            if uid == self.uid:
                self.respond('0'); return # cant add self
            
            self.out = '1'
            # check if not allready in friend list
            if self.user.friends:
                for f in self.user.friends:
                    if f == uid:
                        self.respond('1'); return;  # found the friend in list, return
                self.user.friends.append(uid)       # not found ,add
                self.out += str(uid) + ',' + user.name
            else: 
                self.user.friends = [uid]           # create list since it was None
                self.out += str(uid) + ',' + user.name
            
            self.user.put() # save

        self.respond()
Exemple #10
0
 def post(self, action=None):
     if 'find_button' in self.request.POST:
         find_email = self.request.POST['email']
         q = User.query(User.email==find_email)
         user = q.get()
         if user:
             key = user.key.urlsafe()                
             if key:
                 form = UserOwnsForm()
                 form.init_with_model(user)
                 context['form'] = form
                 context['edit_key'] = key
                 context['player_name'] = user.name
                 self.render_response("admin/shop_edit.html", **context)        
                 return
             
     elif 'save_button' in self.request.POST:
         form = UserOwnsForm(self.request.POST)
         if form.validate():
             key = model.Key(urlsafe=self.request.POST['edit_key'])
             bmplayer = key.get()
             bmplayer.shop=['0']                    
             form.update_model(bmplayer)
             bmplayer.put()
             
     form = UserFindForm()
     context['form'] = form
     self.render_response("admin/shop_index.html", **context)        
Exemple #11
0
def index(request):
  if request.method == 'POST':
    post = (request.POST)
    form = GameForm(post)
    if form.is_valid():
      #create the user if they don't exist already
      user = User.objects.filter(name=post['name'])[:1]
      if not user:
        new_user = User(name=post['name'])
        new_user.save()
      try:
        user = User.objects.get(name=post['name'])
      except User.DoesNotExist:
        return HttpResponse('database error', status=404)  

      #create the game including minefield then save it to database
      if post['difficulty'] == 'beginner':
        game = Game(width=9,height=9,number_of_mines=10,difficulty='beginner',user=user)
      elif post['difficulty'] == 'intermediate':
        game = Game(width=16,height=16,number_of_mines=40,difficulty='intermediate',user=user)
      elif post['difficulty'] == 'expert':
        game = Game(width=30,height=16,number_of_mines=99,difficulty='expert',user=user)
      game.create_minefield()
      game.fields_left = game.width * game.height
      game.save()

      #redirect to the game page
      args = {'name': user.name, 'game_id': str(game.id)}
      return HttpResponseRedirect(reverse('game_start', kwargs=args))
  else:
    form = GameForm()

  top_beginner_users = User.objects.filter(game__difficulty='beginner', game__won=True).order_by('game__won')
  beginner_dict = create_high_scores(top_beginner_users)

  top_inter_users = User.objects.filter(game__difficulty='intermediate', game__won=True)
  inter_dict = create_high_scores(top_inter_users)

  top_expert_users = User.objects.filter(game__difficulty='expert', game__won=True)
  expert_dict = create_high_scores(top_expert_users)

  return render(request, 'index.html', {
      'form': form, 
      'beginner_dict': beginner_dict, 
      'inter_dict': inter_dict,
      'expert_dict': expert_dict
      })
Exemple #12
0
def register():
    # Imports the register form from the file forms.py
    form = RegisterForm(request.form)

    # When the form is submitted:
    if request.method == 'POST':
        if form.validate_on_submit():

            # Input that needs to be validated
            name = request.form['username']
            passwd = request.form['password']
            email = request.form['email']

            # Check that the username is a alphanumeric string
            # between 4 and 25 characters long (whitelist)
            if not re.search("^[0-9a-zA-Z]{4,25}$", name):
                flash('Username must contain 4-25 alphanumeric characters.')
                return redirect(url_for('auth.register'))

            # Check that the password is a alphanumeric string
            # between 6 and 40 characters long (whitelist)
            if not re.search("^[0-9a-zA-Z]{6,40}$", passwd):
                flash('Password must contain 6-40 alphanumeric characters.')
                return redirect(url_for('auth.register'))

            # Check that the email is a alphanumeric string
            # between 1 and 50 characters long (whitelist)
            # this one is less restrictive because email is never used
            if not re.search("^[0-9a-zA-Z@.]{5,50}$", email):
                flash('Wrong email.')
                return redirect(url_for('auth.register'))

            # Check that the username is not registered already
            exists = db.session.query(
                User.id).filter_by(username=name).scalar()
            if exists is not None:
                flash('Username already in use.')
                return redirect(url_for('auth.register'))

            # Check that the email is not registered already
            exists = db.session.query(User.id).filter_by(email=email).scalar()
            if exists is not None:
                flash('Email already in use.')
                return redirect(url_for('auth.register'))

            # User is registered in the DB
            user = User(username=name,
                        password=bcrypt.generate_password_hash(passwd),
                        email=email,
                        wins=0,
                        losses=0)
            db.session.add(user)
            db.session.commit()

            # Redirect to login
            flash('New user registered. Try to login.')
            return redirect(url_for('auth.login'))

    return render_template('auth/register.html', form=form)
Exemple #13
0
def insert_user(username, last_action):
    user = User(username=username,
                x=DEFAULT_X,
                y=DEFAULT_Y,
                map_id=DEFAULT_MAP,
                last_login=last_action,
                shirt=0,
                hair=0,
                skin=0,
                eyes=0,
                pants=0,
                shoes=0,
                hair_accessory=0)
    user.settings = {k: v[0] for k, v in SETTINGS.items()}
    db.session.add(user)
    db.session.commit()
    return user
Exemple #14
0
def _create_new_user(rm, device_id):
    """
    Creates a new user and returns its instance
    :param rm:
    :param device_id:
    :return: user object (django model),
    """

    while True:
        try:

            with transaction.atomic():

                temp_room = Room.objects.select_for_update().filter(
                    id=rm.id).first()

                tablet_id = ConnectedTablet.objects.filter(
                    device_id=device_id).first().tablet_id

                player_id = temp_room.counter

                pseudo = parameters.pseudos[player_id]

                u = User(player_id=player_id,
                         pseudo=pseudo,
                         room_id=rm.id,
                         training_done=False,
                         score=0,
                         training_score=0,
                         state=game.room.state.states.WELCOME,
                         tablet_id=tablet_id)

                u.save()

                u.production_good = _get_user_production_good(rm, u)

                # prod i - 1 rule
                u.consumption_good = (u.production_good + 1) % rm.n_type

                u.save(update_fields=["production_good", "consumption_good"])

                temp_room.counter += 1
                temp_room.save(update_fields=['counter'])

                return u

        except (django.db.IntegrityError, django.db.OperationalError,
                django.db.utils.OperationalError, psycopg2.IntegrityError,
                psycopg2.OperationalError) as e:
            print("*" * 50)
            print("INTEGRITY ERROR" + "!" * 10)
            print(str(e))
            print("*" * 50)
            threading.Event().wait(1 + np.random.random() * 4)
            continue
Exemple #15
0
def join_room(roomCode, nickname):

    room = Room.objects.filter(code=roomCode).first()
    if not room:
        raise NotFound()

    if room.state == room.PLAYING:
        raise APIException(code=400)

    if room.user_set.count() > 8:
        raise APIException(code=400)

    user = User(room=room,
                nickname=nickname,
                is_owner=False,
                unique_id=uuid.uuid4().__str__())
    user.save()
    return JoinRoomResult(room, user)
Exemple #16
0
    def login(self):
        """ Login erquested from within game client """
        nm = self.get_post('nm', '!').lower()
        pw = self.get_post('pw', '!')
        self.out = '0'
        self.a_user = None
        try:                
            a = auth.get_auth() 
            self.a_user = a.get_user_by_password("own:" + nm, pw, remember=True, save_session=True)
        except auth.InvalidAuthIdError:
            self.out = '0Invalid E-mail'
        except auth.InvalidPasswordError:
            self.out = '0Invalid Password'
        
        # user found and password checked out
        if self.a_user:
            self.out = '0Server error. Please try again in a few minutes.'
            
            self.user_token = UserToken.get(user=self.a_user['user_id'], subject='auth', token=self.a_user['token'])
            if not self.user_token:
                self.out = '0Server error 1. Please try again in a few minutes.'

            self.user = User.get_by_id(self.a_user['user_id'])
            if not self.user:
                self.out = '0Server error 2. Please try again in a few minutes.'
                
            if self.user and self.user_token:
                uid = int(self.user.get_id())

                # update the token
                now = int(time.time())
                self.user_token.uid = uid
                self.user_token.plrname = self.user.name
                self.user_token.location = 'L' # in lobby
                self.user_token.last_game_refresh = now
                self.user_token.last_chat_refresh = now
                self.user_token.put();
                
                self.out = '1'
                
                # send the auth cookie in the body too just incase i cant read it from header                
                self.out += 'auth='+self.session_store.serializer.serialize('auth', a.session)                
                          
                # output player name      
                self.out += '^' + self.user.name + '^'
                                
                # tell client which parts of game the player own
                #for s in self.user.shop.values():
                #    self.out += s
                self.out += ''.join(self.user.shop) + '^'

                # send settings
                self.out += '1^' if self.user.email_bmchallenge else '0^'                

        self.respond()
Exemple #17
0
def register():
    if current_user.is_authenticated:
        return redirect(url_for('main'))
    form = RegistrationForm()
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user = User(username=form.username.data, password=hashed_password)
        db.session.add(user)
        db.session.commit()
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)
Exemple #18
0
    def recoverpw(self):
        email = self.get_post('em', '')
        
        if not mail.is_email_valid(email):
            self.respond("0Please enter a valid e-mail address."); return
        
        # find the user from e-mail
        email = email.lower()
        user = User.get_by_auth_id(auth_id='own:' + email)        
        if user:
            game_name = webapp2.get_app().config['APP_INFO']['NAME']
            game_url = webapp2.get_app().config['APP_INFO']['URL']
            new_pass = security.generate_random_string(length=5)
            user.password = security.generate_password_hash(new_pass, length=12)
            try:                
                user.put()
            except:
                self.respond("0Password recovery failed. Please try again later.")
                return                

            subject = game_name + " login password recovery"
            body = """
Dear %s

This is an automated response. A request was made for your login password used with %s

Your new password is: %s

Use this new password to login to the game. You may change the password in your profile section.
For more information, visit %s

Thank you
""" % (user.name, game_name, new_pass, game_url)

            # send the email via tasqueue so this request can return now and not wait for mail api
            taskqueue.add(queue_name='prioritymail', url='/work/mailer/', params={
                        'email':email,
                        'subject':subject,
                        'body':body,
                        })
            
            if webapp2.get_app().debug:            
                self.respond("1<pre>"+body+"</pre>")
            else:
                self.respond("1")
            return
        
        else:
            self.respond("0We do not have a record of that e-mail address. You may register to join this game.")
            return
        
        self.respond("0")
Exemple #19
0
def create():
    form = CreateGame()
    if form.validate_on_submit():
        print(form.errors)
        noguess = form.guess_num.data
        username = form.username.data
        timeRem = form.timerem.data

        roomCode = genRoomCode()
        roomInst = Room(room_code=roomCode,
                        num_teams=2,
                        scorecard=False,
                        full_time=timeRem,
                        time_remaining=timeRem,
                        names_per=noguess,
                        roundNo=0,
                        ct=0,
                        timer_started=0,
                        game_started=0)
        db.session.add(roomInst)
        db.session.commit()
        room = Room.query.filter_by(room_code=roomCode).first()

        client = User(username=username,
                      room_id=room.id,
                      team=0,
                      play_order=0,
                      in_play=0)
        db.session.add(client)
        db.session.commit()

        user = User.query.filter_by(username=username, room_id=room.id).first()
        # getColours(form.teams_num.data)       # WILL ADD AT LATER DATE

        # Sets Cookie for User
        resp = make_response(redirect(url_for('addnames', roomCode=roomCode)))
        resp.set_cookie('user_id', str(user.id))
        return resp

    return render_template('create.html',
                           legend='Create a New Game',
                           form=form)
Exemple #20
0
    def setUp(self):
        db.create_all()

        # Add tester
        db.session.add(User(
            email = MAIN_TESTER['email'],
            password = generate_password_hash(MAIN_TESTER['password'], 'sha256'),
            nick = MAIN_TESTER['nick'],
            created = date.today()
        ))

        # Add tester's colony
        colony = Colony(
            name = MAIN_TESTER['colony_name'],
            owner = 1,
            created = date.today(),
            build_now = dict(),
            last_harvest = datetime.now()
        )
        colony.starter_pack()
        db.session.add(colony)

        db.session.commit()
Exemple #21
0
def home():
    form = JoinGame()
    if form.validate_on_submit():
        room = Room.query.filter_by(room_code=form.roomcode.data).first()
        if not room:
            flash(f'That is not a valid room code.', 'danger')
        else:
            username = form.username.data
            client = User(username=username,
                          room_id=room.id,
                          team=0,
                          play_order=0,
                          in_play=0)
            db.session.add(client)
            db.session.commit()

            # Sets Cookie for User
            resp = make_response(
                redirect(url_for('addnames', roomCode=form.roomcode.data)))
            resp.set_cookie('user_id', str(client.id))
            return resp

    return render_template('home.html', form=form, legend='Name Game')
Exemple #22
0
    def save_user(self, user):
        db = self.application.settings.get('engine')
        local_user = None
        pictures = {}

        referred_id = uuid4().hex

        try:
            big_picture = yield self.facebook_request(
                '/me/picture',
                type='square',
                width='200',
                height='200',
                redirect=False,
                access_token=user.get('access_token'))
            pictures['small'] = user.get('picture', {}).get('data',
                                                            {}).get('url')
            if 'data' not in big_picture.keys():
                big_picture = None
            else:
                pictures['big'] = big_picture.get('data', {}).get('url')
        except Exception as e:
            big_picture = None

        log.info(big_picture)

        try:
            local_user = db.query(User).filter(
                User.facebook_id == user.get('id')).one()
            log.info(local_user)
            if local_user and not local_user.avatar:
                local_user.avatar = pictures
                db.sync(local_user)
            life = local_user = db.query(Life).filter(
                Life.user_id == local_user.id).one()
            if life.last_dec:
                self.session['last_dec'] = life.last_dec

        except flywheel.query.EntityNotFoundException:
            try:
                email = user.get('email')
                if not email:
                    email = '{}@nomail.me'.format(user.get('id'))

                local_user = User()
                local_user.id = uuid4().hex
                local_user.facebook_id = int(user.get('id'))
                local_user.facebook_token = user.get('access_token')
                local_user.facebook_data = user
                local_user.email = email
                local_user.name = user.get('name')
                local_user.referral = referred_id
                local_user.avatar = pictures
                local_user.created_at = datetime.utcnow()
                db.sync(local_user)

                user_life = Life()
                user_life.user_id = local_user.id
                user_life.created_at = datetime.utcnow()
                db.sync(user_life)

                referral = ReferralRequest()
                referral.user_id = local_user.id
                referral.id = referred_id
                referral.created_at = datetime.utcnow()
                db.sync(referral)
            except Exception as e:
                log.error(e)
                raise

            self.referred(local_user, db)
            try:
                self.application.db_conn.get('ping').incr('user_count')
            except Exception as e:
                log.warn('User incr not completed: {}'.format(e))

            try:
                if 'nomail.me' not in local_user.email:
                    mail = self.application.settings.get('mailer')
                    path = '{}/assets'.format(
                        self.application.settings.get('instance',
                                                      {}).get('front'))
                    lShare = quote('{}/r/{}'.format(
                        self.application.settings.get('instance',
                                                      {}).get('api_email'),
                        referred_id))
                    log.info(lShare)
                    # faceid = self.application.settings.get('facebook_api_key')
                    mail.send(to=local_user.email,
                              format='html',
                              subject="Bem-vindo ao Desafio Next!",
                              body=self.render_string("template-welcome.html",
                                                      userName=local_user.name,
                                                      path=path,
                                                      shareFacebook=lShare,
                                                      shareTwitter=lShare))
                    log.info('Email sent')
                else:
                    log.warning('User has no mail')
            except Exception as e:
                log.warn('EMAIL ERROR: {}'.format(e))

        except Exception as e:
            raise e

        finally:
            return local_user
    def post(self):
        """
        Create fake users for boxes
        :return: Boll
        """
        nn = datetime.utcnow()

        for u in ['teddy', 'pipocando']:
            local_user = User()
            local_user.id = u
            local_user.facebook_id = len(u)
            local_user.facebook_token = '098123098123'
            local_user.facebook_data = {'name': u}
            local_user.email = '{}@next.com'.format(u)
            local_user.name = u.capitalize()
            local_user.referral = u
            local_user.avatar = {'big': 'a', 'small': 'b'}
            local_user.created_at = nn
            self.db.sync(local_user)

            user_life = Life()
            user_life.user_id = local_user.id
            user_life.created_at = datetime.utcnow()
            self.db.sync(user_life)

            referral = ReferralRequest()
            referral.user_id = local_user.id
            referral.id = u
            referral.created_at = nn
            self.db.sync(referral)

        return {
            "message": "",
            "status": "success",
        }
Exemple #24
0
 def save_player(self, username, room):
     self.user = User(game=Game.objects.get(room_name=room),
                      username=username,
                      date_created=datetime.datetime.now())
     self.user.save()
     return self.user
Exemple #25
0
class IRepositoryPlayer:
    def __init__(self):
        self.user = None

    def save_player(self, username, room):
        self.user = User(game=Game.objects.get(room_name=room),
                         username=username,
                         date_created=datetime.datetime.now())
        self.user.save()
        return self.user

    def get_player_by_id(self, user_id):
        self.user = User.objects.get(id=user_id)
        return self.user

    def get_players_by_username_and_room(self, username, room):
        self.user = User.objects.filter(
            username=username, game=Game.objects.get(room_name=room).id)
        return self.user

    def update_player_username_by_id(self, user_id, name):
        self.user = User.objects.get(id=user_id)
        self.user.username = name
        self.user.save()
        return self.user

    def update_player_username_by_username(self, username, name):
        self.user = User.objects.get(username=username)
        self.user.username = name
        self.user.save()
        return self.user

    def update_player_monster_name_by_id(self, user_id, monster):
        self.user = User.objects.get(id=user_id)
        self.user.monster_name = monster
        self.user.save()
        return self.user

    def update_player_monster_name_by_username(self, username, monster):
        self.user = User.objects.get(username=username)
        self.user.monster_name = monster
        self.user.save()
        return self.user

    def delete_player_by_id(self, user_id):
        self.user = User.objects.get(id=user_id)
        self.user.delete()
        return None

    def delete_player_by_username(self, username):
        self.user = User.objects.get(username=username)
        self.user.delete()
        return None
Exemple #26
0
 def post(self):
     if not self.auth():
         self.respond('!') # not authenticated
         return
     
     name = self.get_post('u', '')
     channel_ids = self.get_post('n', '')
     
     self.out = '0' #default is error
     
     # player wants to join/create a private channel with another player    
     if name:
         # find the player's uid since I work with UIDs and not names
         q = User.query(User.name_lower == name.lower())
         user = q.get()
         if not user:
             self.respond('0'); return # not found                
         uid = int(user.get_id())            
         if uid == self.uid:
             self.respond('0'); return # cant PM self
             
         # first check if the channel between the two players dont exist, else create it
         # check for channel(s) where this user and target is in the uids and it is pm_channel 
         q = ChatChannel.query(ChatChannel.pm_channel == True, ChatChannel.uids == uid, ChatChannel.uids == self.uid)
         channel = q.get() # get first result
         if channel:
             # there is a channel, update its created date so it is fresh and then send it to player
             channel.created = datetime.datetime.now()
             channel.put()
             self.out = '1' + str(channel.key.id()) 
         else:
             # first check if requested user exist
             target = User.get_by_id(uid)
             
             # create the channel
             if target:
                 channel = ChatChannel(pm_channel = True, uids = [uid, self.uid] )
                 key = channel.put()
                 if key:
                     self.out = '1' + str(key.id())
         
     # player wants the names for channels
     elif channel_ids:
         
         sids = channel_ids.split(',')
         cids = [int(s) for s in sids if s]
         channels = ChatChannel.get_multi_by_id(cids) if cids else None
         if channels: 
             self.out = '1'
             for channel in channels:
                 
                 # send the name as is if the channel has one 
                 if channel.name:
                     self.out += '|' + str(channel.key.id()) + ',' + channel.name
                     
                 # else try and find the name it should be, prolly a player name for pm channel
                 else:
                     uid = 0 # find the other player's id in the list
                     for idd in channel.uids:
                         if idd != self.uid:
                             uid = idd
                             break
                     
                     if uid > 0:
                         player = User.get_by_id(uid)
                         if player:
                             self.out += '|' + str(channel.key.id()) + ',' + player.name  
     
     self.respond()