playcommunity / play-community Goto Github PK
View Code? Open in Web Editor NEW一个基于 Play Framework 开发的开源社区系统。
Home Page: http://www.playscala.cn/
License: Other
一个基于 Play Framework 开发的开源社区系统。
Home Page: http://www.playscala.cn/
License: Other
使用Mac/Linux,支持增加多个mongo地址/实例
大致如下:
文章支持显示当前的所属分类,增加下一篇上一篇显示,允许匿名评论,减小评论的时间成本,提供评论时可选留下邮箱等联系方式。点击发表说说无效。可考虑将手动选择页面调整为下拉自动分页并支持指出跳转至*页,增加答题浏览学习积分,并有头衔(滑稽),支持阶梯评论(滑稽)
绑定后可以方便的使用QQ授权登录
你好,我在按照说明配置后出现如下情况,能有人帮我解决下吗? 个人企鹅:2567782485.
play.api.UnexpectedException: Unexpected exception[CreationException: Unable to create injector, see the following errors:
1 error]
at play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:186)
at play.core.server.DevServerStart$$anon$1.get(DevServerStart.scala:124)
at play.core.server.netty.PlayRequestHandler.modelConversion(PlayRequestHandler.scala:70)
at play.core.server.netty.PlayRequestHandler.handle(PlayRequestHandler.scala:81)
at play.core.server.netty.PlayRequestHandler.channelRead(PlayRequestHandler.scala:184)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at com.typesafe.netty.http.HttpStreamsHandler.channelRead(HttpStreamsHandler.java:129)
at com.typesafe.netty.http.HttpStreamsServerHandler.channelRead(HttpStreamsServerHandler.java:96)
Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:
1 error
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:470)
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
at com.google.inject.Guice.createInjector(Guice.java:99)
at com.google.inject.Guice.createInjector(Guice.java:84)
at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185)
at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137)
at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
at play.core.server.DevServerStart$$anon$1.$anonfun$reload$3(DevServerStart.scala:174)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
Caused by: java.util.concurrent.TimeoutException: Futures timed out after [60 seconds]
at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:255)
at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:259)
at scala.concurrent.Await$.$anonfun$result$1(package.scala:215)
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
at scala.concurrent.Await$.result(package.scala:142)
at services.InitializeService.(InitializeService.scala:84)
at services.InitializeService$$FastClassByGuice$$eb0b4755.newInstance()
at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:111)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
新增checkResourcePermission[A](_idField: String)
支持markdown语法
社区中的文章支持一下分享到其他第三方平台,例如微信、微博等社交平台。
可考虑在文章下面添加分享按钮,点击之后选择分享的平台。
目前源码中某些链接的 url 包含着 playscala.cn 的地址,这样如果在本地运行,且没有修改的话,就会直接跳转到该网站,比如说这一行 https://github.com/playcommunity/play-community/blob/master/app/views/main.scala.html#L64 ,用户点击登录或者注册就会跳到在线论坛,而不是本地,所以开这个 issue 建议能做些修改。
我注意到 playscala.cn 网站并没有全站 https ,所以似乎需要 https://secure.playscala.cn/ 这样一个地址来处理用户敏感信息,如密码。所以我觉得可以考虑全站 https ,然后把这些路径改成相对的。这样对新用户来说,不需要触及太多的代码,就可以在自己的机器上运行起整个网站。
预计开发时间:30-60分钟。
实现时可以参考已经完成重构的ResourceController。实现时请遵守以下几个原则:
models.User.collectResource(resource: Resource)
repository/mongo/MongoXxxRepository
的方法app/services
实现一个领域服务类个人页面展示我关注的人,和关注我的人。订阅关注人的活跃通知
在新增或编辑帖子时,可以通过弹窗选择分类,分类树展示基于jstree实现,弹窗内的布局使用Layui实现。目前功能均已实现,但是弹窗界面稍显简陋,需要进行一番美化。
查看弹窗方式为:进入首页,然后单击右上角我要分享按钮,然后单击选择分类,弹窗界面如下:
弹窗对应View路基为:views.html.board.categoryTree
美化建议:
加强用户密码保护措施,防止密码泄露。
使用Argon2算法重构现有的MD5摘要算法。Argon2是目前公认的最安全的密码哈希算法。
@Entity("common-user")
case class User(
...
salt: Option[String],
argon2Hash: Option[String]
)
salt
存放16字节盐值,每个用户盐值单独生成,生成方法如下:byte[] salt = new byte[16];
SecureRandom r = new SecureRandom();
r.nextBytes(salt);
argon2Hash
存放Argon2密码摘要。security
包下新增PasswordEncoder
接口和Argon2PasswordEncoder
实现Argon2PasswordEncoder
实例。1) MD5 转 Argon2 时序图
如果用户尚未完成Argon2升级,则执行如下升级流程:
2) 重构后登陆流程
在登录逻辑中增加MD5和Argon2的判断,分别执行不同的密码校验策略:
以下几个模块的重构逻辑与登录模块相同:
预计开发时间:1-2小时。
实现时可以参考已经完成重构的ResourceController。实现时请遵守以下几个原则:
models.User.collectResource(resource: Resource)
repository/mongo/MongoXxxRepository
的方法app/services
实现一个领域服务类预计开发时间:1-2小时。
实现时可以参考已经完成重构的ResourceController。实现时请遵守以下几个原则:
models.User.collectResource(resource: Resource)
repository/mongo/MongoXxxRepository
的方法app/services
实现一个领域服务类为前后端分离做准备(如有必要)。
目前只有GET POST。。。请求传参是?ss=1 极不好
预计开发时间:15-30分钟。
实现时可以参考已经完成重构的ResourceController。实现时请遵守以下几个原则:
models.User.collectResource(resource: Resource)
repository/mongo/MongoXxxRepository
的方法app/services
实现一个领域服务类如题
目前社区新增版块功能,页面效果如下:
正如贡献指南-3.3 社区版块(Board)设计所述,社区所有资源均挂在某个分类节点上,分类树的第1层为版块节点。
上图中蓝框中的path参数表示当前的分类路径为/scala/scala1/scala2,所在版块为/scala,红框部分为本次开发任务,即根据path参数,自动渲染分类导航菜单。渲染规则如下:
@(path: String, categoryList: List[Category])
考虑到代码提交者变多,需要对提交后的格式进行统一,提交前需要先在本地编译,将格式化后的提交。
需要的插件
codecov
travis
scalastyle
含代码检查、在线CI编译检测及统一的单元测试、scala代码风格统一
目前用户激活和密码重置使用不同的加解密组件,应该进行统一。并且为了简化用户部署,秘钥在系统第一次启动时自动生成。
预计开发时间:3小时
通过微信服务号实现扫码登录。
Describe the bug
查看消息后,无论刷新还是继续查看,还是会有消息提示的计数,而点击清空是正常的
QQ登录快,使用分享组件
需要先申请开发者认证,获取密钥,才能开发。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.