Giter VIP home page Giter VIP logo

backend's People

Contributors

jingyijun avatar ppolariss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

backend's Issues

Penalty API应接受floor id而非user id

前端无法从floor得到发送者的user id,故无法按照原有api发送penalty请求。

另外,处理举报时建议接受penalty等级,而非直接接受silent。

查看编辑历史API

Is your feature request related to a problem? Please describe.
No

Describe the solution you'd like
需要一个API,以查看某floor的编辑历史。
可以局限于管理员可用,也可以开放给所有用户使用,建议后者。

同时,floor应增加一个标记代表该帖是否曾被编辑过。

Describe alternatives you've considered

退出登录

客户端请求 logout,服务器应删除回收其 token

自动化举报处理

  • 对于举报超过一定数量的帖子,自动添加“*举报较多”标签或删除
  • 对被举报数较多的用户,自动禁言一段时间
  • 同一用户的举报不重复受理

或者也可以不自动处理,而是引起管理员注意

  • 上述阈值建议设置为时间的函数,即帖子存在的时间越长,触发处理所需的举报数越多;
  • 若举报间隔时间较长,很久以前的举报可以忽略。

限流机制

对于不宜鼓励讨论等的内容,增加限流机制。

对于处于限流机制控制下的洞,具有以下特性:

  1. 不出现在搜索结果中(但仍可以通过洞号直接访问)
  2. 每次刷新/请求,都有概率不显示在首页信息流
  3. 被回复后,不被刷新至顶部

以上三条特性可根据限流等级进行调配。

第三条特性可能涉及后端组装响应的顺序依据,但考虑到限流机制对社区的正面意义,为此付出的代码量是可以接受的。

API KEY 生成机制

Is your feature request related to a problem? Please describe.
API KEY 的生成机制迟迟没有提交,这是 APP 端认证用户的手段,属于最基本的功能,应当被优先解决。

Describe the solution you'd like
等待能否获得学校的oauth,在找到更好的认证方式之前,正式版将暂缓发布

Describe alternatives you've considered

  1. 目前提到的基于时间生成令牌
    理由:由于种子需要被写进前端,无论算法是否开源,都有被反编译的可能
  2. 将uis学号和密码发给后端,后端完成验证即可
    理由:后端可能被黑客植入后门截取所有凭据,可能触发UIS风控

“建议修改”功能

此功能用于处理根据管理规范具有灵活性的部分违规言论。是特殊情况下,在各方面综合平衡考虑下的一个良好处理方案。

具体特性如下:

  1. 管理员可以对 floor 标记为建议修改
  2. 处于“建议修改”状态下的 floor,应当具有以下特性:
    1. 其他普通用户视角下,前端显示为 “已被建议修改”
    2. 本人视角下,前端显示为发言原文以及建议修改的 banner
    3. 管理员视角下,前端显示为是否已修改,以及建议修改次数
  3. 应该进行对“建议修改”次数的统计,以增强管理的灵活性

后悔药

根据树洞用户需求,可以考虑添加一种删除或修改自己的言论的机制,但

  • 不应随意修改,即修改应当付出一定代价,例如短时禁言(改错别字除外)
  • 保留修改记录

爬虫和DDOS防御

对某一IP或某一用户短时间内大量请求;或载入时间非常早的帖子的请求进行人机验证

可以考虑ReCAPTCHA等第三方服务

特殊Tag

Which feature would you want to enhance, and why?
floor加一个字段:特殊Tag

缺少 apns_key 导致程序报错

#6 中实现的发送 apns 通知功能,由于本地缺少 apns_key 而导致报错:

File "E:\CS\OpenTreeHole\api\utils.py", line 19, in <module>
    apns_client = APNsClient('apns_key.pem', use_sandbox=(environ.get("HOLE_ENV") != "production"),
  File "C:\Users\shi\.virtualenvs\OpenTreeHole\lib\site-packages\apns2\client.py", line 56, in __init__
    self.__credentials = CertificateCredentials(credentials, password)  # type: Credentials
  File "C:\Users\shi\.virtualenvs\OpenTreeHole\lib\site-packages\apns2\credentials.py", line 37, in __init__
    ssl_context = init_context(cert=cert_file, cert_password=password)
  File "C:\Users\shi\.virtualenvs\OpenTreeHole\lib\site-packages\hyper\tls.py", line 131, in init_context
    context.load_cert_chain(cert, password=cert_password)
FileNotFoundError: [Errno 2] No such file or directory

@KavinZhao 向团队成员提供此 key,或者设法解决此问题。

另提请各位开发者在本地环境发生变更时要及时说明并更新项目文档,否则会影响开发工作乃至生产环境的稳定性。

被禁言用户发帖会导致HTTP 500

Describe the bug
被禁言用户试图发帖会导致内部错误

To Reproduce
先禁言用户,然后创建一个新的树洞

Version
dev-latest

Additional context

Exception Value: can't compare offset-naive and offset-aware datetimes
Exception Location: /www/backend/api/models.py, line 185, in is_silenced

隐藏功能

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
设计API直接隐藏一个主题帖

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

服务器安全

考虑到Secrets、证书私钥和APNS key等敏感数据存储在生产服务器上,必须部署SELinux以严格控制敏感文件访问权限。

  • 为Docker部署SELinux,(参考这个?)
  • 严格落实最小权限原则,确保所有暴露在互联网上的进程以低权限用户运行
  • 安全审计机制?

具体细节可能需要进一步讨论,这个Issue先放在这里作为备忘录

Feature Request: 跨帖引用

目前所使用的[reply_to]方式仅能引用同一楼层内的一个帖子,但有时会遇到需要跨贴引用的情况(e.g. 如何评价某贴中的某回复)

因此,可以考虑新增如下功能:

  • 支持跨帖引用
  • 支持引用多个帖子,并可以定义引用在文字中出现的位置

虽然引用主要是前端渲染的事情,但理想情况下服务器应当将被引用的内容随原内容一起传给前端,以减少请求次数。

删除主题帖

Is your feature request related to a problem? Please describe.
为弥补某些发错、发重帖子,或恶意刷屏的行为,应设置删除主题帖的功能。

通知功能

使用 websocket 实现通知实时推送

业务逻辑:

  • 建立 websocket 连接时推送所有未读消息
  • 数据库被修改时自动发送通知(暂不使用任务队列)

场景:

  • 帖子被回复时
  • 收藏的主题帖有新帖时
  • 被举报时(管理员必须通知,用户可选)
  • 用户权限发生变化时(必须)
  • 所发帖被修改时(必须)

改进

  • 诸场景必须是用户可配置的
  • 亦提供 http 接口,但强烈不建议通过轮询的方式获取新通知

使用自定义 Auth User Model

目前我们使用User Profile存储用户数据。这是旧版Django的推荐做法,现已不建议使用。

根据Django文档

如果你准备启动一个新的项目,强烈推荐你设置一个自定义的用户模型,即使默认的用户模型对你来说已经足够了。这个模型的行为与默认用户模型相通,但是你能在未来需要的时候自定义它

在你已经建立数据库表之后再去修改 AUTH_USER_MODEL 要困难的多,因为它会影响外键和多对多关系。

因此,建议将Django内置的AUTH_USER_MODEL替换为自定义模型,并加入用户数据的相关字段,而不是新开一个单独的Profile。这将使模型具有更强的可扩展性,并减少很多不必要的麻烦(例如User Profile不存在)等。

图片上传与用户隐私问题

不应该在上传图片的commit message中包含上传者的id,否则可以通过社工等方式推理出用户真实身份。

CORS 错误

Describe the bug
这几天在白天(约8:00~21:00)间HTTP请求hole.hath.top均会出现CORS 错误(跨域资源共享错误:PreflightMissingAllowOriginHeader),而在夜间基本上不会有此问题。

To Reproduce
在上述时间段请求任何hath.hole.top下的路径即可.

Screenshots (Optional)
image

Version
dev-latest

删除推送通知token的API

Is your feature request related to a problem? Please describe.
No

Describe the solution you'd like
需要一个API以在用户退出登录时删除push token

移动端推送通知改进

  • 改用 shared APNsClient instance
  • 仅在举报被处理后通知用户
  • APNS推送通知确保大小 < 4kb
  • 推送通知副标题显示内容

无法举报

Describe the bug
举报时发生内部错误

To Reproduce
POST http://hole.hath.top/reports

Version
dev-latest

Additional context

IntegrityError
(1048, "Column 'dealed_by_id' cannot be null")

举报通知

逻辑上来说,帖子被举报似乎不需要获得通知,相比之下,被举报的帖子被处理,或者自己提交的举报被处理才需要获得通知。

signals 单元测试

Which feature would you want to enhance, and why?
signals.py 里面的代码没有单元测试

Describe the solution you'd like

开发/管理帖特殊标记

为了更准确地识别开发团队和管理团队的公告帖子,应当允许为这些帖子添加一个标记。

此标记随Floor发送给前端,由前端渲染为一个特殊的tag(或者其他用户无法伪造的方式),以方便用户辨别。

此标记还可以用于标注因违规而删除的帖子,以防用户伪造"该内容因违反社区规范而删除"的整活文字。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.