Skip to content

Commit 3e30b81

Browse files
authored
Merge pull request #22 from duckchat/beta
Beta-Stable Edition For National Day
2 parents 13ddef3 + 75408c8 commit 3e30b81

77 files changed

Lines changed: 2583 additions & 2703 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

eula-server.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# DuckChat 服务端使用协议
2+
3+
## DuckChat简介
4+
5+
DuckChat是一套完整的私有即时通讯(instant message)解决方案,含服务器端程序、客户端(含iOS、Android、PC等)程序。通过DuckChat,站点管理员可以快速的在自己服务器上搭建起一套私有的即时通讯服务,用户可以使用客户端连接至此服务器进行信息交互。
6+
7+
## 正文
8+
9+
北京阿卡信信息技术有限公司(以下简称”我公司”)提醒您:在使用DuckChat软件前,请您务必仔细阅读并透彻理解本声明。
10+
11+
1. 如果您使用本软件,您的使用行为将被视为对本声明全部内容的认可。除非您已充分阅读、完全理解并接受本协议所有条款,否则您无权使用服务。您点击“同意”或“下一步”,或您使用服务,或者以其他任何明示或者默示方式表示接受本协议的,均视为您已阅读并同意签署本协议。本协议即在您与我公司之间产生法律效力,成为对双方均具有约束力的法律文件。
12+
2. 本软件的著作权归我公司所有,您可以免费使用此软件,可以用在营利性、非营利性活动中,但不允许您以营利性目的再次分发此软件。
13+
3. 本协议是此软件著作权的一部分,不允许修改此软件的所有权及本安装协议,不允许修改代码删除安装过程中的本协议确认过程,如违反则视为对我著作权的侵犯。
14+
4. 您在运营站点的过程中,请相关法律法规,对在站点上存储、传播的内容做好管控并对相关后果负全部责任,相关行为包括但不限于:
15+
- 反对宪法所确定的基本原则的。
16+
- 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的。
17+
- 损害国家荣誉和利益的。
18+
- 煽动民族仇恨、民族歧视,破坏民族团结的。
19+
- 破坏国家宗教政策,宣扬邪教和封建迷信的。
20+
- 散布谣言,扰乱社会秩序,破坏社会稳定的。
21+
- 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的。
22+
- 侮辱或者诽谤他人,侵害他人合法权益的。
23+
- 其他相关法律法规约定。
24+
4. 若本协议有中文、英文等多个语言版本,相应内容不一致的,均以中文版的内容为准。
25+
5. 本协议的签署地为北京市朝阳区。
26+
6. 对此条款的解释、修改及更新权均属于我公司所有。
27+
28+
29+
北京阿卡信信息技术有限公司
30+
31+
2018-09-26

src/config.sample.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
*/
88

99
return array(
10-
'siteVersionName' => '1.0-beta-8',
11-
'siteVersionCode' => '1.0.1.8',
10+
'siteVersionName' => '1.0.9',
11+
'siteVersionCode' => '10009',
1212
'apiPageIndex' => './index.php?action=page.index',
1313
'apiPageLogin' => './index.php?action=page.login',
1414
'apiPageLogout' => './index.php?action=page.logout',
1515
'apiPageJump' => "./index.php?action=page.jump",
16-
'loginPluginId' => '105',
16+
'loginPluginId' => '102',
1717
'apiPageWidget' => './index.php?action=page.widget',
1818
'apiPageSiteInit' => "./index.php?action=installDB",
19-
'session_verify_101' => 'http://open.akaxin.com:5208/index.php?action=api.session.verify&body_format=base64pb',
2019
'session_verify_102' => './index.php?action=api.session.verify&body_format=base64pb',
20+
'test_curl' => "./index.php?action=installDB&for=test_curl",
2121
"siteAddress" => '',
2222
'passport_cookie_name' => "duckchat_passport_cookie",
2323
'mail' =>

src/controller/Api/Friend/Api_Friend_AcceptController.php

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public function rpc(\Google\Protobuf\Internal\Message $request, \Google\Protobuf
3131
try {
3232
$result = false;
3333
if ($userId == $applyUserId) {
34-
throw new Exception("unable add yourself as friend");
34+
$eMessage = $this->language == 1 ? "请勿添加自己为好友" : "unable add yourself as friend";
35+
throw new Exception($eMessage);
3536
}
3637
if ($isAgree) {
3738
$result = $this->agreeFriendApply($userId, $applyUserId);
@@ -114,34 +115,24 @@ protected function removeFriendApply($fromUserId, $toUserId)
114115
return false;
115116
}
116117

117-
private function proxyNewFriendMessage($agreeUserId, $applyUserId, $greetings)
118+
private function proxyNewFriendMessage($fromUserId, $toUserId, $greetings)
118119
{
119120
$tag = __CLASS__ . "->" . __FUNCTION__;
120121
try {
121-
$fromUserId = $agreeUserId;
122122

123-
$text = "I accept your friend apply, let's talk";
124-
$text = "我接受了你的好友申请, 现在找我聊天吧";
123+
$text = ZalyText::$keyFriendAcceptFrom;
125124

126-
// if ($this->language == Zaly\Proto\Core\UserClientLangType::UserClientLangZH) {
127-
// $text = "我接受了你的好友申请,现在开始聊天吧";
128-
// }
129-
130-
$this->ctx->Message_Client->proxyU2TextMessage($applyUserId, $fromUserId, $applyUserId, $text);
125+
$this->ctx->Message_Client->proxyU2TextMessage($toUserId, $fromUserId, $toUserId, $text);
131126

132127
} catch (Exception $e) {
133128
$this->ctx->Wpf_Logger->error($tag, $e);
134129
}
135130

136131
try {
137132
if (empty($greetings)) {
138-
$greetings = "we are friends, just talk to me";
139-
140-
if ($this->language == Zaly\Proto\Core\UserClientLangType::UserClientLangZH) {
141-
$greetings = "我添加了你为好友,开始聊天吧";
142-
}
133+
$greetings = $text = ZalyText::$keyFriendAcceptTo;
143134
}
144-
$this->ctx->Message_Client->proxyU2TextMessage($fromUserId, $applyUserId, $fromUserId, $greetings);
135+
$this->ctx->Message_Client->proxyU2TextMessage($fromUserId, $toUserId, $fromUserId, $greetings);
145136
} catch (Exception $e) {
146137
$this->ctx->Wpf_Logger->error($tag, $e);
147138
}

src/controller/Api/Friend/Api_Friend_ApplyController.php

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,44 @@ public function rpc(\Google\Protobuf\Internal\Message $request, \Google\Protobuf
4242
$greetings = $request->getGreetings();
4343

4444
//check site allow addfriend
45-
4645
$this->checkSiteAddFriendConfig($this->userId);
4746

4847
//check is friend before is friend,with exception
49-
$this->checkIsFriend($toUserId);
50-
51-
//save data
52-
$this->addApplyData($toUserId, $greetings);
53-
54-
$this->setRpcError($this->defaultErrorCode, "");
55-
$this->rpcReturn($transportData->getAction(), new $this->classNameForResponse());
56-
57-
$this->finish_request();
48+
$fromRelation = $this->getIsFollow($this->userId, $toUserId);
49+
$toRelation = $this->getIsFollow($toUserId, $this->userId);
5850

59-
//代发消息 && push
60-
$this->ctx->Message_Client->proxyNewFriendApplyMessage($toUserId, $this->userId, $toUserId);
51+
if ($fromRelation == 1 && $toRelation == 1) {
52+
$errorCode = $this->zalyError->errorFriendApplyFriendExists;
53+
$errorInfo = $this->zalyError->getErrorInfo($errorCode);
54+
$this->setRpcError($errorCode, $errorInfo);
55+
throw new Exception($errorInfo);
56+
} elseif ($toRelation == 1 && empty($fromRelation)) {
57+
58+
if ($this->becomeFriendAsFollowed($this->userId, $toUserId)) {
59+
$errorCode = $this->zalyError->errorFriendIs;
60+
$this->setRpcError($errorCode, "");
61+
$this->rpcReturn($transportData->getAction(), new $this->classNameForResponse());
62+
} else {
63+
throw new Exception("apply friend error");
64+
}
65+
} else {
66+
//save data
67+
$this->addApplyData($toUserId, $greetings);
68+
69+
$this->setRpcError($this->defaultErrorCode, "");
70+
$this->rpcReturn($transportData->getAction(), new $this->classNameForResponse());
71+
72+
$this->finish_request();
73+
74+
//代发消息 && push
75+
$this->ctx->Message_Client->proxyNewFriendApplyMessage($toUserId, $this->userId, $toUserId);
76+
}
6177
} catch (Exception $ex) {
6278
$this->ctx->Wpf_Logger->error($tag, "error_msg=" . $ex->getMessage());
6379
$this->setRpcError("error.alert", $ex->getMessage());
6480
$this->rpcReturn($transportData->getAction(), new $this->classNameForResponse());
6581
}
82+
return;
6683
}
6784

6885
private function checkSiteAddFriendConfig($userId)
@@ -79,15 +96,10 @@ private function checkSiteAddFriendConfig($userId)
7996
}
8097
}
8198

82-
private function checkIsFriend($toUserId)
99+
100+
private function getIsFollow($fromUserId, $toUserId)
83101
{
84-
$isFriend = $this->ctx->SiteUserFriendTable->isFriend($this->userId, $toUserId);
85-
if ($isFriend) {
86-
$errorCode = $this->zalyError->errorFriendApplyFriendExists;
87-
$errorInfo = $this->zalyError->getErrorInfo($errorCode);
88-
$this->setRpcError($errorCode, $errorInfo);
89-
throw new Exception($errorInfo);
90-
}
102+
return $this->ctx->SiteUserFriendTable->isFollow($fromUserId, $toUserId);
91103
}
92104

93105
/**
@@ -127,5 +139,26 @@ private function addApplyData($toUserId, $greetings)
127139
$this->ctx->SiteFriendApplyTable->updateApplyData($where, $data);
128140
}
129141
}
142+
143+
/**
144+
*
145+
* $fromUserId --(follow)---> $toUserId
146+
*
147+
* $toUserId already follow $fromUserId
148+
*
149+
* @param $fromUserId
150+
* @param $toUserId
151+
* @return bool
152+
*/
153+
private function becomeFriendAsFollowed($fromUserId, $toUserId)
154+
{
155+
$result = $this->ctx->SiteUserFriendTable->saveUserFriend($fromUserId, $toUserId);
156+
if ($result) {
157+
//更新 version
158+
$this->ctx->SiteUserTable->updateNextFriendVersion($fromUserId);
159+
}
160+
return $result;
161+
}
162+
130163
}
131164

src/controller/Api/Group/Api_Group_UpdateController.php

Lines changed: 36 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ private function handleValues($values, $groupId)
5454

5555
$updateValues = [];
5656
$adminUserIds = [];
57-
$speakUserIds = [];
5857
$isMuteValues = [];
58+
$writeUpdateAdminType = false;
5959
foreach ($values as $v) {
6060
$updateType = $v->getType();
6161
$this->ctx->Wpf_Logger->info($tag, " group profile updateType =". $updateType);
@@ -92,15 +92,9 @@ private function handleValues($values, $groupId)
9292
$updateValues['descriptionType'] = $description->getType();
9393
break;
9494
case \Zaly\Proto\Site\ApiGroupUpdateType::ApiGroupUpdateAdmin:
95-
$writeType = $v->getWriteType();
95+
$writeUpdateAdminType = $v->getWriteType();
9696
foreach($v->getAdminUserIds() as $userId ) {
97-
$adminUserIds[$writeType][] = $userId;
98-
}
99-
break;
100-
case \Zaly\Proto\Site\ApiGroupUpdateType::ApiGroupUpdateSpeaker:
101-
$writeType = $v->getWriteType();
102-
foreach($v->getSpeakerUserIds() as $userId ) {
103-
$speakUserIds[$writeType][] = $userId;
97+
$adminUserIds[] = $userId;
10498
}
10599
break;
106100
}
@@ -115,90 +109,56 @@ private function handleValues($values, $groupId)
115109
$this->ctx->SiteGroupUserTable->updateGroupUserInfo($where, $isMuteValues);
116110
}
117111

118-
$this->ctx->Wpf_Logger->error($tag, " group profile adminUserIds =". json_encode($adminUserIds));
119-
$this->ctx->Wpf_Logger->error($tag, " group profile speakUserIds =".json_encode($speakUserIds));
120-
$this->ctx->Wpf_Logger->error($tag, " group profile updateValues =". json_encode($updateValues));
112+
$this->ctx->Wpf_Logger->info($tag, " group profile adminUserIds =". json_encode($adminUserIds));
113+
$this->ctx->Wpf_Logger->info($tag, " group profile updateValues =". json_encode($updateValues));
114+
$this->ctx->Wpf_Logger->info($tag, " group profile writeUpdateAdminType =". $writeUpdateAdminType);
115+
121116

122-
if(!$adminUserIds && !$speakUserIds && !$updateValues) {
123-
return;
124-
}
125117
//只有群主管理员可以修改
126118
$this->isGroupAdmin($groupId);
127119

128120
$groupInfo = $this->getGroupProfile($groupId);
129121

130-
if(count($adminUserIds)) {
122+
if($writeUpdateAdminType !== false) {
131123
$this->isGroupOwner($groupId);
132-
foreach($adminUserIds as $writeType => $userIds) {
133-
switch ($writeType){
134-
case \Zaly\Proto\Core\DataWriteType::WriteAdd:
135-
$userIds = $adminUserIds[\Zaly\Proto\Core\DataWriteType::WriteAdd];
136-
$memberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberAdmin;
137-
$resultUserId = array_diff($userIds, [$groupInfo['owner']]);
138-
$resultUserId = array_values($resultUserId);
139-
$resultUserId = array_unique($resultUserId);
140-
$this->ctx->SiteGroupUserTable->addMemberRole($resultUserId, $groupId, $memberType);
141-
break;
142-
case \Zaly\Proto\Core\DataWriteType::WriteUpdate:
143-
$userIds = $adminUserIds[\Zaly\Proto\Core\DataWriteType::WriteUpdate];
144-
$resultUserId = array_diff($userIds, [$groupInfo['owner']]);
145-
$adminMemberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberAdmin;
146-
$nomalMemberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberNormal;
147-
$ownerMemberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberOwner;
148-
$resultUserId = array_values($resultUserId);
149-
$resultUserId = array_unique($resultUserId);
150-
$this->ctx->SiteGroupUserTable->updateMemberRole($resultUserId, $groupId, $adminMemberType, $nomalMemberType, $ownerMemberType);
151-
break;
152-
case \Zaly\Proto\Core\DataWriteType::WriteDel:
153-
$userIds = $adminUserIds[\Zaly\Proto\Core\DataWriteType::WriteDel];
154-
$memberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberNormal;
155-
$resultUserId = array_diff($userIds, [$groupInfo['owner']]);
156-
$resultUserId = array_values($resultUserId);
157-
$resultUserId = array_unique($resultUserId);
158-
159-
$this->ctx->SiteGroupUserTable->removeMemberRole($resultUserId, $groupId, $memberType);
160-
break;
161-
}
124+
switch ($writeUpdateAdminType){
125+
case \Zaly\Proto\Core\DataWriteType::WriteUpdate:
126+
$resultUserId = array_diff($adminUserIds, [$groupInfo['owner']]);
127+
$adminMemberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberAdmin;
128+
$nomalMemberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberNormal;
129+
$ownerMemberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberOwner;
130+
$resultUserId = array_values($resultUserId);
131+
$resultUserId = array_unique($resultUserId);
132+
$this->ctx->SiteGroupUserTable->updateMemberRole($resultUserId, $groupId, $adminMemberType, $nomalMemberType, $ownerMemberType);
133+
break;
134+
case \Zaly\Proto\Core\DataWriteType::WriteAdd:
135+
$memberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberAdmin;
136+
$resultUserId = array_diff($adminUserIds, [$groupInfo['owner']]);
137+
$resultUserId = array_values($resultUserId);
138+
$resultUserId = array_unique($resultUserId);
139+
$this->ctx->SiteGroupUserTable->addMemberRole($resultUserId, $groupId, $memberType);
140+
break;
141+
case \Zaly\Proto\Core\DataWriteType::WriteDel:
142+
$memberType = \Zaly\Proto\Core\GroupMemberType::GroupMemberNormal;
143+
$resultUserId = array_diff($adminUserIds, [$groupInfo['owner']]);
144+
$resultUserId = array_values($resultUserId);
145+
$resultUserId = array_unique($resultUserId);
146+
$this->ctx->SiteGroupUserTable->removeMemberRole($resultUserId, $groupId, $memberType);
147+
break;
162148
}
163149
}
164-
$speakUserIdStr = "";
165-
if(count($speakUserIds)) {
166-
$speakers = (isset($groupInfo['speakers']) && $groupInfo['speakers'] != "")
167-
? json_decode($groupInfo['speakers'], true)
168-
: [];
169-
foreach($speakUserIds as $writeType => $userIds) {
170-
switch ($writeType){
171-
case \Zaly\Proto\Core\DataWriteType::WriteAdd:
172-
$userIds = $speakUserIds[\Zaly\Proto\Core\DataWriteType::WriteAdd];
173-
$speakers = array_merge($speakers, $userIds);
174-
$speakers = array_unique($speakers);
175-
$speakUserIdStr = json_encode($speakers);
176-
break;
177-
case \Zaly\Proto\Core\DataWriteType::WriteUpdate:
178-
$userIds = $speakUserIds[\Zaly\Proto\Core\DataWriteType::WriteUpdate];
179-
$speakers = array_unique($speakers);
180-
$speakUserIdStr = json_encode($userIds);
181-
break;
182-
case \Zaly\Proto\Core\DataWriteType::WriteDel:
183-
$userIds = $speakUserIds[\Zaly\Proto\Core\DataWriteType::WriteDel];
184-
$speakers = array_diff($speakers, $userIds);
185-
$speakers = array_unique($speakers);
186-
$speakUserIdStr = json_encode($speakers);
187-
break;
188-
}
189-
}
150+
151+
if(!$updateValues) {
152+
return;
190153
}
154+
191155
$where = [
192156
"groupId" => $groupId
193157
];
194158
$updateData = [];
195159
if($updateValues) {
196160
$updateData = array_merge($updateData, $updateValues);
197161
}
198-
if(strlen($speakUserIdStr)) {
199-
$updateData['speakers'] = $speakUserIdStr;
200-
}
201-
$this->ctx->Wpf_Logger->error($tag, " group profile update values =". json_encode($updateData));
202162

203163
if(!count($updateData)) {
204164
return ;

src/controller/Api/Passport/Api_Passport_PasswordUpdateInvitationCodeController.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function rpc(\Google\Protobuf\Internal\Message $request, \Google\Protobuf
3535
throw new Exception("sitePubkPem is not exists");
3636
}
3737

38-
if(!$invitationCode || strlen($invitationCode) < 0 ) {
38+
if(strlen($invitationCode) < 0 ) {
3939
$errorCode = $this->zalyError->errorUpdateInvitation;
4040
$errorInfo = $this->zalyError->getErrorInfo($errorCode);
4141
$this->setRpcError($errorCode, $errorInfo);
@@ -95,7 +95,6 @@ public function updateUserInfo($preSessionId, $invitationCode, $sitePubkPem)
9595
$this->ctx->PassportPasswordPreSessionTable->updatePreSessionData($updatePreSessionWhere, $preSessionInfo);
9696

9797
$this->ctx->BaseTable->db->commit();
98-
9998
return $newPreSessionId;
10099
}catch (Exception $ex) {
101100
$this->ctx->Wpf_Logger->error($tag, "error_msg=" . $ex->getMessage());

0 commit comments

Comments
 (0)