Exemple #1
0
    def user_login(self, user_id, password):
        db = ORMUtil.initDB()
        Authentication = ORMUtil.getAuthenticationORM()
        Profile = ORMUtil.getProfileORM()

        if (db and Authentication and Profile) is None:
            return None, 100

        try:
            result = db.session.query(
                Authentication.hmac_key,
                Authentication.encrypted_password).filter(
                    Authentication.user_id == user_id).first()
        except Exception as exc:
            return None, 122

        if result is None:
            return None, 121

        hmac_key = result.hmac_key.encode('ascii')
        encrypted_password = Util.getEncryptedPassword(hmac_key, password)

        if result.encrypted_password == encrypted_password:
            try:
                result = db.session.query(Profile.nickname).filter(
                    Profile.user_id == user_id).first()
                if result.nickname is None:
                    return FlaskUser(user_id), 0
                else:
                    return FlaskUser(user_id), 0
            except Exception as exc:
                return None, 124
        else:
            return None, 123
Exemple #2
0
	def account_save_profile(self, user_id, nickname=None, email=None, department=None, introduction=None):
		db = ORMUtil.initDB()
		Profile = ORMUtil.getProfileORM()

		if (db and Profile) is None:
			return None, 100

		#プロフィール取得
		try:
			result = db.session.query(Profile).filter(Profile.user_id == user_id).first()
		except Exception as exc:
			return None, 141

		if result is None:
			return None, 145

		#変更しない値は現在の値を使う(=>変更なし)
		if nickname is None:
			nickname = result.nickname
		if email is None:
			email = result.email
		if department is None:
			department = result.department
		if introduction is None:
			introduction = result.introduction

		#コミット
		try:
			db.session.query(Profile).filter(Profile.user_id == user_id).update({'nickname': nickname, 'email': email, 'department': department, 'introduction': introduction})
			db.session.commit()
		except Exception as exc:
			return None, 143

		return "ok", 0
			
Exemple #3
0
    def user_profile(self, user_id):
        db = ORMUtil.initDB()
        Profile = ORMUtil.getProfileORM()

        if (db and Profile) is None:
            return None, 100

        try:
            result = db.session.query(Profile).filter(
                Profile.user_id == user_id).first()
        except Exception as exc:
            return None, 141

        if result is None:
            return None, 142

        msg = {
            "user_id": result.user_id,
            "nickname": result.nickname,
            "icon_path": result.icon_path,
            "email": result.email,
            "department": result.department,
            "introduction": result.introduction
        }

        return msg, 0
Exemple #4
0
	def account_status(self, user_id):
		db = ORMUtil.initDB()
		User = ORMUtil.getUserORM()

		if (db and User) is None:
			return None, 100

		try:
			result = db.session.query(User.gift, User.stock).filter(User.user_id == user_id).first()
		except Exception as exc:
			return None, 122

		if result is None:
			return None, 121
			
		msg = {"receive Like": result.gift, "stock Like": result.stock}

		return msg, 0
Exemple #5
0
    def user_isExist(self, user_id):
        db = ORMUtil.initDB()
        User = ORMUtil.getUserORM()

        if (db and User) is None:
            return None, 100

        try:
            user = db.session.query(
                User.user_id).filter(User.user_id == user_id).first()
        except Exception as exc:
            current_app.logger.critical("user_isExist: Unknown error: %s" %
                                        exc)
            return None, 199

        if user is None:
            return False, 0
        else:
            return True, 0
Exemple #6
0
    def user_register(self, user_id, password):
        db = ORMUtil.initDB()
        Authentication = ORMUtil.getAuthenticationORM()
        User = ORMUtil.getUserORM()
        UserHash = ORMUtil.getUserHashORM()
        Profile = ORMUtil.getProfileORM()

        if (db and Authentication and User and UserHash and Profile) is None:
            return None, 100

        hmac_key = Util.generateRandomBytes(32)
        encrypted_password = Util.getEncryptedPassword(hmac_key, password)
        user_hash = Util.generateUserHash(user_id)

        try:
            db.session.add(
                Authentication(user_id, encrypted_password, hmac_key))
            db.session.add(
                User(user_id, email=None, gift=0,
                     stock=Util.DefaultStockValue))
            db.session.add(UserHash(user_id, user_hash))
            db.session.add(
                Profile(user_id,
                        nickname=None,
                        icon_path=None,
                        email=None,
                        department=None,
                        introduction=None))
            db.session.commit()
        except sqlalchemy.exc.IntegrityError as exc:
            current_app.logger.critical("user_register: Integrity error: %s" %
                                        exc)
            return None, 110
        except Exception as exc:
            current_app.logger.critical("user_register: Unknown error: %s" %
                                        exc)
            return None, 199

        return "ok", 0
Exemple #7
0
    def __set_profile(self, user_id):
        db = ORMUtil.initDB()
        Profile = ORMUtil.getProfileORM()

        if (db and Profile) is None:
            return user_id

        try:
            result = db.session.query(Profile).filter(
                Profile.user_id == user_id).first()
        except Exception as exc:
            self.nickname = user_id
            self.department = "現在参照できません"

        if result.nickname is None:
            self.nickname = user_id
        else:
            self.nickname = result.nickname

        if result.department is None:
            self.department = "所属未設定"
        else:
            self.department = result.department
Exemple #8
0
    def user_delete(self, user_id):
        db = ORMUtil.initDB()
        Authentication = ORMUtil.getAuthenticationORM()
        User = ORMUtil.getUserORM()
        UserHash = ORMUtil.getUserHashORM()
        Profile = ORMUtil.getProfileORM()

        if (db and Authentication and User and Profile) is None:
            return None, 100

        try:
            db.session.query(Profile).filter(
                Profile.user_id == user_id).delete()
            db.session.query(User).filter(User.user_id == user_id).delete()
            db.session.query(UserHash).filter(
                UserHash.user_id == user_id).delete()
            db.session.query(Authentication).filter(
                Authentication.user_id == user_id).delete()
            db.session.commit()
        except Exception as exc:
            current_app.logger.critical("user_delete: Unknown error: %s" % exc)
            return None, 199

        return "ok", 0
Exemple #9
0
    def user_list(self, page=None):
        db = ORMUtil.initDB()
        Profile = ORMUtil.getProfileORM()

        if (db and Profile) is None:
            return None, 100

        try:
            result = db.session.query(Profile).all()
        except Exception as exc:
            return None, 122

        users = []
        for user in result:
            user_dict = {
                "user_id": user.user_id,
                "nickname": user.nickname,
                "icon_path": user.icon_path,
                "department": user.department,
                "introduction": user.introduction
            }
            users.append(user_dict)

        return users, 0
Exemple #10
0
	def gifts(self, user_id, mode=None):
		db = ORMUtil.initDB()
		GiftTransaction = ORMUtil.getGiftTransactionORM()
		User = ORMUtil.getUserORM()
		UserHash = ORMUtil.getUserHashORM()
		Profile = ORMUtil.getProfileORM()

		if (db and GiftTransaction and User and UserHash) is None:
			return None, 100

		try:
			result = db.session.query(UserHash.user_hash).filter(UserHash.user_id == user_id).first()
		except Exception as exc:
			return None, 123

		if result is None:
			return None, 124

		user_hash = result.user_hash
		try:
			if mode == "send":
				result = db.session.query(GiftTransaction).filter(GiftTransaction.sender == user_hash).all()
			elif mode == "receive":
				result = db.session.query(GiftTransaction).filter(GiftTransaction.receiver == user_hash).all()
			else:
				result = db.session.query(GiftTransaction).filter(or_(GiftTransaction.sender == user_hash, GiftTransaction.receiver == user_hash)).all()
		except Exception as exc:
			return None, 122

		if result is None:
			return None, 121
		
		events = []

		#ニックネーム取得
		nicknames = {}
		user_ids = {}
		user_ids[user_hash] = user_id
		nicknames[user_hash] = "あなた"
		for event in result:
			for target_hash in [event.sender, event.receiver]:
				if target_hash in nicknames:
					continue
				else:
					try:
						tmp_result = db.session.query(UserHash.user_id).filter(UserHash.user_hash == target_hash).first()
						if tmp_result is None:
							user_ids[target_hash] = ""
							nicknames[target_hash] = "(退会したユーザ)"
						else:
							peer_user_id = tmp_result.user_id
							user_ids[target_hash] = peer_user_id

							tmp_result = db.session.query(Profile.nickname).filter(Profile.user_id == peer_user_id).first()
							peer_nickname = tmp_result.nickname
							#ニックネームが設定されていない場合はuser_idを用いる
							if peer_nickname is None:
								nicknames[target_hash] = peer_user_id
							else:
								nicknames[target_hash] = peer_nickname
					except Exception as exc:
						current_app.logger.critical("gifts getNickname error: %s" % exc)	
						return None, 125
			else:
				continue

		for event in result:
			json = {"date": event.created_at, "sender": user_ids[event.sender], "sender_nickname": nicknames[event.sender], "receiver":user_ids[event.receiver], "receiver_nickname": nicknames[event.receiver], "value": event.value, "message": event.message}
			events.append(json)
		
		if events is not None:
			return events, 0
		else:
			return None, 0
Exemple #11
0
	def gift(self, sender, receiver, value, message, is_anonymous):
		db = ORMUtil.initDB()
		User = ORMUtil.getUserORM()
		UserHash = ORMUtil.getUserHashORM()
		GiftTransaction = ORMUtil.getGiftTransactionORM()

		if (db and User and GiftTransaction) is None:
			return None, 100

		#ユーザ存在確認
		try:
			hasSender = db.session.query(User.user_id).filter(User.user_id == sender).first()
			hasReceiver = db.session.query(User.user_id).filter(User.user_id == receiver).first()
		except Exception as exc:
			current_app.logger.critical("gift: hasSender/hasReceiver Unknown error: %s" % exc)
			return None, 199
			
		if (hasSender and hasReceiver) is None:
			return None, 131

		#like残数確認
		if Util.InfiniteMode:
			pass
		else:
			try:
				sender_stock = db.session.query(User.stock).filter(User.user_id == sender).first()
			except Exception as exc:
				current_app.logger.critical("gift: sender_stock Unknown error: %s" % exc)
				return None, 199

			if sender_stock.stock < value:
				return None, 132

		#hash取得
		try:
			result_sender_hash = db.session.query(UserHash.user_hash).filter(UserHash.user_id == sender).first()
			result_receiver_hash = db.session.query(UserHash.user_hash).filter(UserHash.user_id == receiver).first()
		except Exception as exc:
			current_app.logger.critical("gift: get hash Unknown error: %s" % exc)
			return None, 199

		sender_hash = result_sender_hash.user_hash
		receiver_hash = result_receiver_hash.user_hash
		
		if sender_hash is None or receiver_hash is None:
			return None, 133
			
		
		#コミット
		try:
			db.session.add(GiftTransaction(sender_hash, receiver_hash, value, message, is_anonymous, None))
			db.session.query(User).filter(User.user_id == receiver).update({'gift': User.gift + value})
			if Util.InfiniteMode:
				pass
			else:
				db.session.query(User).filter(User.user_id == sender).update({'stock': User.stock - value})
			db.session.commit()
			
		except Exception as exc:
			current_app.logger.critical("gift: commit transaction Unknown error: %s" % exc)
			return None, 199

		return "ok", 0