Uspjesno kodirane i dokodirane poruke preko servera
This commit is contained in:
139
server.js
139
server.js
@@ -9,18 +9,20 @@ var libsignal = require('libsignal');
|
|||||||
|
|
||||||
const chatkit = new Chatkit.default({
|
const chatkit = new Chatkit.default({
|
||||||
instanceLocator: 'v1:us1:366480cc-91f1-4cbd-8c04-68dc96e8ccdf',
|
instanceLocator: 'v1:us1:366480cc-91f1-4cbd-8c04-68dc96e8ccdf',
|
||||||
key:
|
key: '982eaea8-66f5-4bdb-9a2d-14de0fa8b92b:WSgfMJzA8cvZ/fwEqjupJhOpnwQ7qbAEOVze44y+XK0='
|
||||||
'982eaea8-66f5-4bdb-9a2d-14de0fa8b92b:WSgfMJzA8cvZ/fwEqjupJhOpnwQ7qbAEOVze44y+XK0='
|
|
||||||
})
|
})
|
||||||
const app = express()
|
const app = express()
|
||||||
|
|
||||||
app.use(bodyParser.urlencoded({ extended: false }))
|
app.use(bodyParser.urlencoded({
|
||||||
|
extended: false
|
||||||
|
}))
|
||||||
app.use(bodyParser.json())
|
app.use(bodyParser.json())
|
||||||
app.use(cors())
|
app.use(cors())
|
||||||
//--------
|
//--------
|
||||||
|
|
||||||
var KeyHelper = libsignal.keyhelper;
|
var KeyHelper = libsignal.keyhelper;
|
||||||
var sessionProm = null;
|
var sessionPromise = null;
|
||||||
|
|
||||||
function SignalProtocolStore() {
|
function SignalProtocolStore() {
|
||||||
this.store = {};
|
this.store = {};
|
||||||
}
|
}
|
||||||
@@ -104,7 +106,10 @@ SignalProtocolStore.prototype = {
|
|||||||
loadPreKey: function (keyId) {
|
loadPreKey: function (keyId) {
|
||||||
var res = this.get('25519KeypreKey' + keyId);
|
var res = this.get('25519KeypreKey' + keyId);
|
||||||
if (res !== undefined) {
|
if (res !== undefined) {
|
||||||
res = { pubKey: res.pubKey, privKey: res.privKey };
|
res = {
|
||||||
|
pubKey: res.pubKey,
|
||||||
|
privKey: res.privKey
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return Promise.resolve(res);
|
return Promise.resolve(res);
|
||||||
},
|
},
|
||||||
@@ -115,11 +120,14 @@ SignalProtocolStore.prototype = {
|
|||||||
return Promise.resolve(this.remove('25519KeypreKey' + keyId));
|
return Promise.resolve(this.remove('25519KeypreKey' + keyId));
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Returns a signed keypair object or undefined */
|
/* Returns aa signed keypair object or undefined */
|
||||||
loadSignedPreKey: function (keyId) {
|
loadSignedPreKey: function (keyId) {
|
||||||
var res = this.get('25519KeysignedKey' + keyId);
|
var res = this.get('25519KeysignedKey' + keyId);
|
||||||
if (res !== undefined) {
|
if (res !== undefined) {
|
||||||
res = { pubKey: res.pubKey, privKey: res.privKey };
|
res = {
|
||||||
|
pubKey: res.pubKey,
|
||||||
|
privKey: res.privKey
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return Promise.resolve(res);
|
return Promise.resolve(res);
|
||||||
},
|
},
|
||||||
@@ -148,6 +156,11 @@ SignalProtocolStore.prototype = {
|
|||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var senderStore = new SignalProtocolStore();
|
||||||
|
|
||||||
|
var receiverStore = new SignalProtocolStore();
|
||||||
//---------------
|
//---------------
|
||||||
function generateIdentity(store) {
|
function generateIdentity(store) {
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
@@ -199,6 +212,7 @@ function generatePreKeyBundle(store, preKeyId, signedPreKeyId) {
|
|||||||
//---------
|
//---------
|
||||||
|
|
||||||
app.post("/cryptMessage", async (req, res) => {
|
app.post("/cryptMessage", async (req, res) => {
|
||||||
|
console.log("UĐEEEEEEEEEEEEE");
|
||||||
//sessionPromise=req.body.data.sessionPromise;
|
//sessionPromise=req.body.data.sessionPromise;
|
||||||
message = req.body.data.message;
|
message = req.body.data.message;
|
||||||
//senderStore = req.body.data.senderStore;
|
//senderStore = req.body.data.senderStore;
|
||||||
@@ -206,17 +220,17 @@ app.post("/cryptMessage", async (req, res) => {
|
|||||||
//----------------
|
//----------------
|
||||||
|
|
||||||
|
|
||||||
var senderAdress = req.body.data.senderAdress;//"xxxxxxxxx"
|
var senderAdress = req.body.data.senderAdress; //"xxxxxxxxx"
|
||||||
var receiverAdress = req.body.data.receiverAdress;//""yyyyyyyyyyyyy""
|
var receiverAdress = req.body.data.receiverAdress; //""yyyyyyyyyyyyy""
|
||||||
var receiverPreKeyId = req.body.data.receiverPreKeyId;// 1337;
|
var receiverPreKeyId = req.body.data.receiverPreKeyId; // 1337;
|
||||||
var receiverSignedKeyId = req.body.data.receiverSignedKeyId;// 1;
|
var receiverSignedKeyId = req.body.data.receiverSignedKeyId; // 1;
|
||||||
|
|
||||||
var SENDER_ADDRESS = new libsignal.ProtocolAddress(senderAdress, 1);
|
var SENDER_ADDRESS = new libsignal.ProtocolAddress(senderAdress, 1);
|
||||||
var RECEIVER_ADDRESS = new libsignal.ProtocolAddress(receiverAdress, 1);
|
var RECEIVER_ADDRESS = new libsignal.ProtocolAddress(receiverAdress, 1);
|
||||||
|
|
||||||
var senderStore = new SignalProtocolStore();
|
//var senderStore = new SignalProtocolStore();
|
||||||
|
|
||||||
var receiverStore = new SignalProtocolStore();
|
//var receiverStore = new SignalProtocolStore();
|
||||||
|
|
||||||
var receiverSignedKeyId = 1;
|
var receiverSignedKeyId = 1;
|
||||||
|
|
||||||
@@ -229,7 +243,8 @@ app.post("/cryptMessage", async (req, res) => {
|
|||||||
return generatePreKeyBundle(receiverStore, receiverPreKeyId, receiverSignedKeyId);
|
return generatePreKeyBundle(receiverStore, receiverPreKeyId, receiverSignedKeyId);
|
||||||
}).then(function (preKeyBundle) {
|
}).then(function (preKeyBundle) {
|
||||||
var builder = new libsignal.SessionBuilder(senderStore, RECEIVER_ADDRESS);
|
var builder = new libsignal.SessionBuilder(senderStore, RECEIVER_ADDRESS);
|
||||||
sessionPromise = builder.initOutgoing(preKeyBundle).then(function () {
|
sessionPromise = builder.initOutgoing(preKeyBundle);
|
||||||
|
sessionPromise.then(function () {
|
||||||
|
|
||||||
var originalMessage = Buffer.from(message, 'utf8');
|
var originalMessage = Buffer.from(message, 'utf8');
|
||||||
var senderSessionCipher = new libsignal.SessionCipher(senderStore, RECEIVER_ADDRESS);
|
var senderSessionCipher = new libsignal.SessionCipher(senderStore, RECEIVER_ADDRESS);
|
||||||
@@ -237,79 +252,48 @@ app.post("/cryptMessage", async (req, res) => {
|
|||||||
//var receiverSessionCipher = new libsignal.SessionCipher(receiverStore, SENDER_ADDRESS);
|
//var receiverSessionCipher = new libsignal.SessionCipher(receiverStore, SENDER_ADDRESS);
|
||||||
|
|
||||||
senderSessionCipher.encrypt(originalMessage).then(function (ciphertext) {
|
senderSessionCipher.encrypt(originalMessage).then(function (ciphertext) {
|
||||||
|
console.log("KRI, RECSTORE:", receiverStore);
|
||||||
|
console.log("KRI, RECadress:", SENDER_ADDRESS);
|
||||||
|
|
||||||
res.json({ data: { receiverStore: receiverStore, senderAdress: senderAdress, message: ciphertext.body } })
|
res.json({
|
||||||
|
data: {
|
||||||
|
receiverStore: receiverStore,
|
||||||
|
SENDER_ADDRESS: SENDER_ADDRESS,
|
||||||
|
message: ciphertext.body
|
||||||
|
}
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
app.post("/decryptMessage2", async (req, res) => {
|
|
||||||
//sessionPromise=req.body.data.sessionPromise;
|
|
||||||
message = req.body.data.message;
|
|
||||||
//senderStore = req.body.data.senderStore;
|
|
||||||
//RECEIVER_ADDRESS = new libsignal.ProtocolAddress(req.body.data.receiverAdress.id, req.body.data.receiverAdress.deviceId);
|
|
||||||
//----------------
|
|
||||||
|
|
||||||
|
|
||||||
var senderAdress = req.body.data.senderAdress;//"xxxxxxxxx"
|
|
||||||
var receiverAdress = req.body.data.receiverAdress;//""yyyyyyyyyyyyy""
|
|
||||||
var receiverPreKeyId = req.body.data.receiverPreKeyId;// 1337;
|
|
||||||
var receiverSignedKeyId = req.body.data.receiverSignedKeyId;// 1;
|
|
||||||
|
|
||||||
var SENDER_ADDRESS = new libsignal.ProtocolAddress(senderAdress, 1);
|
|
||||||
var RECEIVER_ADDRESS = new libsignal.ProtocolAddress(receiverAdress, 1);
|
|
||||||
|
|
||||||
var senderStore = new SignalProtocolStore();
|
|
||||||
|
|
||||||
var receiverStore = new SignalProtocolStore();
|
|
||||||
|
|
||||||
var receiverSignedKeyId = 1;
|
|
||||||
|
|
||||||
var Curve = libsignal.Curve;
|
|
||||||
|
|
||||||
await Promise.all([
|
|
||||||
generateIdentity(senderStore),
|
|
||||||
generateIdentity(receiverStore),
|
|
||||||
]).then(function () {
|
|
||||||
return generatePreKeyBundle(receiverStore, receiverPreKeyId, receiverSignedKeyId);
|
|
||||||
}).then(function (preKeyBundle) {
|
|
||||||
var builder = new libsignal.SessionBuilder(senderStore, RECEIVER_ADDRESS);
|
|
||||||
sessionPromise = builder.initOutgoing(preKeyBundle).then(function () {
|
|
||||||
|
|
||||||
const buf5 = Buffer.from(message.text.split(','));
|
|
||||||
console.log(message)
|
|
||||||
var receiverSessionCipher = new libsignal.SessionCipher(receiverStore, SENDER_ADDRESS);//ubaceno
|
|
||||||
receiverSessionCipher.decryptPreKeyWhisperMessage(buf5, 'binary').then(function (ciphertext) {
|
|
||||||
console.log("DEKODIRANO:", ciphertext)
|
|
||||||
res.json({ data: { message: ciphertext } })
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
app.post('/deCryptMessage', (req, res) => {
|
app.post('/deCryptMessage', (req, res) => {
|
||||||
|
|
||||||
var receiverStore = req.body.data.receiverStore;//"xxxxxxxxx"
|
|
||||||
var senderAdress = req.body.data.senderAdress;//""yyyyyyyyyyyyy""
|
|
||||||
var message = req.body.data.message;//""yyyyyyyyyyyyy""
|
|
||||||
|
|
||||||
const buf5 = Buffer.from(message.text.split(','));
|
|
||||||
|
message = req.body.data.message;
|
||||||
|
const buf5 = Buffer.from(message.split(','));
|
||||||
|
//receiverStore = req.body.data.receiverStore;
|
||||||
|
//SENDER_ADDRESS = req.body.data.SENDER_ADDRESS;
|
||||||
|
senderAdress = req.body.data.senderAdress;
|
||||||
var SENDER_ADDRESS = new libsignal.ProtocolAddress(senderAdress, 1);
|
var SENDER_ADDRESS = new libsignal.ProtocolAddress(senderAdress, 1);
|
||||||
|
console.log("DEKRI, RECSTORE:", receiverStore.store.identityKey.pubKey);
|
||||||
|
console.log("DEKRI, RECSTORE:", SENDER_ADDRESS);
|
||||||
|
//var receiverSessionCipher = new libsignal.SessionCipher(receiverStore, SENDER_ADDRESS);
|
||||||
|
|
||||||
var receiverSessionCipher = new libsignal.SessionCipher(receiverStore, SENDER_ADDRESS);//ubaceno
|
//odavde
|
||||||
|
|
||||||
|
var receiverSessionCipher = new libsignal.SessionCipher(receiverStore, SENDER_ADDRESS); //ubaceno
|
||||||
receiverSessionCipher.decryptPreKeyWhisperMessage(buf5, 'binary').then(function (ciphertext) {
|
receiverSessionCipher.decryptPreKeyWhisperMessage(buf5, 'binary').then(function (ciphertext) {
|
||||||
console.log("DEKODIRANO:", ciphertext)
|
poruka = ciphertext.toString();
|
||||||
res.json({ data: { message: ciphertext } })
|
res.json({
|
||||||
|
data: {
|
||||||
|
message: poruka
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -320,8 +304,13 @@ app.post('/deCryptMessage', (req, res) => {
|
|||||||
|
|
||||||
|
|
||||||
app.post('/users', (req, res) => {
|
app.post('/users', (req, res) => {
|
||||||
const { username } = req.body
|
const {
|
||||||
const user = { name: username, id: username }
|
username
|
||||||
|
} = req.body
|
||||||
|
const user = {
|
||||||
|
name: username,
|
||||||
|
id: username
|
||||||
|
}
|
||||||
chatkit
|
chatkit
|
||||||
.createUser(user)
|
.createUser(user)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|||||||
179
src/Chat.js
179
src/Chat.js
@@ -16,7 +16,8 @@ class Chat extends Component {
|
|||||||
poruka: "",
|
poruka: "",
|
||||||
messages: [],
|
messages: [],
|
||||||
receiverStore: null,
|
receiverStore: null,
|
||||||
receiverAdress: null,
|
SENDER_ADDRESS: null,
|
||||||
|
message: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -37,14 +38,14 @@ class Chat extends Component {
|
|||||||
this.setState({ currentUser })
|
this.setState({ currentUser })
|
||||||
console.log('Bleep bloop 🤖 You are connected to Chatkit')
|
console.log('Bleep bloop 🤖 You are connected to Chatkit')
|
||||||
return currentUser.subscribeToRoom({
|
return currentUser.subscribeToRoom({
|
||||||
roomId: 19377131, // Replace with YOUR ROOM ID
|
roomId: 19377773, // Replace with YOUR ROOM ID
|
||||||
messageLimit: 100,
|
messageLimit: 100,
|
||||||
hooks: {
|
hooks: {
|
||||||
onNewMessage: message => {
|
onNewMessage: message => {
|
||||||
//dekodiranje
|
|
||||||
if (message != "") {
|
if (message != "") {
|
||||||
console.log(message)
|
console.log(message)
|
||||||
this.onDeCryptingMessage(message)
|
this.onDeCryptingMessage2(this.state.poruka);
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -64,7 +65,7 @@ class Chat extends Component {
|
|||||||
|
|
||||||
onDeCryptingMessage = message => {
|
onDeCryptingMessage = message => {
|
||||||
|
|
||||||
console.log("DEKRIPCIJA");
|
console.log("DEKRIPCIJA, poruka primljena:", message);
|
||||||
fetch('http://localhost:3001/decryptMessage2', {
|
fetch('http://localhost:3001/decryptMessage2', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@@ -98,6 +99,106 @@ class Chat extends Component {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
onSend = text => {
|
||||||
|
//ubaceno
|
||||||
|
console.log("Primljena poruka:",text);
|
||||||
|
fetch('http://localhost:3001/cryptMessage', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
data: {
|
||||||
|
senderAdress: "xxxxxxxxx",
|
||||||
|
receiverAdress: "yyyyyyyyyyyyy",
|
||||||
|
receiverPreKeyId: 1337,
|
||||||
|
receiverSignedKeyId: 1,
|
||||||
|
message: text
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => { console.log("REPSONSE:", response); return response.json(); })
|
||||||
|
.then(data => {
|
||||||
|
this.state.poruka = data.data.message.data.toString();
|
||||||
|
this.setState({
|
||||||
|
receiverStore: data.data.receiverStore,
|
||||||
|
SENDER_ADDRESS: data.data.SENDER_ADDRESS
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('error', error)
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('error', error)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
//kraj
|
||||||
|
|
||||||
|
this.state.currentUser.sendMessage({
|
||||||
|
text,
|
||||||
|
roomId: this.state.currentRoom.id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
onDeCryptingMessage2 = message => {
|
||||||
|
|
||||||
|
console.log("DEKRIPCIJA, poruka primljena:", message);
|
||||||
|
fetch('http://localhost:3001/decryptMessage', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
data: {
|
||||||
|
receiverStore: this.state.receiverStore,
|
||||||
|
SENDER_ADDRESS: this.state.SENDER_ADDRESS,
|
||||||
|
message: message,
|
||||||
|
senderAdress: "xxxxxxxxx"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => { console.log("REPSONSE:", response); return response.json(); })
|
||||||
|
.then(data => {
|
||||||
|
console.log("DATA:", data.data)
|
||||||
|
this.setState({
|
||||||
|
message: data.data.message
|
||||||
|
})
|
||||||
|
this.setState({
|
||||||
|
messages: [...this.state.messages, this.state.message]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('error', error)
|
||||||
|
}).catch(error => {
|
||||||
|
console.error('error', error)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="wrapper">
|
||||||
|
<div>
|
||||||
|
<OnlineList
|
||||||
|
currentUser={this.state.currentUser}
|
||||||
|
users={this.state.currentRoom.users}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="chat">
|
||||||
|
<MessageList messages={this.state.messages} />
|
||||||
|
<SendMessageForm onSend={this.onSend} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Chat
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
onCryptingMessage = message => {
|
onCryptingMessage = message => {
|
||||||
fetch('http://localhost:3001/cryptMessage', {
|
fetch('http://localhost:3001/cryptMessage', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -133,70 +234,4 @@ class Chat extends Component {
|
|||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
onSend = text => {
|
|
||||||
//ubaceno
|
|
||||||
fetch('http://localhost:3001/cryptMessage', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
data: {
|
|
||||||
senderAdress: "xxxxxxxxx",
|
|
||||||
receiverAdress: "yyyyyyyyyyyyy",
|
|
||||||
receiverPreKeyId: 1337,
|
|
||||||
receiverSignedKeyId: 1,
|
|
||||||
message: text
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.then(response => { console.log("REPSONSE:", response); return response.json(); })
|
|
||||||
.then(data => {
|
|
||||||
|
|
||||||
this.state.poruka = data.data.message.data.toString();
|
|
||||||
this.setState({
|
|
||||||
receiverStore: data.data.receiverStore,
|
|
||||||
senderAdress: data.data.senderAdress
|
|
||||||
})
|
|
||||||
|
|
||||||
this.state.currentUser.sendMessage({
|
|
||||||
text: this.state.poruka ,
|
|
||||||
roomId: this.state.currentRoom.id
|
|
||||||
})
|
|
||||||
return data.data.message
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('error', error)
|
|
||||||
}).catch(error => {
|
|
||||||
console.error('error', error)
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
//kraj
|
|
||||||
|
|
||||||
/*this.state.currentUser.sendMessage({
|
|
||||||
text,
|
|
||||||
roomId: this.state.currentRoom.id
|
|
||||||
})*/
|
|
||||||
}
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<div className="wrapper">
|
|
||||||
<div>
|
|
||||||
<OnlineList
|
|
||||||
currentUser={this.state.currentUser}
|
|
||||||
users={this.state.currentRoom.users}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="chat">
|
|
||||||
<MessageList messages={this.state.messages} />
|
|
||||||
<SendMessageForm onSend={this.onSend} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Chat
|
|
||||||
@@ -23,6 +23,23 @@ class MessageList extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderItem(message) {
|
renderItem(message) {
|
||||||
|
return (
|
||||||
|
<ListViewRow key={message.id}>
|
||||||
|
<Text color="#414141" size="13" bold>
|
||||||
|
{"Posiljalac:"}:
|
||||||
|
</Text>
|
||||||
|
<Text color="#414141" size="13">
|
||||||
|
{message}
|
||||||
|
</Text>
|
||||||
|
</ListViewRow>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MessageList
|
||||||
|
|
||||||
|
/*
|
||||||
|
renderItem(message) {
|
||||||
return (
|
return (
|
||||||
<ListViewRow key={message.id}>
|
<ListViewRow key={message.id}>
|
||||||
<Text color="#414141" size="13" bold>
|
<Text color="#414141" size="13" bold>
|
||||||
@@ -34,6 +51,5 @@ class MessageList extends Component {
|
|||||||
</ListViewRow>
|
</ListViewRow>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export default MessageList
|
*/
|
||||||
Reference in New Issue
Block a user