Browse Source

add whatsapp client user agent configuration

pull/48/head
Dimas Restu H 3 years ago
parent
commit
924c52f4ff
  1. 67
      pkg/whatsapp/whatsapp.go

67
pkg/whatsapp/whatsapp.go

@ -27,6 +27,12 @@ import (
var WhatsAppDatastore *sqlstore.Container
var WhatsAppClient = make(map[string]*whatsmeow.Client)
var (
WhatsAppClientProxyURL string
WhatsAppUserAgentName string
WhatsAppUserAgentType string
)
func init() {
var err error
@ -45,6 +51,18 @@ func init() {
log.Print(nil).Fatal("Error Connect WhatsApp Client Datastore")
}
WhatsAppClientProxyURL, _ = env.GetEnvString("WHATSAPP_CLIENT_PROXY_URL")
WhatsAppUserAgentName, err = env.GetEnvString("WHATSAPP_USER_AGENT_NAME")
if err != nil {
log.Print(nil).Fatal("Error Parse Environment Variable for WhatsApp Client User Agent Name")
}
WhatsAppUserAgentType, err = env.GetEnvString("WHATSAPP_USER_AGENT_TYPE")
if err != nil {
log.Print(nil).Fatal("Error Parse Environment Variable for WhatsApp Client User Agent Type")
}
WhatsAppDatastore = datastore
}
@ -58,8 +76,8 @@ func WhatsAppInitClient(device *store.Device, jid string) {
}
// Set Client Properties
store.DeviceProps.Os = proto.String("Go WhatsApp Multi-Device REST")
store.DeviceProps.PlatformType = waproto.DeviceProps_DESKTOP.Enum()
store.DeviceProps.Os = proto.String(WhatsAppUserAgentName)
store.DeviceProps.PlatformType = WhatsAppGetUserAgent(WhatsAppUserAgentType).Enum()
store.DeviceProps.RequireFullSync = proto.Bool(false)
// Set Client Versions
@ -88,6 +106,45 @@ func WhatsAppInitClient(device *store.Device, jid string) {
}
}
func WhatsAppGetUserAgent(agentType string) waproto.DeviceProps_PlatformType {
switch strings.ToLower(agentType) {
case "desktop":
return waproto.DeviceProps_DESKTOP
case "mac":
return waproto.DeviceProps_CATALINA
case "android":
return waproto.DeviceProps_ANDROID_AMBIGUOUS
case "android-phone":
return waproto.DeviceProps_ANDROID_PHONE
case "andorid-tablet":
return waproto.DeviceProps_ANDROID_TABLET
case "ios-phone":
return waproto.DeviceProps_IOS_PHONE
case "ios-catalyst":
return waproto.DeviceProps_IOS_CATALYST
case "ipad":
return waproto.DeviceProps_IPAD
case "wearos":
return waproto.DeviceProps_WEAR_OS
case "ie":
return waproto.DeviceProps_IE
case "edge":
return waproto.DeviceProps_EDGE
case "chrome":
return waproto.DeviceProps_CHROME
case "firefox":
return waproto.DeviceProps_FIREFOX
case "opera":
return waproto.DeviceProps_OPERA
case "aloha":
return waproto.DeviceProps_ALOHA
case "tv-tcl":
return waproto.DeviceProps_TCL_TV
default:
return waproto.DeviceProps_UNKNOWN
}
}
func WhatsAppGenerateQR(qrChan <-chan whatsmeow.QRChannelItem) (string, int) {
qrChanCode := make(chan string)
qrChanTimeout := make(chan int)
@ -126,12 +183,12 @@ func WhatsAppLogin(jid string) (string, int, error) {
return "", 0, err
}
// Set WhatsApp Client Presence to Available
_ = WhatsAppClient[jid].SendPresence(types.PresenceAvailable)
// Get Generated QR Code and Timeout Information
qrImage, qrTimeout := WhatsAppGenerateQR(qrChanGenerate)
// Set WhatsApp Client Presence to Available
_ = WhatsAppClient[jid].SendPresence(types.PresenceAvailable)
// Return QR Code in Base64 Format and Timeout Information
return "data:image/png;base64," + qrImage, qrTimeout, nil
} else {

Loading…
Cancel
Save