Example #1
0
 def post(self):
     from app_config import USER_ROLE_ADMIN
     from app.database_models import Threads
     if g.user.role == USER_ROLE_ADMIN:
         # 系统删帖
         t_id = request.json.get('thread_id', None)
         session = AppUtils.get_session()
         try:
             th = session.query(Threads).filter_by(id=t_id).first()
             if th is None:
                 return ResponseClass.warn(ResponseCode.THREAD_NOT_EXIST)
             session.delete(th)
             session.commit()
             return ResponseClass.ok()
         finally:
             session.close()
     else:
         t_id = request.json.get('thread_id', None)
         session = AppUtils.get_session()
         th = session.query(Threads).filter_by(user_id=g.user.id,
                                               id=t_id).first()
         if th is None:
             return ResponseClass.warn(ResponseCode.THREAD_NOT_EXIST)
         AppUtils.delete_to_sql(th).close()
         return ResponseClass.ok()
 def post(self):
     import app_config
     from app.database_models import Comments, Threads
     if g.user.role == app_config.USER_ROLE_ADMIN:
         comment_id = request.json.get('comment_id', None)
         if comment_id is not None:
             session = AppUtils.get_session()
             try:
                 comment = session.query(Comments).filter_by(
                     id=comment_id).first()
                 if comment is not None:
                     session.delete(comment)
                     session.commit()
                 return ResponseClass.ok()
             finally:
                 session.close()
     else:
         thread_id = request.json.get('thread_id', None)
         comment_id = request.json.get('comment_id', None)
         if comment_id is None or thread_id is None:
             return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
         session = AppUtils.get_session()
         c = session.query(Comments).filter_by(id=comment_id,
                                               user_id=g.user.id).first()
         t = session.query(Threads).filter_by(id=thread_id).first()
         if t is None or c is None:
             session.close()
             return ResponseClass.warn(ResponseCode.COMMENT_NOT_FOUND)
         result = t.del_comment(comment_id)
         if result:
             session.close()
             return ResponseClass.ok()
         else:
             session.close()
             return ResponseClass.warn(ResponseCode.SERVER_ERROR)
 def get(self):
     args = self.parser.parse_args()
     page = args.get('page', None)
     if page is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     if g.user.role == conf.USER_ROLE_ADMIN:
         session = AppUtils.get_session()
         try:
             items = session.query(Item).order_by(desc(Item.id)).offset(
                 page * 10).limit(10).all()
             data = []
             for item in items:
                 item_dict = AppUtils.serialize(item)
                 data.append(item_dict)
             return ResponseClass.ok_with_data(data)
         except Exception as e:
             pass
         finally:
             session.close()
     else:
         session = AppUtils.get_session()
         try:
             items = session.query(Item).filter_by(isOn=True).order_by(
                 Item.name).offset(page * 10).limit(10).all()
             data = []
             for item in items:
                 item_dict = AppUtils.serialize(item)
                 data.append(item_dict)
             return ResponseClass.ok_with_data(data)
         except Exception as e:
             pass
         finally:
             session.close()
Example #4
0
 def post(self):
     ids = request.json.get("ids", [])
     if len(ids) == 0:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     total_credits = g.user.credits
     try:
         need_paid = 0
         cart_item = []
         for id in ids:
             item = session.query(Cart).filter_by(id=id).first()
             if item is not None:
                 need_paid += item.item.credits
                 cart_item.append(item)
         if need_paid > total_credits:
             return ResponseClass.warn(ResponseCode.NO_ENOUGH_CREDITS)
         else:
             # cart_id -> repository
             user = session.query(User).filter_by(id=g.user.id).first()
             user.credits -= need_paid
             for cart in cart_item:
                 repo = Repository()
                 repo.user_id = g.user.id
                 repo.item_id = cart.item_id
                 session.add(repo)
                 session.delete(cart)
             session.commit()
             return ResponseClass.ok_with_data(user.credits)
     except Exception as e:
         pass
     finally:
         session.close()
 def post(self):
     if g.user.role == conf.USER_ROLE_USER:
         return ResponseClass.warn(ResponseCode.NOT_ROOT)
     else:
         session = AppUtils.get_session()
         id = request.json.get('id', None)
         print(id)
         item: Item
         if id is not None:
             # 修改items
             item = session.query(Item).filter_by(id=id).first()
         else:
             item = Item()
         item.name = request.json.get('name')
         item.detail = request.json.get('detail')
         item.credits = request.json.get('credits')
         item.isOn = request.json.get('isOn')
         item.img = request.json.get('img')
         if id is None:
             session.add(item)
         try:
             session.commit()
             return ResponseClass.ok_with_data({"id": item.id})
         finally:
             session.close()
Example #6
0
 def get(self, user_id):
     t1 = time.clock()
     session = AppUtils.get_session()
     try:
         from models.models import User
         q_user = session.query(User).filter_by(id=user_id).with_for_update().first()
         if q_user is None:
             return ResponseClass.warn(ResponseCode.USER_NOT_EXIST)
         else:
             # 判断是否点过赞,点过赞则警告
             from models.models import UserLikes
             result = session.query(UserLikes).filter_by(user_id=g.user.id,
                                                         like_user=user_id).with_for_update().first()
             if result is None:
                 # 点赞
                 q_user.likes += 1
                 likes = UserLikes()
                 likes.user_id = g.user.id
                 likes.like_user = user_id
                 session.add(likes)
                 return ResponseClass.ok()
             else:
                 # TODO 测试并发量
                 q_user.likes += 1
                 return ResponseClass.warn(ResponseCode.ALREADY_LIKED)
     finally:
         session.commit()
         print("请求时间:%f" % (time.clock() - t1))
         session.close()
Example #7
0
 def post(self):
     user_id = g.user.id
     session = app_utils.AppUtils.get_session()
     try:
         from app.database_models import SignIn
         record = session.query(SignIn).filter_by(user_id=user_id).first()
         from app.database_models import User
         user = session.query(User).filter_by(id=user_id).first()
         if record is None:
             # 从来没签过到
             sign_in_record = SignIn()
             sign_in_record.user_id = user_id
             user.credits = user.credits + 1
             session.add(sign_in_record)
             return ResponseClass.ok()
         else:
             pre_sign_in_time = record.sign_in_time
             current_time = datetime.now()
             if current_time.day > pre_sign_in_time.day:
                 # 可以签到,更新时间
                 record.sign_in_time = current_time
                 user.credits = user.credits + 1
                 return ResponseClass.ok()
             else:
                 return ResponseClass.warn(ResponseCode.ALREADY_SIGN_IN)
     finally:
         session.commit()
         session.close()
Example #8
0
 def get(self, user_id):
     session = AppUtils.get_session()
     try:
         from app.database_models import User
         q_user = session.query(User).filter_by(
             id=user_id).with_for_update().first()
         if q_user is None:
             return ResponseClass.warn(ResponseCode.USER_NOT_EXIST)
         else:
             # 判断是否点过赞,点过赞则警告
             from app.database_models import UserLikes
             result = session.query(UserLikes).filter_by(
                 user_id=g.user.id,
                 like_user=user_id).with_for_update().first()
             if result is None:
                 # 点赞
                 q_user.likes += 1
                 likes = UserLikes()
                 likes.user_id = g.user.id
                 likes.like_user = user_id
                 session.add(likes)
             else:
                 q_user.likes -= 1
                 session.delete(result)
             session.commit()
             return ResponseClass.ok_with_data(q_user.likes)
     finally:
         session.close()
 def post(self):
     t_id = request.json.get('thread_id', None)  # 帖子ID
     c_id = request.json.get('code_id', None)
     content = request.json.get('content', None)
     if t_id is None or content is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     try:
         from app.database_models import Threads
         thread = session.query(Threads).filter_by(id=t_id).first()
         if thread is None:
             return ResponseClass.warn(ResponseCode.THREAD_NOT_EXIST)
         from app.database_models import Comments
         new_comment = Comments()
         new_comment.code_id = c_id
         new_comment.user_id = g.user.id
         new_comment.threads_id = t_id
         new_comment.content = content
         result = thread.submit_comment(new_comment, session)
         if result:
             user = session.query(User).filter_by(id=g.user.id).first()
             user.credits += 5
             session.commit()
             return ResponseClass.ok()
         else:
             return ResponseClass.warn(ResponseCode.OPERATION_TOO_FAST)
     finally:
         session.close()
Example #10
0
 def get(self):
     # 普通用户无权限
     if g.user.role == USER_ROLE_USER:
         return ResponseClass.warn(ResponseCode.NOT_ROOT)
     else:
         session = app_utils.AppUtils.get_session()
         try:
             users = session.query(User).all()
             data = [user.get_minimal_data() for user in users]
             return ResponseClass.ok_with_data(data)
         finally:
             session.close()
Example #11
0
 def post(self):
     code_id = request.json.get('code_id', None)
     title = request.json.get('title', None)
     subtitile = request.json.get('subtitle', '')
     from app.database_models import Threads
     if not Threads.verify_title(title):
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     thread = Threads()
     thread.user_id = g.user.id
     thread.title = title
     thread.code_id = code_id
     thread.subtitle = subtitile
     AppUtils.add_to_sql(thread).close()
     return ResponseClass.ok()
Example #12
0
 def get(self):
     args = self.parser.parse_args()
     page_num = int(args.get('page', None))
     if page_num is None or type(page_num) != int or page_num <= 0:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     # 将page_num-1,适应计算
     page_num = page_num - 1
     session = AppUtils.get_session()
     from app.database_models import Threads
     threads = session.query(Threads).filter_by(user_id=g.user.id).offset(
         page_num * self.page_num_per_request).limit(
             self.page_num_per_request).all()
     threads = [tr.get_public_dict() for tr in threads]
     return ResponseClass.ok_with_data(threads)
Example #13
0
 def get(self, id):
     session = AppUtils.get_session()
     try:
         user = g.user
         if user.id != id:
             # 查询他人的信息
             query_user = session.query(User).filter_by(id=id).first()
             return ResponseClass.ok_with_data(query_user.get_minimal_data(
             )) if query_user is not None else ResponseClass.warn(
                 ResponseCode.USER_NOT_EXIST)
         else:
             ResponseClass.ok_with_data(user.get_self_data())
     finally:
         session.close()
Example #14
0
 def post(self):
     username = request.json.get('username', None)
     password = request.json.get('password', None)
     code = request.json.get('code', None)
     mail = request.json.get('mail', None)
     if username is None or password is None or code is None or mail is None or not re.match(
             r'[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+', mail):
         return jsonify(code=ResponseCode.FORMAT_ERROR, msg="用户名密码格式错误")
     cache_email = cache.get(code)
     if cache_email != mail:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     else:
         cache.delete(code)
         cache.delete(mail)
     session = AppUtils.get_session()
     try:
         # 验证用户名
         AppUtils.validate_username(username)
         from models.models import User
         user = User()
         user.username = username
         user.mail = mail
         user.hash_password(password)
         user.credits = 0
         session.add(user)
         session.commit()
         # 数据库
         from app_config import SQLSession
         return jsonify(code=0, data=user.get_self_data())
     except Exception as e:
         return jsonify(code=-1, msg=e.args[0])
     finally:
         session.close()
Example #15
0
 def post(self):
     cart_id = int(request.json.get("item_id", None))
     if cart_id is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     try:
         cart = Cart()
         cart.item_id = cart_id
         cart.user_id = g.user.id
         session.add(cart)
         session.commit()
         return ResponseClass.ok()
     except Exception as e:
         pass
     finally:
         session.close()
Example #16
0
 def post(self):
     if g.user.role == conf.USER_ROLE_USER:
         return ResponseClass.warn(ResponseCode.NOT_ROOT)
     else:
         session = AppUtils.get_session()
         try:
             item = session.query(Item).filter_by(
                 id=request.json.get("id")).first()
             if item is not None:
                 item.isOn = not item.isOn
                 session.commit()
                 return ResponseClass.ok_with_data(item.isOn)
             else:
                 return ResponseClass.warn(ResponseCode.ITEM_NOT_FOUND)
         finally:
             session.close()
 def get(self, file_name):
     args = request.args
     print(args)
     token = args.get('token', None)
     if token is None:
         return ResponseClass.warn(-2)
     from app.database_models import User
     user = User.verify_auth_token(token)
     if user is not None:
         response = make_response(send_from_directory(Cf.upload_path, file_name, as_attachment=True))
         response.headers["Content-Type"] = "application/octet-stream"
         response.headers["Accept-ranges"] = "bytes"
         response.headers["Content-Disposition"] = "attachment; filename={}".format(
             file_name.encode().decode('latin-1'))
         return response
     else:
         return ResponseClass.warn(-1)
Example #18
0
 def post(self):
     cart_id = int(request.json.get("item_id", None))
     if cart_id is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     try:
         item = session.query(Cart).filter_by(user_id=g.user.id,
                                              id=cart_id).first()
         if item is None:
             return ResponseClass.warn(ResponseCode.ITEM_NOT_FOUND)
         session.delete(item)
         session.commit()
         return ResponseClass.ok()
     except Exception as e:
         pass
     finally:
         session.close()
 def get(self, offset: int):
     session = AppUtils.get_session()
     try:
         result = Code.get_code(session, g.user.id, offset)
         result = list(map(Code.get_public_dict, result))
         return ResponseClass.ok_with_data(result)
     finally:
         session.close()
Example #20
0
    def post(self):
        if g.user.role == USER_ROLE_USER:
            return ResponseClass.warn(ResponseCode.NOT_ROOT)
        else:
            id = request.json.get("id", None)
            if id is None:
                return ResponseClass.warn(ResponseCode.USER_NOT_EXIST)
            session = app_utils.AppUtils.get_session()
            try:
                user = session.query(User).filter_by(id=int(id)).first()
                if user is None:
                    return ResponseClass.warn(ResponseCode.USER_NOT_EXIST)

                user.enable = not user.enable
                session.commit()
                return ResponseClass.ok_with_data(user.enable)
            finally:
                session.close()
 def get(self, id):
     session = AppUtils.get_session()
     try:
         from app.database_models import Code
         code = session.query(Code).filter_by(user_id=g.user.id, id=id).first()
         if code is not None:
             session.delete(code)
         return jsonify(ResponseClass.ok())
     finally:
         session.close()
 def get(self):
     args = self.parser.parse_args()
     thread_id = args.get("thread_id", None)
     page = args.get("page", None)
     if thread_id is None or page is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     try:
         from app.database_models import Comments
         comments = session.query(Comments) \
             .filter_by(threads_id=thread_id) \
             .order_by(desc(Comments.create_date)) \
             .offset(int(page) * 10) \
             .limit(10) \
             .all()
         comments = [item.get_public_dict() for item in comments]
         return ResponseClass.ok_with_data(comments)
     finally:
         session.close()
Example #23
0
 def post(self):
     name = request.json.get("username", None)
     if name is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     try:
         user = session.query(User).filter_by(username=name).first()
         if user is None:
             user = session.query(User).filter_by(mail=name).first()
         if user is None:
             return ResponseClass.warn(ResponseCode.USER_NOT_EXIST)
         else:
             # 发送邮件
             if self.send_reset_password_mail(user):
                 return ResponseClass.ok()
             else:
                 # 没发出去,服务器错误
                 return ResponseClass.warn(ResponseCode.SERVER_ERROR)
     finally:
         session.close()
Example #24
0
    def post(self):
        field = request.json.get("field", None)
        value = request.json.get("value", None)
        if field is not None and value is not None:
            user = g.user  # 需要重新查找,这个User未绑定sql,无法更新
            session = AppUtils.get_session()
            user = session.query(User).filter_by(id=user.id).first()
            try:
                if field == "nickname":
                    user.nickname = value
                    session.commit()
                    return ResponseClass.ok()
                elif field == "avatar_url":
                    user.avatar_url = value
                    session.commit()
                    return ResponseClass.ok()
            finally:
                session.close()

        return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
Example #25
0
 def get(self):
     args = self.parser.parse_args()
     page = args.get('page', None)
     if page is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     session = AppUtils.get_session()
     try:
         repository_items = session.query(Repository).filter_by(
             user_id=g.user.id).order_by(
                 conf.database.desc(Repository.create_date)).offset(
                     page * 10).limit(10).all()
         data = []
         for repository_item in repository_items:
             item_data = AppUtils.serialize(repository_item.item)
             item_data['repo_id'] = repository_item.id
             data.append(item_data)
         return ResponseClass.ok_with_data(data)
     except Exception as e:
         pass
     finally:
         session.close()
 def post(self):
     code = request.json.get('code', None)
     new_password = request.json.get('new_password', None)
     if code is None or new_password is None or not User.password_illigal(
             new_password):
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     else:
         user_id = cache.get(code)
         if user_id is None:
             return ResponseClass.warn(ResponseCode.SERVER_FORBIDDEN)
         session = AppUtils.get_session()
         try:
             user = session.query(User).filter_by(id=user_id).first()
             if user is None:
                 return ResponseClass.warn(ResponseCode.USER_NOT_EXIST)
             user.hash_password(new_password)
             session.commit()
             cache.delete(code)
             cache.delete(user_id)
             return ResponseClass.ok_with_data(user.get_self_data())
         finally:
             session.close()
Example #27
0
 def post(self):
     url = request.json.get("url", None)
     url = AppUtils.get_local_path(url)
     print("url:", url)
     session = AppUtils.get_session()
     from app.database_models import Code
     code = session.query(Code).filter_by(local_path=url).first()
     if code is None:
         return ResponseClass.warn(ResponseCode.FILE_NOT_EXIST)
     session.close()
     # 先存入CodeResult
     from app.database_models import CodeResult
     code_result = CodeResult()
     code_result.code_id = code.id
     code_result.user_id = g.user.id
     from app_config import code_manager
     session = AppUtils.add_to_sql(code_result)
     block = CodeBlock(user_id=code_result.user_id, task_id=code_result.id)
     session.close()
     return_value = code_manager.add_task(block)
     if return_value:
         return ResponseClass.ok_with_data({"code_id": code_result.code_id})
     else:
         return ResponseClass.warn(ResponseCode.SUBMIT_ERROR)
Example #28
0
 def get(self):
     user_id = g.user.id
     args = self.parser.parse_args()
     code_id = args.get('code_id', None)
     if code_id is None:
         return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
     else:
         from app_config import SQLSession
         session = SQLSession()
         try:
             from app.database_models import CodeResult
             result = session.query(CodeResult).filter_by(
                 user_id=user_id, code_id=code_id).first()
             if result is None:
                 return ResponseClass.warn(ResponseCode.FILE_NOT_EXIST)
             return ResponseClass.ok_with_data({
                 "status": result.status,
                 "result": result.result
             })
         except Exception as e:
             print(e)
             return ResponseClass.warn(ResponseCode.SERVER_ERROR)
         finally:
             session.close()
Example #29
0
 def post(self):
     username = request.json.get('username', None)
     password = request.json.get('password', None)
     if username is None or password is None:
         return jsonify(code=ResponseCode.FORMAT_ERROR)
     # 查找用户
     session = AppUtils.get_session()
     try:
         user = session.query(User).filter_by(username=username).first()
         if user is None:
             user = session.query(User).filter_by(mail=username).first()
         if user is None:
             return jsonify(code=ResponseCode.USER_NOT_EXIST)
         if not user.verify_password_only(password):
             return jsonify(code=ResponseCode.PASSWORD_ERROR)
         # 用户验证成功
         return ResponseClass.ok_with_data(user.get_self_data())
     finally:
         session.close()
 def get_comments(self, comment_id=-1):
     session = AppUtils.get_session()
     try:
         if comment_id == -1:
             comment_id = self.comment_id
         comment = session.query(Comments).filter_by(id=comment_id).first()
         if comment is None:
             return ResponseClass.warn(ResponseCode.COMMENT_NOT_FOUND)
         # 向后获取十条评论
         comments = [comment.get_public_dict()]
         cnt = 1
         while cnt < 10 and comment.next_id is not None:
             n_comment = session.query(Comments).filter_by(
                 id=comment.next_id).first()
             comments.append(n_comment.get_public_dict())
         return comments
     except Exception as e:
         print(e)
         return None
     finally:
         session.close()