Browse Source

private tribes routes, msg types, receivers

push-params
Evan Feenstra 5 years ago
parent
commit
a5af8229da
  1. 113
      api/controllers/chatTribes.ts
  2. 1
      api/controllers/index.ts
  3. 5
      api/hub.ts
  4. 109
      dist/api/controllers/chatTribes.js
  5. 2
      dist/api/controllers/chatTribes.js.map
  6. 1
      dist/api/controllers/index.js
  7. 2
      dist/api/controllers/index.js.map
  8. 3
      dist/api/hub.js
  9. 2
      dist/api/hub.js.map

113
api/controllers/chatTribes.ts

@ -7,6 +7,7 @@ import * as helpers from '../helpers'
import * as socket from '../utils/socket'
import * as tribes from '../utils/tribes'
import * as path from 'path'
import { sendNotification } from '../hub'
import {personalizeMessage, decryptMessage} from '../utils/msg'
import { Op } from 'sequelize'
@ -164,7 +165,7 @@ export async function receiveMemberRequest(payload) {
}
const message = await models.Message.create(msg)
const theChat = addPendingContactIdsToChat(chat)
const theChat = await addPendingContactIdsToChat(chat)
socket.sendJson({
type: 'member_request',
response: {
@ -175,12 +176,122 @@ export async function receiveMemberRequest(payload) {
})
}
export async function approveOrRejectMember(req,res) {
const chatId = parseInt(req.params['chatId'])
const contactId = parseInt(req.params['contactId'])
const status = req.params['status']
if(!chatId || !contactId || !(status==='approved'||status==='rejected')) {
return failure(res, 'incorrect status')
}
const chat = await models.Chat.findOne({ where: { id:chatId } })
if (!chat) return
let memberStatus = constants.chat_statuses.rejected
let msgType = 'member_reject'
if(status==='approved') {
memberStatus = constants.chat_statuses.approved
msgType = 'member_approve'
// ADD ID TO CONTACT IDS
const contactIds = JSON.parse(chat.contactIds || '[]')
if(!contactIds.includes(contactId)) contactIds.push(contactId)
await chat.update({ contactIds: JSON.stringify(contactIds) })
}
const member = await models.ChatMember.findOne({where:{contactId, chatId}})
if(!member) {
return failure(res, 'cant find chat member')
}
await member.update({status:memberStatus})
let date = new Date()
date.setMilliseconds(0)
const msg:{[k:string]:any} = {
chatId: chat.id,
type: constants.message_types[msgType],
sender: (member && member.contactId) || 0,
messageContent:'', remoteMessageContent:'',
status: constants.statuses.confirmed,
date: date, createdAt: date, updatedAt: date
}
const message = await models.Message.create(msg)
const theChat = await addPendingContactIdsToChat(chat)
const cont = await models.Contact.findOne({where:{id:contactId}})
socket.sendJson({
type: msgType,
response: {
contact: jsonUtils.contactToJson(cont||{}),
chat: jsonUtils.chatToJson(theChat),
message: jsonUtils.messageToJson(message, null)
}
})
}
export async function receiveMemberApprove(payload) {
const { owner, chat, chat_name, sender } = await helpers.parseReceiveParams(payload)
if(!chat) return
await chat.update({status: constants.chat_statuses.approved})
let date = new Date()
date.setMilliseconds(0)
const msg:{[k:string]:any} = {
chatId: chat.id,
type: constants.message_types.member_approve,
sender: (sender && sender.id) || 0,
messageContent:'', remoteMessageContent:'',
status: constants.statuses.confirmed,
date: date, createdAt: date, updatedAt: date
}
const message = await models.Message.create(msg)
socket.sendJson({
type: 'member_approve',
response: {
message: jsonUtils.messageToJson(message, null)
}
})
// send my info to all
network.sendMessage({
chat: { ...chat,
members: {
[owner.publicKey]: {
key: owner.contactKey,
alias: owner.alias||''
}
}
},
amount:0,
sender: owner,
message: {},
type: constants.message_types.group_join,
})
sendNotification(chat, chat_name, 'group')
}
export async function receiveMemberReject(payload) {
const { chat, sender, chat_name } = await helpers.parseReceiveParams(payload)
// dang.. nothing really to do here?
let date = new Date()
date.setMilliseconds(0)
const msg:{[k:string]:any} = {
chatId: chat.id,
type: constants.message_types.member_reject,
sender: (sender && sender.id) || 0,
messageContent:'', remoteMessageContent:'',
status: constants.statuses.confirmed,
date: date, createdAt: date, updatedAt: date
}
const message = await models.Message.create(msg)
socket.sendJson({
type: 'member_reject',
response: {
message: jsonUtils.messageToJson(message, null)
}
})
sendNotification(chat, chat_name, 'reject')
}
export async function replayChatHistory(chat, contact) {

1
api/controllers/index.ts

@ -41,6 +41,7 @@ export async function set(app) {
app.put('/chat/:id', chats.addGroupMembers)
app.put('/kick/:chat_id/:contact_id', chats.kickChatMember)
app.post('/tribe', chatTribes.joinTribe)
app.put('/member/:chatId/:contactId/:status', chatTribes.approveOrRejectMember)
// app.put('/group/:id', chatTribes.editTribe)
app.post('/upload', uploads.avatarUpload.single('file'), uploads.uploadFile)

5
api/hub.ts

@ -188,7 +188,7 @@ const createInviteInHub = (params, onSuccess, onFailure) => {
})
}
type NotificationType = 'group' | 'badge' | 'invite' | 'message'
type NotificationType = 'group' | 'badge' | 'invite' | 'message' | 'reject'
const sendNotification = async (chat, name, type:NotificationType) => {
@ -199,6 +199,9 @@ const sendNotification = async (chat, name, type:NotificationType) => {
if(type==='group'){
message = `You have been added to group ${name}`
}
if(type==='reject') {
message = `The admin has declined your request to join "${name}"`
}
if(type==='message' && chat.type==constants.chat_types.group && chat.name && chat.name.length){
message += ` on ${chat.name}`

109
dist/api/controllers/chatTribes.js

@ -18,6 +18,7 @@ const helpers = require("../helpers");
const socket = require("../utils/socket");
const tribes = require("../utils/tribes");
const path = require("path");
const hub_1 = require("../hub");
const msg_1 = require("../utils/msg");
const sequelize_1 = require("sequelize");
const constants = require(path.join(__dirname, '../../config/constants.json'));
@ -164,7 +165,7 @@ function receiveMemberRequest(payload) {
msg.senderAlias = sender_alias;
}
const message = yield models_1.models.Message.create(msg);
const theChat = addPendingContactIdsToChat(chat);
const theChat = yield addPendingContactIdsToChat(chat);
socket.sendJson({
type: 'member_request',
response: {
@ -176,13 +177,119 @@ function receiveMemberRequest(payload) {
});
}
exports.receiveMemberRequest = receiveMemberRequest;
function approveOrRejectMember(req, res) {
return __awaiter(this, void 0, void 0, function* () {
const chatId = parseInt(req.params['chatId']);
const contactId = parseInt(req.params['contactId']);
const status = req.params['status'];
if (!chatId || !contactId || !(status === 'approved' || status === 'rejected')) {
return res_1.failure(res, 'incorrect status');
}
const chat = yield models_1.models.Chat.findOne({ where: { id: chatId } });
if (!chat)
return;
let memberStatus = constants.chat_statuses.rejected;
let msgType = 'member_reject';
if (status === 'approved') {
memberStatus = constants.chat_statuses.approved;
msgType = 'member_approve';
// ADD ID TO CONTACT IDS
const contactIds = JSON.parse(chat.contactIds || '[]');
if (!contactIds.includes(contactId))
contactIds.push(contactId);
yield chat.update({ contactIds: JSON.stringify(contactIds) });
}
const member = yield models_1.models.ChatMember.findOne({ where: { contactId, chatId } });
if (!member) {
return res_1.failure(res, 'cant find chat member');
}
yield member.update({ status: memberStatus });
let date = new Date();
date.setMilliseconds(0);
const msg = {
chatId: chat.id,
type: constants.message_types[msgType],
sender: (member && member.contactId) || 0,
messageContent: '', remoteMessageContent: '',
status: constants.statuses.confirmed,
date: date, createdAt: date, updatedAt: date
};
const message = yield models_1.models.Message.create(msg);
const theChat = yield addPendingContactIdsToChat(chat);
const cont = yield models_1.models.Contact.findOne({ where: { id: contactId } });
socket.sendJson({
type: msgType,
response: {
contact: jsonUtils.contactToJson(cont || {}),
chat: jsonUtils.chatToJson(theChat),
message: jsonUtils.messageToJson(message, null)
}
});
});
}
exports.approveOrRejectMember = approveOrRejectMember;
function receiveMemberApprove(payload) {
return __awaiter(this, void 0, void 0, function* () {
const { owner, chat, chat_name, sender } = yield helpers.parseReceiveParams(payload);
if (!chat)
return;
yield chat.update({ status: constants.chat_statuses.approved });
let date = new Date();
date.setMilliseconds(0);
const msg = {
chatId: chat.id,
type: constants.message_types.member_approve,
sender: (sender && sender.id) || 0,
messageContent: '', remoteMessageContent: '',
status: constants.statuses.confirmed,
date: date, createdAt: date, updatedAt: date
};
const message = yield models_1.models.Message.create(msg);
socket.sendJson({
type: 'member_approve',
response: {
message: jsonUtils.messageToJson(message, null)
}
});
// send my info to all
network.sendMessage({
chat: Object.assign(Object.assign({}, chat), { members: {
[owner.publicKey]: {
key: owner.contactKey,
alias: owner.alias || ''
}
} }),
amount: 0,
sender: owner,
message: {},
type: constants.message_types.group_join,
});
hub_1.sendNotification(chat, chat_name, 'group');
});
}
exports.receiveMemberApprove = receiveMemberApprove;
function receiveMemberReject(payload) {
return __awaiter(this, void 0, void 0, function* () {
const { chat, sender, chat_name } = yield helpers.parseReceiveParams(payload);
// dang.. nothing really to do here?
let date = new Date();
date.setMilliseconds(0);
const msg = {
chatId: chat.id,
type: constants.message_types.member_reject,
sender: (sender && sender.id) || 0,
messageContent: '', remoteMessageContent: '',
status: constants.statuses.confirmed,
date: date, createdAt: date, updatedAt: date
};
const message = yield models_1.models.Message.create(msg);
socket.sendJson({
type: 'member_reject',
response: {
message: jsonUtils.messageToJson(message, null)
}
});
hub_1.sendNotification(chat, chat_name, 'reject');
});
}
exports.receiveMemberReject = receiveMemberReject;

2
dist/api/controllers/chatTribes.js.map

File diff suppressed because one or more lines are too long

1
dist/api/controllers/index.js

@ -48,6 +48,7 @@ function set(app) {
app.put('/chat/:id', chats.addGroupMembers);
app.put('/kick/:chat_id/:contact_id', chats.kickChatMember);
app.post('/tribe', chatTribes.joinTribe);
app.put('/member/:chatId/:contactId/:status', chatTribes.approveOrRejectMember);
// app.put('/group/:id', chatTribes.editTribe)
app.post('/upload', uploads.avatarUpload.single('file'), uploads.uploadFile);
app.post('/invites', invites.createInvite);

2
dist/api/controllers/index.js.map

File diff suppressed because one or more lines are too long

3
dist/api/hub.js

@ -195,6 +195,9 @@ const sendNotification = (chat, name, type) => __awaiter(void 0, void 0, void 0,
if (type === 'group') {
message = `You have been added to group ${name}`;
}
if (type === 'reject') {
message = `The admin has declined your request to join "${name}"`;
}
if (type === 'message' && chat.type == constants.chat_types.group && chat.name && chat.name.length) {
message += ` on ${chat.name}`;
}

2
dist/api/hub.js.map

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save