.
This commit is contained in:
parent
2dc0484a3d
commit
2f9e3297ab
110
apidoc.html
110
apidoc.html
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,25 +1,50 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<application port="5002">
|
<application port="5002">
|
||||||
|
|
||||||
|
<!-- 详细配置说明见: http://redkale.org/redkale.html#redkale_confxml -->
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<source name="redis" value="org.redkalex.cache.RedisCacheSource" xxx="16">
|
<source name="redis" value="org.redkalex.cache.RedisCacheSource" xxx="16">
|
||||||
<node addr="redishost" port="6379" password="hello"/>
|
<node addr="redishost" port="6379" password="pwd123"/>
|
||||||
</source>
|
</source>
|
||||||
|
|
||||||
<properties load="conf.txt">
|
<properties>
|
||||||
|
<property name="mongo.host" value="redishost"/>
|
||||||
|
<property name="mongo.database" value="redbbs"/>
|
||||||
</properties>
|
</properties>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<server protocol="HTTP" host="0.0.0.0" port="80" root="root">
|
<server protocol="HTTP" host="0.0.0.0" port="80" root="root">
|
||||||
|
|
||||||
<services autoload="true"/>
|
<services autoload="true"/>
|
||||||
<rest path="os" base="com.lxyer.bbs.base.BaseServlet" autoload="true"/>
|
|
||||||
|
<!--<filters autoload="true"/>-->
|
||||||
|
|
||||||
|
<!--<rest path="" autoload="true"/>--> <!-- base指定的自定义HttpServlet子类必须标记@HttpUserType, 不设置base则视为没有当前用户信息设置 -->
|
||||||
|
<rest path="os" base="com.lxyer.bbs.base.BaseServlet" autoload="true">
|
||||||
|
|
||||||
|
</rest>
|
||||||
|
|
||||||
<request>
|
<request>
|
||||||
<!--从X-Real-IP参数中获取IP-->
|
<!--从X-Real-IP参数中获取IP-->
|
||||||
<remoteaddr value="request.headers.X-Real-IP"/>
|
<remoteaddr value="request.headers.X-Real-IP"/>
|
||||||
</request>
|
</request>
|
||||||
<servlets autoload="true"/>
|
|
||||||
<render value="com.lxyer.bbs.base.EnjoyRender"/>
|
<servlets path="" autoload="true"/>
|
||||||
|
|
||||||
|
<resource-servlet webroot="root" index="index.html">
|
||||||
|
<cache limit="2M" lengthmax="1M" watch="false"/>
|
||||||
|
|
||||||
|
<!--<rewrite type="location" match="^/([^-]+)-[^-\.]+\.png(.*)" forward="/$1.png"/>-->
|
||||||
|
</resource-servlet>
|
||||||
|
<!--
|
||||||
|
【节点在<server>中唯一】
|
||||||
|
当Server为HTTP协议时,render才有效. 指定输出引擎的实现类
|
||||||
|
value: 输出引擎的实现类, 必须是org.redkale.net.http.HttpRender的子类
|
||||||
|
-->
|
||||||
|
<render value="com.lxyer.bbs.base.EnjoyRender">
|
||||||
|
</render>
|
||||||
</server>
|
</server>
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
|
@ -5,14 +5,10 @@
|
|||||||
<persistence-unit name="redbbs" transaction-type="RESOURCE_LOCAL">
|
<persistence-unit name="redbbs" transaction-type="RESOURCE_LOCAL">
|
||||||
<shared-cache-mode>ALL</shared-cache-mode>
|
<shared-cache-mode>ALL</shared-cache-mode>
|
||||||
<properties>
|
<properties>
|
||||||
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://558cfc37a10ef.sh.cdb.myqcloud.com:3817/?autoReconnect=true&characterEncoding=utf8&useSSL=true"/>
|
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://mysqlhost:3306/?autoReconnect=true&characterEncoding=utf8"/>
|
||||||
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
|
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
|
||||||
<property name="javax.persistence.jdbc.user" value="cdb_outerroot"/>
|
<property name="javax.persistence.jdbc.user" value="guest"/>
|
||||||
<property name="javax.persistence.jdbc.password" value="l237809796"/>
|
<property name="javax.persistence.jdbc.password" value="hello"/>
|
||||||
<!--<property name="javax.persistence.jdbc.url" value="jdbc:mysql://mysqlhost:3306/?autoReconnect=true&characterEncoding=utf8"/>
|
|
||||||
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
|
|
||||||
<property name="javax.persistence.jdbc.user" value="root"/>
|
|
||||||
<property name="javax.persistence.jdbc.password" value="*hello9796!"/>-->
|
|
||||||
</properties>
|
</properties>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
<!--- Created by JUECHENG at 2018/7/27 11:42. --->
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>404</title>
|
|
||||||
</head>
|
|
||||||
<body style="padding: 50px">
|
|
||||||
<h1>由于网站被攻击,已暂停访问</h1>
|
|
||||||
<p>
|
|
||||||
黑客把数据全部清空了,数据库有半个月没做备案了(失误),但是有所有一切操作的日志记录,
|
|
||||||
包括黑客的攻击数据,ip,当然也有这十多天的文章提交数据,所以理论上,所有数据能够恢复,
|
|
||||||
待恢复后再开做开放访问;谢谢你的关注和支持;
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
----------- 绝尘,QQ237809796
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,11 +0,0 @@
|
|||||||
<!--- Created by JUECHENG at 2018/7/19 10:38. --->
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Title</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,96 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<title>聊天记录</title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="http://local.res.layui.com/layui/src/css/layui.css">
|
|
||||||
<style>
|
|
||||||
body .layim-chat-main{height: auto;}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div class="layim-chat-main">
|
|
||||||
<ul id="LAY_view"></ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="LAY_page" style="margin: 0 10px;"></div>
|
|
||||||
|
|
||||||
|
|
||||||
<textarea title="消息模版" id="LAY_tpl" style="display:none;">
|
|
||||||
{{# layui.each(d.data, function(index, item){
|
|
||||||
if(item.id == parent.layui.layim.cache().mine.id){ }}
|
|
||||||
<li class="layim-chat-mine"><div class="layim-chat-user"><img src="{{ item.avatar }}"><cite><i>{{ layui.data.date(item.timestamp) }}</i>{{ item.username }}</cite></div><div class="layim-chat-text">{{ layui.layim.content(item.content) }}</div></li>
|
|
||||||
{{# } else { }}
|
|
||||||
<li><div class="layim-chat-user"><img src="{{ item.avatar }}"><cite>{{ item.username }}<i>{{ layui.data.date(item.timestamp) }}</i></cite></div><div class="layim-chat-text">{{ layui.layim.content(item.content) }}</div></li>
|
|
||||||
{{# }
|
|
||||||
}); }}
|
|
||||||
</textarea>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
上述模版采用了 laytpl 语法,不了解的同学可以去看下文档:http://www.layui.com/doc/modules/laytpl.html
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<script src="http://local.res.layui.com/layui/src/layui.js"></script>
|
|
||||||
<script>
|
|
||||||
layui.use(['layim', 'laypage'], function(){
|
|
||||||
var layim = layui.layim
|
|
||||||
,layer = layui.layer
|
|
||||||
,laytpl = layui.laytpl
|
|
||||||
,$ = layui.jquery
|
|
||||||
,laypage = layui.laypage;
|
|
||||||
|
|
||||||
//聊天记录的分页此处不做演示,你可以采用laypage,不了解的同学见文档:http://www.layui.com/doc/modules/laypage.html
|
|
||||||
|
|
||||||
|
|
||||||
//开始请求聊天记录
|
|
||||||
var param = location.search //获得URL参数。该窗口url会携带会话id和type,他们是你请求聊天记录的重要凭据
|
|
||||||
|
|
||||||
//实际使用时,下述的res一般是通过Ajax获得,而此处仅仅只是演示数据格式
|
|
||||||
,res = {
|
|
||||||
code: 0
|
|
||||||
,msg: ''
|
|
||||||
,data: [{
|
|
||||||
username: '纸飞机'
|
|
||||||
,id: 100000
|
|
||||||
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
|
||||||
,timestamp: 1480897882000
|
|
||||||
,content: 'face[抱抱] face[心] 你好啊小美女'
|
|
||||||
}, {
|
|
||||||
username: 'Z_子晴'
|
|
||||||
,id: 108101
|
|
||||||
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
|
||||||
,timestamp: 1480897892000
|
|
||||||
,content: '你没发错吧?face[微笑]'
|
|
||||||
},{
|
|
||||||
username: 'Z_子晴'
|
|
||||||
,id: 108101
|
|
||||||
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
|
||||||
,timestamp: 1480897898000
|
|
||||||
,content: '你是谁呀亲。。我爱的是贤心!我爱的是贤心!我爱的是贤心!重要的事情要说三遍~'
|
|
||||||
},{
|
|
||||||
username: 'Z_子晴'
|
|
||||||
,id: 108101
|
|
||||||
,avatar: 'http://tva3.sinaimg.cn/crop.0.0.512.512.180/8693225ajw8f2rt20ptykj20e80e8weu.jpg'
|
|
||||||
,timestamp: 1480897908000
|
|
||||||
,content: '注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。\n该模版文件所在目录(相对于layui.js):\n/css/modules/layim/html/chatlog.html'
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
|
|
||||||
//console.log(param)
|
|
||||||
|
|
||||||
var html = laytpl(LAY_tpl.value).render({
|
|
||||||
data: res.data
|
|
||||||
});
|
|
||||||
$('#LAY_view').html(html);
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,38 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<title>发现</title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="http://local.res.layui.com/layui/src/css/layui.css">
|
|
||||||
<style>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div style="margin: 15px;">
|
|
||||||
<blockquote class="layui-elem-quote">此为自定义的【查找】页面,因需求不一,所以官方暂不提供该模版结构与样式,实际使用时,可移至该文件到你的项目中,对页面自行把控。
|
|
||||||
<br>文件所在目录(相对于layui.js):/css/modules/layim/html/find.html</blockquote>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script src="http://local.res.layui.com/layui/src/layui.js"></script>
|
|
||||||
<script>
|
|
||||||
layui.use(['layim', 'laypage'], function(){
|
|
||||||
var layim = layui.layim
|
|
||||||
,layer = layui.layer
|
|
||||||
,laytpl = layui.laytpl
|
|
||||||
,$ = layui.jquery
|
|
||||||
,laypage = layui.laypage;
|
|
||||||
|
|
||||||
//一些添加好友请求之类的交互参见文档
|
|
||||||
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
"code": 0,
|
|
||||||
"pages": 1,
|
|
||||||
"data": [
|
|
||||||
{
|
|
||||||
"id": 76,
|
|
||||||
"content": "申请添加你为好友",
|
|
||||||
"uid": 168,
|
|
||||||
"from": 166488,
|
|
||||||
"from_group": 0,
|
|
||||||
"type": 1,
|
|
||||||
"remark": "有问题要问",
|
|
||||||
"href": null,
|
|
||||||
"read": 1,
|
|
||||||
"time": "刚刚",
|
|
||||||
"user": {
|
|
||||||
"id": 166488,
|
|
||||||
"avatar": "http://q.qlogo.cn/qqapp/101235792/B704597964F9BD0DB648292D1B09F7E8/100",
|
|
||||||
"username": "李彦宏",
|
|
||||||
"sign": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 75,
|
|
||||||
"content": "申请添加你为好友",
|
|
||||||
"uid": 168,
|
|
||||||
"from": 347592,
|
|
||||||
"from_group": 0,
|
|
||||||
"type": 1,
|
|
||||||
"remark": "你好啊!",
|
|
||||||
"href": null,
|
|
||||||
"read": 1,
|
|
||||||
"time": "刚刚",
|
|
||||||
"user": {
|
|
||||||
"id": 347592,
|
|
||||||
"avatar": "http://q.qlogo.cn/qqapp/101235792/B78751375E0531675B1272AD994BA875/100",
|
|
||||||
"username": "麻花疼",
|
|
||||||
"sign": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 62,
|
|
||||||
"content": "雷军 拒绝了你的好友申请",
|
|
||||||
"uid": 168,
|
|
||||||
"from": null,
|
|
||||||
"from_group": null,
|
|
||||||
"type": 1,
|
|
||||||
"remark": null,
|
|
||||||
"href": null,
|
|
||||||
"read": 1,
|
|
||||||
"time": "10天前",
|
|
||||||
"user": {
|
|
||||||
"id": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 60,
|
|
||||||
"content": "马小云 已经同意你的好友申请",
|
|
||||||
"uid": 168,
|
|
||||||
"from": null,
|
|
||||||
"from_group": null,
|
|
||||||
"type": 1,
|
|
||||||
"remark": null,
|
|
||||||
"href": null,
|
|
||||||
"read": 1,
|
|
||||||
"time": "10天前",
|
|
||||||
"user": {
|
|
||||||
"id": null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 61,
|
|
||||||
"content": "贤心 已经同意你的好友申请",
|
|
||||||
"uid": 168,
|
|
||||||
"from": null,
|
|
||||||
"from_group": null,
|
|
||||||
"type": 1,
|
|
||||||
"remark": null,
|
|
||||||
"href": null,
|
|
||||||
"read": 1,
|
|
||||||
"time": "10天前",
|
|
||||||
"user": {
|
|
||||||
"id": null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,208 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
|
||||||
<title>消息盒子</title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="../../../layui.css?v=1">
|
|
||||||
<style>
|
|
||||||
.layim-msgbox{margin: 15px;}
|
|
||||||
.layim-msgbox li{position: relative; margin-bottom: 10px; padding: 0 130px 10px 60px; padding-bottom: 10px; line-height: 22px; border-bottom: 1px dotted #e2e2e2;}
|
|
||||||
.layim-msgbox .layim-msgbox-tips{margin: 0; padding: 10px 0; border: none; text-align: center; color: #999;}
|
|
||||||
.layim-msgbox .layim-msgbox-system{padding: 0 10px 10px 10px;}
|
|
||||||
.layim-msgbox li p span{padding-left: 5px; color: #999;}
|
|
||||||
.layim-msgbox li p em{font-style: normal; color: #FF5722;}
|
|
||||||
|
|
||||||
.layim-msgbox-avatar{position: absolute; left: 0; top: 0; width: 50px; height: 50px;}
|
|
||||||
.layim-msgbox-user{padding-top: 5px;}
|
|
||||||
.layim-msgbox-content{margin-top: 3px;}
|
|
||||||
.layim-msgbox .layui-btn-small{padding: 0 15px; margin-left: 5px;}
|
|
||||||
.layim-msgbox-btn{position: absolute; right: 0; top: 12px; color: #999;}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<ul class="layim-msgbox" id="LAY_view"></ul>
|
|
||||||
|
|
||||||
<div style="margin: 0 15px;">
|
|
||||||
<blockquote class="layui-elem-quote">注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。
|
|
||||||
<br>该模版文件所在目录(相对于layui.js):/css/modules/layim/html/msgbox.html</blockquote>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<textarea title="消息模版" id="LAY_tpl" style="display:none;">
|
|
||||||
{{# layui.each(d.data, function(index, item){
|
|
||||||
if(item.from){ }}
|
|
||||||
<li data-uid="{{ item.from }}" data-fromGroup="{{ item.from_group }}">
|
|
||||||
<a href="/u/{{ item.from }}/" target="_blank">
|
|
||||||
<img src="{{ item.user.avatar }}" class="layui-circle layim-msgbox-avatar">
|
|
||||||
</a>
|
|
||||||
<p class="layim-msgbox-user">
|
|
||||||
<a href="/u/{{ item.from }}/" target="_blank">{{ item.user.username||'' }}</a>
|
|
||||||
<span>{{ item.time }}</span>
|
|
||||||
</p>
|
|
||||||
<p class="layim-msgbox-content">
|
|
||||||
{{ item.content }}
|
|
||||||
<span>{{ item.remark ? '附言: '+item.remark : '' }}</span>
|
|
||||||
</p>
|
|
||||||
<p class="layim-msgbox-btn">
|
|
||||||
<button class="layui-btn layui-btn-small" data-type="agree">同意</button>
|
|
||||||
<button class="layui-btn layui-btn-small layui-btn-primary" data-type="refuse">拒绝</button>
|
|
||||||
</p>
|
|
||||||
</li>
|
|
||||||
{{# } else { }}
|
|
||||||
<li class="layim-msgbox-system">
|
|
||||||
<p><em>系统:</em>{{ item.content }}<span>{{ item.time }}</span></p>
|
|
||||||
</li>
|
|
||||||
{{# }
|
|
||||||
}); }}
|
|
||||||
</textarea>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
上述模版采用了 laytpl 语法,不了解的同学可以去看下文档:http://www.layui.com/doc/modules/laytpl.html
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<script src="../../../../layui.js?v=1"></script>
|
|
||||||
<script>
|
|
||||||
layui.use(['layim', 'flow'], function(){
|
|
||||||
var layim = layui.layim
|
|
||||||
,layer = layui.layer
|
|
||||||
,laytpl = layui.laytpl
|
|
||||||
,$ = layui.jquery
|
|
||||||
,flow = layui.flow;
|
|
||||||
|
|
||||||
var cache = {}; //用于临时记录请求到的数据
|
|
||||||
|
|
||||||
//请求消息
|
|
||||||
var renderMsg = function(page, callback){
|
|
||||||
|
|
||||||
//实际部署时,请将下述 getmsg.json 改为你的接口地址
|
|
||||||
|
|
||||||
$.get('getmsg.json', {
|
|
||||||
page: page || 1
|
|
||||||
}, function(res){
|
|
||||||
if(res.code != 0){
|
|
||||||
return layer.msg(res.msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
//记录来源用户信息
|
|
||||||
layui.each(res.data, function(index, item){
|
|
||||||
cache[item.from] = item.user;
|
|
||||||
});
|
|
||||||
|
|
||||||
callback && callback(res.data, res.pages);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
//消息信息流
|
|
||||||
flow.load({
|
|
||||||
elem: '#LAY_view' //流加载容器
|
|
||||||
,isAuto: false
|
|
||||||
,end: '<li class="layim-msgbox-tips">暂无更多新消息</li>'
|
|
||||||
,done: function(page, next){ //加载下一页
|
|
||||||
renderMsg(page, function(data, pages){
|
|
||||||
var html = laytpl(LAY_tpl.value).render({
|
|
||||||
data: data
|
|
||||||
,page: page
|
|
||||||
});
|
|
||||||
next(html, page < pages);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//打开页面即把消息标记为已读
|
|
||||||
/*
|
|
||||||
$.post('/message/read', {
|
|
||||||
type: 1
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
//操作
|
|
||||||
var active = {
|
|
||||||
//同意
|
|
||||||
agree: function(othis){
|
|
||||||
var li = othis.parents('li')
|
|
||||||
,uid = li.data('uid')
|
|
||||||
,from_group = li.data('fromGroup')
|
|
||||||
,user = cache[uid];
|
|
||||||
|
|
||||||
//选择分组
|
|
||||||
parent.layui.layim.setFriendGroup({
|
|
||||||
type: 'friend'
|
|
||||||
,username: user.username
|
|
||||||
,avatar: user.avatar
|
|
||||||
,group: parent.layui.layim.cache().friend //获取好友分组数据
|
|
||||||
,submit: function(group, index){
|
|
||||||
|
|
||||||
//将好友追加到主面板
|
|
||||||
parent.layui.layim.addList({
|
|
||||||
type: 'friend'
|
|
||||||
,avatar: user.avatar //好友头像
|
|
||||||
,username: user.username //好友昵称
|
|
||||||
,groupid: group //所在的分组id
|
|
||||||
,id: uid //好友ID
|
|
||||||
,sign: user.sign //好友签名
|
|
||||||
});
|
|
||||||
parent.layer.close(index);
|
|
||||||
othis.parent().html('已同意');
|
|
||||||
|
|
||||||
|
|
||||||
//实际部署时,请开启下述注释,并改成你的接口地址
|
|
||||||
/*
|
|
||||||
$.post('/im/agreeFriend', {
|
|
||||||
uid: uid //对方用户ID
|
|
||||||
,from_group: from_group //对方设定的好友分组
|
|
||||||
,group: group //我设定的好友分组
|
|
||||||
}, function(res){
|
|
||||||
if(res.code != 0){
|
|
||||||
return layer.msg(res.msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
//将好友追加到主面板
|
|
||||||
parent.layui.layim.addList({
|
|
||||||
type: 'friend'
|
|
||||||
,avatar: user.avatar //好友头像
|
|
||||||
,username: user.username //好友昵称
|
|
||||||
,groupid: group //所在的分组id
|
|
||||||
,id: uid //好友ID
|
|
||||||
,sign: user.sign //好友签名
|
|
||||||
});
|
|
||||||
parent.layer.close(index);
|
|
||||||
othis.parent().html('已同意');
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//拒绝
|
|
||||||
,refuse: function(othis){
|
|
||||||
var li = othis.parents('li')
|
|
||||||
,uid = li.data('uid');
|
|
||||||
|
|
||||||
layer.confirm('确定拒绝吗?', function(index){
|
|
||||||
$.post('/im/refuseFriend', {
|
|
||||||
uid: uid //对方用户ID
|
|
||||||
}, function(res){
|
|
||||||
if(res.code != 0){
|
|
||||||
return layer.msg(res.msg);
|
|
||||||
}
|
|
||||||
layer.close(index);
|
|
||||||
othis.parent().html('<em>已拒绝</em>');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$('body').on('click', '.layui-btn', function(){
|
|
||||||
var othis = $(this), type = othis.data('type');
|
|
||||||
active[type] ? active[type].call(this, othis) : '';
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
Binary file not shown.
Before Width: | Height: | Size: 12 KiB |
Binary file not shown.
Before Width: | Height: | Size: 18 KiB |
Binary file not shown.
Before Width: | Height: | Size: 38 KiB |
Binary file not shown.
Before Width: | Height: | Size: 33 KiB |
Binary file not shown.
Before Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
|||||||
/** layui-v2.3.0 MIT License By https://www.layui.com */
|
|
||||||
;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='<ul class="layui-rate" '+(i.readonly?"readonly":"")+">",u=1;u<=i.length;u++){var r='<li class="layui-inline"><i class="layui-icon '+(u>Math.floor(i.value)?o:s)+'" '+l+"></i></li>";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'<li><i class="layui-icon layui-icon-rate-half" '+l+"></i></li>":n+=r}n+="</ul>"+(i.text?'<span class="layui-inline">'+i.value+"星":"")+"</span>";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)});
|
|
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
root/res/wangEditor/wangEditor.min.css
vendored
1
root/res/wangEditor/wangEditor.min.css
vendored
File diff suppressed because one or more lines are too long
4
root/res/wangEditor/wangEditor.min.js
vendored
4
root/res/wangEditor/wangEditor.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,13 +0,0 @@
|
|||||||
package com.lxyer.bbs.mail;
|
|
||||||
|
|
||||||
import com.lxyer.bbs.base.BaseService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 邮件服务
|
|
||||||
* Created by liangxianyou at 2018/5/13 9:45.
|
|
||||||
*/
|
|
||||||
public class MailService extends BaseService {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,84 +0,0 @@
|
|||||||
package com.lxyer.bbs.weixin;
|
|
||||||
|
|
||||||
import com.lxyer.bbs.base.BaseService;
|
|
||||||
import com.lxyer.bbs.base.user.UserService;
|
|
||||||
import com.lxyer.bbs.comment.CommentService;
|
|
||||||
import com.lxyer.bbs.content.ContentService;
|
|
||||||
import org.redkale.net.http.RestMapping;
|
|
||||||
import org.redkale.net.http.RestService;
|
|
||||||
import org.redkale.util.Utility;
|
|
||||||
import org.redkalex.cache.RedisCacheSource;
|
|
||||||
import org.redkalex.weixin.WeiXinMPService;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.io.File;
|
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by JUECHENG at 2018/1/12 0:14.
|
|
||||||
*/
|
|
||||||
@RestService(name = "wx",automapping = true, comment = "微信管理")
|
|
||||||
public class WeiXinService extends BaseService{
|
|
||||||
|
|
||||||
private String mptoken = "redbbs_dev";
|
|
||||||
|
|
||||||
@Resource(name = "redis")
|
|
||||||
private RedisCacheSource cacheSource;
|
|
||||||
|
|
||||||
//用于微信登录
|
|
||||||
@Resource
|
|
||||||
private WeiXinMPService wxService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private ContentService contentService;
|
|
||||||
@Resource
|
|
||||||
private CommentService commentService;
|
|
||||||
@Resource
|
|
||||||
private UserService userService;
|
|
||||||
|
|
||||||
@Resource(name = "SERVER_ROOT")
|
|
||||||
protected File webroot;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@RestMapping(name = "verifyMPURL",auth = false, comment = "微信域名验证")
|
|
||||||
public long verifyMPURL(String msgSignature, String timeStamp, String nonce, String echoStr) {
|
|
||||||
|
|
||||||
String o = cacheSource.getString("300");
|
|
||||||
|
|
||||||
cacheSource.set("t", "");
|
|
||||||
long d = cacheSource.getLong("d", 0);
|
|
||||||
|
|
||||||
|
|
||||||
cacheSource.incr("d");
|
|
||||||
cacheSource.setExpireSeconds("d", 5);
|
|
||||||
|
|
||||||
Object t = cacheSource.getString("t");
|
|
||||||
|
|
||||||
|
|
||||||
/*String signature = sha1(mptoken, timeStamp, nonce);
|
|
||||||
if (!signature.equals(msgSignature)) throw new RuntimeException("signature verification error");
|
|
||||||
return echoStr;*/
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用SHA1算法生成安全签名
|
|
||||||
* <p>
|
|
||||||
* @param strings String[]
|
|
||||||
*
|
|
||||||
* @return 安全签名
|
|
||||||
*/
|
|
||||||
protected static String sha1(String... strings) {
|
|
||||||
try {
|
|
||||||
Arrays.sort(strings);
|
|
||||||
MessageDigest md = MessageDigest.getInstance("SHA-1");
|
|
||||||
for (String s : strings) md.update(s.getBytes());
|
|
||||||
return Utility.binToHexString(md.digest());
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("SHA encryption to generate signature failure", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
package com.lxyer.redim;
|
|
||||||
|
|
||||||
import com.lxyer.redim.impl.ImFriendServiceImpl;
|
|
||||||
import org.redkale.boot.Application;
|
|
||||||
import org.redkale.boot.ApplicationListener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author: liangxianyou at 2018/8/10 22:51.
|
|
||||||
*/
|
|
||||||
public class RedbbsListener implements ApplicationListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void preStart(Application application) {
|
|
||||||
ImFriendServiceImpl.application = application;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,119 +0,0 @@
|
|||||||
package com.lxyer.redim.impl;
|
|
||||||
|
|
||||||
import com.jfinal.kit.Kv;
|
|
||||||
import com.lxyer.base.JBean;
|
|
||||||
import com.lxyer.bbs.base.BaseService;
|
|
||||||
import com.lxyer.bbs.base.user.UserInfo;
|
|
||||||
import com.lxyer.bbs.base.user.UserRecord;
|
|
||||||
import com.lxyer.bbs.base.user.UserService;
|
|
||||||
import com.lxyer.redim.service.ImFriendService;
|
|
||||||
import org.redkale.boot.Application;
|
|
||||||
import org.redkale.net.TransportFactory;
|
|
||||||
import org.redkale.net.TransportGroupInfo;
|
|
||||||
import org.redkale.net.http.RestService;
|
|
||||||
import org.redkale.source.FilterExpress;
|
|
||||||
import org.redkale.source.FilterNode;
|
|
||||||
import org.redkale.util.ResourceType;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.net.InetSocketAddress;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@ResourceType(ImFriendService.class)
|
|
||||||
@RestService(name = "imfriend",automapping = true, comment = "好友管理")
|
|
||||||
public class ImFriendServiceImpl extends BaseService implements ImFriendService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
UserService userService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
public static Application application;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean friends(String sessionid) {
|
|
||||||
List<UserRecord> records = source.queryList(UserRecord.class, FilterNode.create("status", FilterExpress.NOTEQUAL, -10));
|
|
||||||
|
|
||||||
Kv data = Kv.create();
|
|
||||||
|
|
||||||
//mine
|
|
||||||
Kv mine = Kv.by("username", "游客").set("id", "0").set("sign","").set("status", "online").set("avatar", "/res/images/avatar/13.jpg");
|
|
||||||
UserInfo userInfo = userService.current(sessionid);
|
|
||||||
if (userInfo != null){
|
|
||||||
mine.set("username", userInfo.getNickname());
|
|
||||||
mine.set("id", userInfo.getUserid());
|
|
||||||
mine.set("sign", userInfo.getSign());
|
|
||||||
mine.set("avatar", userInfo.getAvatar());
|
|
||||||
mine.set("status", "online");
|
|
||||||
}
|
|
||||||
|
|
||||||
//friend
|
|
||||||
List<Kv> friend = new ArrayList<>();
|
|
||||||
List<Kv> group = new ArrayList<>();
|
|
||||||
|
|
||||||
List list = new ArrayList();
|
|
||||||
records.forEach(x->{
|
|
||||||
Kv _friend = Kv.by("id", x.getUserid());
|
|
||||||
_friend.set("username", x.getNickname());
|
|
||||||
_friend.set("sign", x.getSign());
|
|
||||||
_friend.set("avatar", x.getAvatar());
|
|
||||||
_friend.set("status", "online");
|
|
||||||
list.add(_friend);
|
|
||||||
});
|
|
||||||
|
|
||||||
friend.add(Kv.by("groupname", "默认分组").set("id", 1).set("online", list.size()).set("list", list));
|
|
||||||
group.add(Kv.by("groupname", "默认分组").set("id", 1).set("avatar", "/res/images/avatar/13.jpg"));
|
|
||||||
|
|
||||||
data.set("mine", mine).set("friend", friend).set("group", group);
|
|
||||||
|
|
||||||
return JBean.by(Kv.by("code", 0).set("msg", "").set("data", data));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean friendList(String sessionid) {
|
|
||||||
|
|
||||||
/*SncpClient sncpClient = new SncpClient("", ImFriendService.class, this, transportFactory,
|
|
||||||
true, this.getClass(), new InetSocketAddress("192.168.227.1", 7070));*/
|
|
||||||
|
|
||||||
|
|
||||||
TransportFactory sncpTransportFactory = application.getSncpTransportFactory();
|
|
||||||
TransportGroupInfo groupInfo = sncpTransportFactory.findGroupInfo("ALL");
|
|
||||||
|
|
||||||
System.out.println(groupInfo.toString());
|
|
||||||
|
|
||||||
groupInfo.putAddress(new InetSocketAddress("120.24.230.60", 7070));
|
|
||||||
|
|
||||||
|
|
||||||
//sncpTransportFactory.addGroupInfo(groupInfo);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return friends(sessionid);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean groups(String sessionid) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean itemSave(String sessionid) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean addFriend(String sessionid) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean groupSave(String sessionid) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean addGroup(String sessionid) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,93 +0,0 @@
|
|||||||
package com.lxyer.redim.impl;
|
|
||||||
|
|
||||||
import com.lxyer.base.JBean;
|
|
||||||
import com.lxyer.bbs.base.BaseService;
|
|
||||||
import com.lxyer.bbs.base.user.UserRecord;
|
|
||||||
import com.lxyer.redim.entity.MsgRecord;
|
|
||||||
import com.lxyer.redim.info.MsgInfo;
|
|
||||||
import com.lxyer.redim.service.ImMsgService;
|
|
||||||
import org.redkale.net.http.RestService;
|
|
||||||
import org.redkale.source.FilterNode;
|
|
||||||
import org.redkale.util.ResourceType;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author: liangxianyou at 2018/8/12 13:10.
|
|
||||||
*/
|
|
||||||
@ResourceType(ImMsgService.class)
|
|
||||||
@RestService(name = "immsg",automapping = true, comment = "聊天记录管理")
|
|
||||||
public class ImMsgServiceImpl extends BaseService implements ImMsgService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 消息入库
|
|
||||||
*
|
|
||||||
* @param msg
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public JBean insert(MsgRecord... msg) {
|
|
||||||
source.insertAsync(msg);
|
|
||||||
return JBean.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 消息修改
|
|
||||||
*
|
|
||||||
* @param msg
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public JBean update(MsgRecord ... msg) {
|
|
||||||
source.updateAsync(msg);
|
|
||||||
return JBean.ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 历史消息
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public JBean list() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建消息体
|
|
||||||
*
|
|
||||||
* @param msg
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public JBean<MsgInfo> createMsgInfo(MsgRecord msg) {
|
|
||||||
MsgInfo info = new MsgInfo();
|
|
||||||
int fromuserid = msg.getFromuserid();
|
|
||||||
|
|
||||||
UserRecord userRecord;
|
|
||||||
if (fromuserid > 0){
|
|
||||||
userRecord = source.find(UserRecord.class, fromuserid);
|
|
||||||
info.setUsername(userRecord.getUsername());
|
|
||||||
info.setAvatar(userRecord.getAvatar());
|
|
||||||
info.setType("friend");
|
|
||||||
}else {
|
|
||||||
info.setUsername("游客");
|
|
||||||
info.setAvatar("/res/images/avatar/12.jpg");
|
|
||||||
info.setType("friend");
|
|
||||||
}
|
|
||||||
|
|
||||||
info.setId(msg.getFromuserid());
|
|
||||||
info.setContent(msg.getContent());
|
|
||||||
info.setCid(msg.getMsgid());
|
|
||||||
info.setMine(false);
|
|
||||||
info.setFromid(msg.getFromuserid());
|
|
||||||
info.setTimestamp(msg.getCreatetime());
|
|
||||||
|
|
||||||
return JBean.by(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JBean<List<MsgRecord>> offlineMsg(int userid) {
|
|
||||||
List<MsgRecord> records = source.queryList(MsgRecord.class, FilterNode.create("touserid", userid).and("status", 10));
|
|
||||||
return JBean.by(records);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@ -1,68 +0,0 @@
|
|||||||
======================
|
|
||||||
redbbs
|
|
||||||
redoss
|
|
||||||
redbbs-app
|
|
||||||
redim
|
|
||||||
redtimer
|
|
||||||
redexcel
|
|
||||||
jfly
|
|
||||||
|
|
||||||
待办:
|
|
||||||
1、redtimer 文档编写
|
|
||||||
|
|
||||||
|
|
||||||
# redbbs
|
|
||||||
|
|
||||||
1. √文章编辑加入未保存浏览器缓存
|
|
||||||
2. √文章编辑标题加入长度检查
|
|
||||||
3. 注册邮箱验证--
|
|
||||||
4. √加入管理员功能
|
|
||||||
5. 丰富个人中心
|
|
||||||
6. 加入资源模块--
|
|
||||||
7. √|-|管理员浏览文章阅读数不做增长
|
|
||||||
8. √个人中心-收藏数据不对
|
|
||||||
9. √管理员查询不到用户未公开帖子
|
|
||||||
10. √注册/资料修改 成功后未提示
|
|
||||||
11. √首页帖子用户头像链接地址错误
|
|
||||||
12. +帖子访客记录
|
|
||||||
13. 指定好友帖子权限--指定好友可见
|
|
||||||
14. ~项目更新记录页使用时光线展示
|
|
||||||
15. +SEO设置
|
|
||||||
16. +标签
|
|
||||||
17. +访问日志记录
|
|
||||||
18. +管理后台
|
|
||||||
19. +读书频道
|
|
||||||
20. +网站自动升级功能
|
|
||||||
21. +灵感说
|
|
||||||
22. +工作簿
|
|
||||||
|
|
||||||
|
|
||||||
社区升级
|
|
||||||
1、表字段统一小写,
|
|
||||||
2、表模块划分
|
|
||||||
3、表状态等字段统一smallint
|
|
||||||
4、部分字段值重新定义
|
|
||||||
|
|
||||||
升级程序实录:
|
|
||||||
1.导出表结构
|
|
||||||
mysqldump -u root -d -p redbbs > redbbs-t-06.17.sql
|
|
||||||
2.导出数据
|
|
||||||
mysqldump -u root -t -p redbbs > redbbs-t-06.17.sql
|
|
||||||
3.创建数据库
|
|
||||||
create database redbbs_dev default charset utf8;
|
|
||||||
4.导入数据库
|
|
||||||
mysql -u root -p redbbs_dev < redbbs-t-06.17.sql
|
|
||||||
|
|
||||||
|
|
||||||
echo '[mongodb-org-3.6]
|
|
||||||
name=MongoDB Repository
|
|
||||||
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
|
|
||||||
gpgcheck=1
|
|
||||||
enabled=1
|
|
||||||
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc'
|
|
||||||
>> /etc/yum.repos.d/mongodb-org-3.6.repo
|
|
||||||
|
|
||||||
灵感说功能
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user