Skip to content

Commit aa40635

Browse files
author
teach.gamil.com
committed
feat:message content added
1 parent f651404 commit aa40635

File tree

9 files changed

+146
-103
lines changed

9 files changed

+146
-103
lines changed

Sources/Chat/Conversation.swift

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,12 @@ extension PushChat {
4545

4646
if toDecrypt {
4747
for i in 0..<messages.count {
48-
let decryptedMsg = try await decryptMessage(
48+
let (decryptedMsg, decryptedObj) = try await decryptMessage(
4949
message: messages[i], privateKeyArmored: pgpPrivateKey, env: env)
50+
51+
if decryptedObj != nil {
52+
messages[i].messageObj = decryptedObj
53+
}
5054
messages[i].messageContent = decryptedMsg
5155
}
5256
}
@@ -80,44 +84,55 @@ extension PushChat {
8084
message: Message,
8185
privateKeyArmored: String,
8286
env: ENV = ENV.STAGING
83-
) async throws -> String {
87+
) async throws -> (String, String?) {
8488
do {
8589

8690
if message.encType == "pgpv1:group" {
8791
return try await decryptPrivateGroupMessage(
8892
message, privateKeyArmored: privateKeyArmored, env: env)
8993
}
9094
if message.encType != "pgp" {
91-
return message.messageContent
95+
return (message.messageContent, nil)
9296
}
93-
return try decryptMessage(
97+
let decrypytedMessage = try decryptMessage(
9498
message.messageContent, encryptedSecret: message.encryptedSecret!,
9599
privateKeyArmored: privateKeyArmored)
100+
101+
return (decrypytedMessage, nil)
96102
} catch {
97103
if isGroupChatId(message.toCAIP10) {
98-
return "message encrypted before you join"
104+
return ("message encrypted before you join", nil)
99105
}
100-
return "Unable to decrypt message"
106+
return ("Unable to decrypt message", nil)
101107
}
102108
}
103109

104110
public static func decryptPrivateGroupMessage(
105111
_ message: Message,
106112
privateKeyArmored: String,
107113
env: ENV
108-
) async throws -> String {
114+
) async throws -> (String, String?) {
109115
do {
116+
var messageObj: String? = nil
110117

111118
let encryptedSecret = try await PushChat.getGroupSessionKey(
112119
sessionKey: message.sessionKey!, env: env)
113120

114-
print("got enc sec \(encryptedSecret)")
121+
if message.messageObj != nil {
122+
let msgObj = message.messageObj!
115123

116-
return try decryptMessage(
124+
messageObj = try decryptMessage(
125+
msgObj, encryptedSecret: encryptedSecret,
126+
privateKeyArmored: privateKeyArmored)
127+
}
128+
129+
let decMsg = try decryptMessage(
117130
message.messageContent,
118131
encryptedSecret: encryptedSecret,
119132
privateKeyArmored: privateKeyArmored
120133
)
134+
135+
return (decMsg, messageObj)
121136
} catch {
122137
throw PushChat.ChatError.dectyptionFalied
123138
}

Sources/Chat/Send.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ extension PushChat {
176176
("fromCAIP10", options.account),
177177
("toCAIP10", options.receiverAddress),
178178
("messageObj", messageConent),
179-
("messageType", "Text"),
179+
("messageType", options.messageType),
180180
("encType", encType),
181181
("sessionKey", groupInfo.sessionKey!),
182182
("encryptedSecret", "null"),

Sources/Helpers/Chat/GetInboxList.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private func decryptFeeds(
5757
throw PushChat.ChatError.decryptedPrivateKeyNecessary
5858
}
5959

60-
let decryptedMsg = try await PushChat.decryptMessage(
60+
let (decryptedMsg, _) = try await PushChat.decryptMessage(
6161
message: currentFeed.msg!, privateKeyArmored: pgpPrivateKey!, env: env)
6262
currentFeed.msg?.messageContent = decryptedMsg
6363
}

Sources/Helpers/Ipfs/Cid.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public struct Message: Codable {
77
public var toDID: String
88
public var messageType: String
99
public var messageContent: String
10+
public var messageObj: String?
1011
public var signature: String
1112
public var sigType: String
1213
public var timestamp: Int?
@@ -19,13 +20,16 @@ public struct Message: Codable {
1920

2021
public func getCID(env: ENV, cid: String) async throws -> Message {
2122
let url: URL = PushEndpoint.getCID(env: env, cid: cid).url
23+
print("this url is \(url)")
24+
2225
let (data, res) = try await URLSession.shared.data(from: url)
2326

2427
guard let httpResponse = res as? HTTPURLResponse else {
2528
throw URLError(.badServerResponse)
2629
}
2730

2831
guard (200...299).contains(httpResponse.statusCode) else {
32+
print(res)
2933
throw URLError(.badServerResponse)
3034
}
3135

Tests/Chat/Group/SendGroupMsgTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class GroupChatSendMsgTests: XCTestCase {
3434
pgpPrivateKey: UserPrivateKey
3535
))
3636

37-
let decrytedMessage = try await PushChat.decryptMessage(
37+
let (decrytedMessage, _) = try await PushChat.decryptMessage(
3838
message: msgRes, privateKeyArmored: UserPrivateKey)
3939

4040
XCTAssertEqual(msgRes.encType, "pgp")

Tests/Chat/P2P/SendTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ class SendChatsTests: XCTestCase {
201201
pgpPrivateKey: UserPrivateKey
202202
))
203203

204-
let res = try await PushChat.decryptMessage(message: msg, privateKeyArmored: UserPrivateKey)
204+
let (res, _) = try await PushChat.decryptMessage(
205+
message: msg, privateKeyArmored: UserPrivateKey)
205206

206207
XCTAssertEqual(res, messageToSen2)
207208
}

Tests/Helper/IpfsTests.swift

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,36 @@ import XCTest
44
class IpfsTests: XCTestCase {
55

66
func testGetCID() async throws {
7-
let cid = "bafyreiauddxpzcgcwphwhsvldctuka6tvtwsfbga6v57p4gno2zpo3vmtm"
8-
let message = try await Push.getCID(env: ENV.STAGING, cid: cid)
9-
10-
XCTAssertNotNil(message.fromCAIP10, "from CAIP10 should not be nil")
11-
XCTAssertNotNil(message.toCAIP10, "to CAIP10 should not be nil")
12-
XCTAssertNotNil(message.messageType, "messageType should not be nil")
13-
XCTAssertNotNil(message.messageContent, "messageContent should not be nil")
14-
15-
XCTAssertEqual(message.fromCAIP10, message.fromDID, "from CAIP10 should be equal to from DID")
16-
XCTAssertEqual(message.toCAIP10, message.toDID, "to CAIP10 should be equal to to DID")
17-
XCTAssert(message.encType == "pgp", "encType should be pgp")
18-
19-
XCTAssertTrue(
20-
message.signature.hasPrefix("-----BEGIN PGP SIGNATURE-----"),
21-
"signature should begin with appropriate prefix")
22-
XCTAssertTrue(
23-
message.signature.hasSuffix("-----END PGP SIGNATURE-----\n"),
24-
"signature should end with appropriate suffix")
25-
XCTAssertTrue(
26-
message.encryptedSecret!.hasPrefix("-----BEGIN PGP MESSAGE-----"),
27-
"encryptedSecret should begin with appropriate prefix")
28-
XCTAssertTrue(
29-
message.encryptedSecret!.hasSuffix("-----END PGP MESSAGE-----\n"),
30-
"encryptedSecret should end with appropriate suffix")
7+
let cid = "v2:8884b4e8df8e6ea8985bac41f4cd87407c02a2ac1d411033bd0586a252b6c536"
8+
let message = try await Push.getCID(env: ENV.DEV, cid: cid)
9+
10+
print("got the message: \(message)")
11+
12+
// XCTAssertNotNil(message.fromCAIP10, "from CAIP10 should not be nil")
13+
// XCTAssertNotNil(message.toCAIP10, "to CAIP10 should not be nil")
14+
// XCTAssertNotNil(message.messageType, "messageType should not be nil")
15+
// XCTAssertNotNil(message.messageContent, "messageContent should not be nil")
16+
17+
// XCTAssertEqual(message.fromCAIP10, message.fromDID, "from CAIP10 should be equal to from DID")
18+
// XCTAssertEqual(message.toCAIP10, message.toDID, "to CAIP10 should be equal to to DID")
19+
// XCTAssert(message.encType == "pgp", "encType should be pgp")
20+
21+
// XCTAssertTrue(
22+
// message.signature.hasPrefix("-----BEGIN PGP SIGNATURE-----"),
23+
// "signature should begin with appropriate prefix")
24+
// XCTAssertTrue(
25+
// message.signature.hasSuffix("-----END PGP SIGNATURE-----\n"),
26+
// "signature should end with appropriate suffix")
27+
// XCTAssertTrue(
28+
// message.encryptedSecret!.hasPrefix("-----BEGIN PGP MESSAGE-----"),
29+
// "encryptedSecret should begin with appropriate prefix")
30+
// XCTAssertTrue(
31+
// message.encryptedSecret!.hasSuffix("-----END PGP MESSAGE-----\n"),
32+
// "encryptedSecret should end with appropriate suffix")
33+
34+
// https://backend-dev.epns.io/apis/v1/ipfs/v2:8884b4e8df8e6ea8985bac41f4cd87407c02a2ac1d411033bd0586a252b6c536?
35+
// https://backend-dev.epns.io/apis/v1/ipfs/v2:8884b4e8df8e6ea8985bac41f4cd87407c02a2ac1d411033bd0586a252b6c536%3F?
36+
// https://backend-dev.epns.io/apis/v1/ipfs/v2:8884b4e8df8e6ea8985bac41f4cd87407c02a2ac1d411033bd0586a252b6c536?
3137
}
3238

3339
func testGetInvalidCID() async throws {

Tests/e2e/PrivateGroupDecrypt.swift

Lines changed: 76 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,34 @@ class PrivateGroupSendRead: XCTestCase {
1313
env: env
1414
)!
1515

16-
let _ = try await PushChat.Latest(
16+
let message = try await PushChat.Latest(
1717
threadHash: converationHash,
1818
pgpPrivateKey: PG_PGP_KEY,
1919
toDecrypt: true,
2020
env: env
2121
)
2222

23-
// print("got message \(message.messageContent)")
24-
// print(message)
23+
print("got message \(message.messageContent)")
24+
print(message)
2525

2626
}
2727

2828
func testPrivateGroupSendPrivateMessage() async throws {
2929

30-
let _ = try await PushChat.send(
30+
// let res = try await PushChat.send(
31+
// PushChat.SendOptions(
32+
// messageContent: "This is the test message",
33+
// messageType: "Text",
34+
// receiverAddress: PG_GROUP_ID,
35+
// account: PG_USER,
36+
// pgpPrivateKey: PG_PGP_KEY
37+
// ))
38+
39+
let res = try await PushChat.send(
3140
PushChat.SendOptions(
32-
messageContent: "This is the test message",
33-
messageType: "Text",
41+
messageContent:
42+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAEa0lEQVR4nLzW+1OUVRwG8F1Ylk0YxSQuAxjIRRhDyiQJKHZlAkSlHQdwEkSTywgKCiKIqFsbYEFIGWhgCBKjJBexkSUFVAZowLxEEDeH5DJyWTccySsS9Dz9D7788DnM8L7Med5zzvd7JIPNVSKRKGf3Kqi3whTuezgMK+ySYOO2XhhVVAJjCwegW2otPHegCEpzCuCU4gWclWyEohEb4J2wFOYd4n/WE73iH3GB83EMVRF1MLjrJAwKMYJPVWvgyrsv4cWQbjgg2wQNI39kYvUDWONxE941/APWBsYxfXAxfHfOD8pS+oVIIMkpmsTwbDoAeo58CMfnzkJzBdfD3SKFcyn/G2Zd4hevdOMK7Y1xhGU9Q7DYfA/MtqqHC8Z00PTELFxrdV2IBGLT3EgMccqr8NjUQhgz4gp1hXegmToQOumpYHfrcpjyiwf8yCEG2id1wYXy23CDNh/+W38JOv7MNVNV7xIigaTVbQZDc1oFLLTjfNWKMOiXHgW981vgqMwcWml4DqQJLtA2k7tLmecDd56/BsvrTOCVDj7pnMi3IsOshEggznQ4jeGRXRZnF/8pPDPEE6CxWAy/lG6B+zRMNrF2Cta587ULdtWwN+UCrMzk6Zme3Q1VPf5wo88OeHNvhBAJJPHB3EUeS8theCRX36Wdq/JX91H4+XkvmHuQCWKmPoNJTs+howPz3dd+AjfZP2TWEp4hm7S3OOtrm+F4dpkgCRLl3AMHbpvBzmEZfOFVA5+FhkDftkdwsyd3yPrvNnDu9X/CXbZ8fnRsO8xuiIeVsXKY2voPLDTiSvQvmRQigXiy7wMM82ruopduofCLNms40MNd/PUM5/h8aBEsq2DFf3OSe8ml5XV4aM8YVH61Ghq6jEBXS24yLyXrkv/leUESnCwwwBAQzS8+Ge4Lw5s08NeJIbhM+huVsTdlRl+HUYd3wv1FXAPFOv7uWsuKm9U2Dqud0qHJa+/AG9+0CJFAIvbkTje16INjaq573Ag7VI+O31GryoDpIn1o4aOE377NZ94/fA/eql0HfQdOwMfbz8A+B55h/Sz+9UjnD4IkSJ65zPlaci5JInYxa18LOOHGKh/XxC5WOMiTuSYglZkW83lrB/asiw03YG40d1FxfzOU65pg4yr2tR0GWkESnNJwxXOcW+Hy+CVQv/cJ9KnkiZX/znuOmY0atqflwuDvuTY1Vy3hYCDzjSrkUBfUBtu2sB+UefJe5PnEUYgE4mmDKxiStzZCg845OFx6BCZ4bINdZzuhXx5rVOlj9on5kvdgRwZvc/kPeAJiU1h3w46zCjRXMU24P/vz0QYnIRJI7oc+xVCWztqtkS6D0nOsRUaLjsEIk63QfQXvHGErWXl+OsWdXvExu3HAAmN4K5nfOt57P6zTSvklug/CRON8IRKIlaGs+KtlrKah/3fgNzSlsNKEs6sb5c0n2YP91smSM1VlBEH7fFanMQXvpq7r2cXaT3OF7tzrgM5G7NiBxrZCJPgvAAD//zl2dP4g/Ks+AAAAAElFTkSuQmCC",
43+
messageType: "Image",
3444
receiverAddress: PG_GROUP_ID,
3545
account: PG_USER,
3646
pgpPrivateKey: PG_PGP_KEY
@@ -40,68 +50,68 @@ class PrivateGroupSendRead: XCTestCase {
4050

4151
}
4252

43-
let PG_USER = "0xc95fE6BC0eC97aFA7adF2e98628caC6ec28Bb04c"
44-
let PG_GROUP_ID = "ed3046965676e2118f452aa21318e527bec662dece05f63003e934c116b13e7d"
53+
let PG_USER = "0x45A6859F165edf0a55bE1246404D87f55D1A2a75"
54+
let PG_GROUP_ID = "65247b1fe5b83e980d0cfced52d050afa4290918b41bd3ded04edc74214b25c0"
55+
4556
let PG_PGP_KEY = """
4657
-----BEGIN PGP PRIVATE KEY BLOCK-----
4758
48-
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
103-
QdNy/dq7bCBplsE0k/pBwxs/AQ==
104-
=svYB
59+
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
114+
aLKX7DslUvWS3JV3SyuVqgMD2g==
115+
=oN+c
105116
-----END PGP PRIVATE KEY BLOCK-----
106-
107117
"""

Tests/e2e/PrivateGroupUpdate.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Push
2+
import XCTest
3+
4+
class PrivateGroupUpdate: XCTestCase {
5+
let env = ENV.STAGING
6+
7+
}

0 commit comments

Comments
 (0)