Skip to content

Commit

Permalink
reaction and reply added
Browse files Browse the repository at this point in the history
  • Loading branch information
teach.gamil.com committed Feb 11, 2024
1 parent aa40635 commit 8f355e0
Show file tree
Hide file tree
Showing 3 changed files with 174 additions and 24 deletions.
70 changes: 57 additions & 13 deletions Sources/Chat/Send.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,27 +47,70 @@ extension PushChat {
}
}

public enum MessageType: String {
case Text = "Text"
case Image = "Image"
case Reaction = "Reaction"
case Reply = "Reply"
}

public struct SendOptions {
public var messageContent = ""
public var messageType = "Text"
public var messageType: MessageType
public var receiverAddress: String
public var account: String
public var pgpPrivateKey: String
public var senderPgpPubicKey: String?
public var receiverPgpPubicKey: String?
public var processMessage: String?
public var reference: String?
public var env: ENV = .STAGING

public enum Reactions: String {
case THUMBSUP = "\u{1F44D}"
case THUMBSDOWN = "\u{1F44E}"
case HEART = "\u{2764}\u{FE0F}"
case CLAP = "\u{1F44F}"
case LAUGH = "\u{1F602}"
case SAD = "\u{1F622}"
case ANGRY = "\u{1F621}"
case SURPRISE = "\u{1F632}"
case FIRE = "\u{1F525}"
}

public init(
messageContent: String, messageType: String, receiverAddress: String, account: String,
pgpPrivateKey: String, env: ENV = .STAGING
pgpPrivateKey: String, refrence: String? = nil, env: ENV = .STAGING
) {
self.messageContent = messageContent
self.messageType = messageType
self.messageType = MessageType(rawValue: messageType)!
self.receiverAddress = walletToPCAIP10(account: receiverAddress)
self.account = walletToPCAIP10(account: account)
self.pgpPrivateKey = pgpPrivateKey
self.reference = refrence
self.env = env
}

public func getMessageObjJSON() throws -> String {
var res = ""

if self.messageType == MessageType.Text || self.messageType == MessageType.Image {
res = try getJsonStringFromKV([
("content", self.messageContent)
])
} else if self.messageType == MessageType.Reaction {
res = try getJsonStringFromKV([
("content", self.messageContent),
("refrence", self.reference!),
])
} else if self.messageType == MessageType.Reply {
return """
{"content":{"messageType":"Text","messageObj":{"content":"\(self.messageContent)"}},"reference":"\(self.reference!)"}
""".trimmingCharacters(in: .whitespaces)
}

return res
}
}

static func sendIntentService(payload: SendMessagePayload, env: ENV) async throws -> Message {
Expand Down Expand Up @@ -154,19 +197,20 @@ extension PushChat {
{

var encType = "PlainText"
var (signature, messageConent) = ("", options.messageContent)
var (dep_signature, messageConent) = ("", options.messageContent)
let messageObj = try options.getMessageObjJSON()

let secretKey = try Pgp.pgpDecrypt(
cipherText: groupInfo.encryptedSecret!, toPrivateKeyArmored: options.pgpPrivateKey)

if groupInfo.encryptedSecret != nil {
// Enc message
encType = "pgpv1:group"

messageConent = try AESCBCHelper.encrypt(messageText: messageConent, secretKey: secretKey)
signature = try Pgp.sign(message: messageConent, privateKey: options.pgpPrivateKey)
dep_signature = try Pgp.sign(message: messageConent, privateKey: options.pgpPrivateKey)

} else {
signature = try signMessage(
dep_signature = try signMessage(
messageContent: messageConent, senderPgpPrivateKey: options.pgpPrivateKey)
}

Expand All @@ -175,8 +219,8 @@ extension PushChat {
("toDID", options.account),
("fromCAIP10", options.account),
("toCAIP10", options.receiverAddress),
("messageObj", messageConent),
("messageType", options.messageType),
("messageObj", messageObj),
("messageType", options.messageType.rawValue),
("encType", encType),
("sessionKey", groupInfo.sessionKey!),
("encryptedSecret", "null"),
Expand All @@ -189,9 +233,9 @@ extension PushChat {
fromDID: options.account, toDID: options.receiverAddress,
fromCAIP10: options.account, toCAIP10: options.receiverAddress,
messageContent: messageConent,
messageObj: messageConent,
messageType: options.messageType,
signature: signature, encType: encType, encryptedSecret: nil, sigType: "pgpv3",
messageObj: messageObj,
messageType: options.messageType.rawValue,
signature: dep_signature, encType: encType, encryptedSecret: nil, sigType: "pgpv3",
verificationProof: "pgpv3:\(verificationProof)",
sessionKey: groupInfo.sessionKey)

Expand Down Expand Up @@ -224,7 +268,7 @@ extension PushChat {
return SendMessagePayload(
fromDID: options.account, toDID: options.receiverAddress,
fromCAIP10: options.account, toCAIP10: options.receiverAddress,
messageContent: messageConent, messageType: options.messageType,
messageContent: messageConent, messageType: options.messageType.rawValue,
signature: signature, encType: encType, encryptedSecret: encryptedSecret, sigType: "pgp")
}

Expand Down
78 changes: 67 additions & 11 deletions Tests/e2e/PrivateGroupDecrypt.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,32 +20,88 @@ class PrivateGroupSendRead: XCTestCase {
env: env
)

print("got message \(message.messageContent)")
print(message)
assert(message.messageContent != "")

// print("got message \(message.messageContent)")
// print(message)

}

func testPrivateGroupSendPrivateMessage() async throws {
func testPrivateGroupSendPrivateMessageText() async throws {
let res = try await PushChat.send(
PushChat.SendOptions(
messageContent: "This is the test message",
messageType: PushChat.MessageType.Text.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY
))

// let res = try await PushChat.send(
// PushChat.SendOptions(
// messageContent: "This is the test message",
// messageType: "Text",
// receiverAddress: PG_GROUP_ID,
// account: PG_USER,
// pgpPrivateKey: PG_PGP_KEY
// ))
assert(res.cid != nil)
}

func testPrivateGroupSendPrivateMessageImage() async throws {
let res = try await PushChat.send(
PushChat.SendOptions(
messageContent:
"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",
messageType: "Image",

receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY
))

assert(res.cid != nil)
}

func testPrivateGroupSendPrivateMessageReaction() async throws {

let res_0 = try await PushChat.send(
PushChat.SendOptions(
messageContent: "This is the test message",
messageType: PushChat.MessageType.Text.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY
))

let res = try await PushChat.send(
PushChat.SendOptions(
messageContent: PushChat.SendOptions.Reactions.THUMBSUP.rawValue,
messageType: PushChat.MessageType.Reaction.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY,
refrence: res_0.cid!
))

assert(res.cid != nil)

}

func testPrivateGroupSendPrivateMessageReply() async throws {
let res_0 = try await PushChat.send(
PushChat.SendOptions(
messageContent: "This is the test message",
messageType: PushChat.MessageType.Text.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY
))

let res = try await PushChat.send(
PushChat.SendOptions(
messageContent: "This is the reply message",
messageType: PushChat.MessageType.Reply.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY,
refrence: res_0.cid!
))

assert(res.cid != nil)

}

}
Expand Down
50 changes: 50 additions & 0 deletions docs/GroupChat.md
Original file line number Diff line number Diff line change
Expand Up @@ -247,3 +247,53 @@ try await PushChat.leaveGroup(
)
```
---


### Chat Reply
```swift

// Send normal chat
let m1 = PushChat.SendOptions(
messageContent: "This is the test message",
messageType: PushChat.MessageType.Text.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY
))

// Send reply
try await PushChat.send(
PushChat.SendOptions(
messageContent: "This is the reply message",
messageType: PushChat.MessageType.Reply.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY,
refrence: m1.cid!
))
```
---

### Chat Reaction
```swift
// Send normal chat
let m1 = PushChat.SendOptions(
messageContent: "This is the test message",
messageType: PushChat.MessageType.Text.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY
))

// Send reaction
try await PushChat.send(
PushChat.SendOptions(
messageContent:PushChat.SendOptions.Reactions.THUMBSUP.rawValue,
messageType: PushChat.MessageType.Reply.rawValue,
receiverAddress: PG_GROUP_ID,
account: PG_USER,
pgpPrivateKey: PG_PGP_KEY,
refrence: m1.cid!
))
```
---

0 comments on commit 8f355e0

Please sign in to comment.