├── .gitignore ├── README.md ├── app ├── __init__.py ├── layer.py ├── mac │ ├── __init__.py │ ├── layer.py │ ├── mac.py │ ├── run.py │ └── signals.py ├── models │ ├── __init__.py │ ├── message.py │ └── receipt.py ├── receiver │ ├── __init__.py │ └── receiver.py ├── requirements.txt └── utils │ ├── __init__.py │ ├── downloader.py │ ├── helper.py │ └── media_decrypter.py ├── clean.sh ├── config.py ├── libs ├── python-axolotl │ ├── .gitignore │ ├── .travis.yml │ ├── LICENSE │ ├── README.md │ ├── axolotl │ │ ├── __init__.py │ │ ├── axolotladdress.py │ │ ├── duplicatemessagexception.py │ │ ├── ecc │ │ │ ├── __init__.py │ │ │ ├── curve.py │ │ │ ├── djbec.py │ │ │ ├── ec.py │ │ │ └── eckeypair.py │ │ ├── groups │ │ │ ├── __init__.py │ │ │ ├── groupcipher.py │ │ │ ├── groupsessionbuilder.py │ │ │ ├── ratchet │ │ │ │ ├── __init__.py │ │ │ │ ├── senderchainkey.py │ │ │ │ └── sendermessagekey.py │ │ │ ├── senderkeyname.py │ │ │ └── state │ │ │ │ ├── __init__.py │ │ │ │ ├── senderkeyrecord.py │ │ │ │ ├── senderkeystate.py │ │ │ │ └── senderkeystore.py │ │ ├── identitykey.py │ │ ├── identitykeypair.py │ │ ├── invalidkeyexception.py │ │ ├── invalidkeyidexception.py │ │ ├── invalidmessageexception.py │ │ ├── invalidversionexception.py │ │ ├── kdf │ │ │ ├── __init__.py │ │ │ ├── derivedmessagesecrets.py │ │ │ ├── derivedrootsecrets.py │ │ │ ├── hkdf.py │ │ │ ├── hkdfv2.py │ │ │ ├── hkdfv3.py │ │ │ └── messagekeys.py │ │ ├── legacymessageexception.py │ │ ├── nosessionexception.py │ │ ├── protobuf │ │ │ ├── LocalStorageProtocol.proto │ │ │ └── WhisperTextProtocol.proto │ │ ├── protocol │ │ │ ├── __init__.py │ │ │ ├── ciphertextmessage.py │ │ │ ├── keyexchangemessage.py │ │ │ ├── prekeywhispermessage.py │ │ │ ├── senderkeydistributionmessage.py │ │ │ ├── senderkeymessage.py │ │ │ ├── whispermessage.py │ │ │ └── whisperprotos_pb2.py │ │ ├── ratchet │ │ │ ├── __init__.py │ │ │ ├── aliceaxolotlparameters.py │ │ │ ├── bobaxolotlparamaters.py │ │ │ ├── chainkey.py │ │ │ ├── ratchetingsession.py │ │ │ ├── rootkey.py │ │ │ └── symmetricaxolotlparameters.py │ │ ├── sessionbuilder.py │ │ ├── sessioncipher.py │ │ ├── state │ │ │ ├── __init__.py │ │ │ ├── axolotlstore.py │ │ │ ├── identitykeystore.py │ │ │ ├── prekeybundle.py │ │ │ ├── prekeyrecord.py │ │ │ ├── prekeystore.py │ │ │ ├── sessionrecord.py │ │ │ ├── sessionstate.py │ │ │ ├── sessionstore.py │ │ │ ├── signedprekeyrecord.py │ │ │ ├── signedprekeystore.py │ │ │ └── storageprotos_pb2.py │ │ ├── statekeyexchangeexception.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── groups │ │ │ │ ├── __init__.py │ │ │ │ ├── inmemorysenderkeystore.py │ │ │ │ └── test_groupcipher.py │ │ │ ├── inmemoryaxolotlstore.py │ │ │ ├── inmemoryidentitykeystore.py │ │ │ ├── inmemoryprekeystore.py │ │ │ ├── inmemorysessionstore.py │ │ │ ├── inmemorysignedprekeystore.py │ │ │ ├── kdf │ │ │ │ ├── __init__.py │ │ │ │ └── test_hkdf.py │ │ │ ├── ratchet │ │ │ │ ├── __init__.py │ │ │ │ ├── test_chainkey.py │ │ │ │ ├── test_ratchetingsession.py │ │ │ │ └── test_rootkey.py │ │ │ ├── test_sessionbuilder.py │ │ │ ├── test_sessioncipher.py │ │ │ ├── test_sigs.py │ │ │ └── util │ │ │ │ ├── __init__.py │ │ │ │ └── test_byteutil.py │ │ ├── untrustedidentityexception.py │ │ └── util │ │ │ ├── __init__.py │ │ │ ├── byteutil.py │ │ │ ├── hexutil.py │ │ │ ├── keyhelper.py │ │ │ └── medium.py │ ├── setup.py │ └── tox.ini └── yowsup │ ├── .gitignore │ ├── setup.py │ ├── yowsup-cli │ └── yowsup │ ├── .gitignore │ ├── __init__.py │ ├── common │ ├── __init__.py │ ├── constants.py │ ├── http │ │ ├── __init__.py │ │ ├── httpproxy.py │ │ ├── test_warequest.py │ │ ├── warequest.py │ │ └── waresponseparser.py │ ├── mime.types │ ├── optionalmodules.py │ └── tools.py │ ├── demos │ ├── __init__.py │ ├── cli │ │ ├── __init__.py │ │ ├── cli.py │ │ ├── layer.py │ │ └── stack.py │ ├── contacts │ │ ├── __init__.py │ │ ├── layer.py │ │ └── stack.py │ ├── echoclient │ │ ├── __init__.py │ │ ├── layer.py │ │ └── stack.py │ └── sendclient │ │ ├── __init__.py │ │ ├── layer.py │ │ └── stack.py │ ├── env │ ├── __init__.py │ ├── env.py │ ├── env_android.py │ ├── env_s40.py │ └── test_env_s40.py │ ├── layers │ ├── __init__.py │ ├── auth │ │ ├── __init__.py │ │ ├── autherror.py │ │ ├── keystream.py │ │ ├── layer_authentication.py │ │ ├── layer_crypt.py │ │ ├── layer_interface_authentication.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── auth.py │ │ │ ├── challenge.py │ │ │ ├── failure.py │ │ │ ├── response.py │ │ │ ├── stream_error.py │ │ │ ├── stream_features.py │ │ │ ├── success.py │ │ │ ├── test_auth.py │ │ │ ├── test_challenge.py │ │ │ ├── test_failure.py │ │ │ ├── test_response.py │ │ │ ├── test_stream_features.py │ │ │ └── test_success.py │ │ ├── test_authenticator.py │ │ ├── test_crypt.py │ │ └── test_keystream.py │ ├── axolotl │ │ ├── __init__.py │ │ ├── layer_base.py │ │ ├── layer_control.py │ │ ├── layer_receive.py │ │ ├── layer_send.py │ │ ├── props.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── enc.py │ │ │ ├── iq_key_get.py │ │ │ ├── iq_keys_get_result.py │ │ │ ├── iq_keys_set.py │ │ │ ├── message_encrypted.py │ │ │ ├── notification_encrypt.py │ │ │ ├── receipt_incoming_retry.py │ │ │ ├── receipt_outgoing_retry.py │ │ │ ├── test_iq_keys_get_result.py │ │ │ ├── test_iq_keys_set.py │ │ │ └── test_notification_encrypt.py │ │ └── store │ │ │ ├── __init__.py │ │ │ └── sqlite │ │ │ ├── __init__.py │ │ │ ├── liteaxolotlstore.py │ │ │ ├── liteidentitykeystore.py │ │ │ ├── liteprekeystore.py │ │ │ ├── litesenderkeystore.py │ │ │ ├── litesessionstore.py │ │ │ └── litesignedprekeystore.py │ ├── coder │ │ ├── __init__.py │ │ ├── decoder.py │ │ ├── encoder.py │ │ ├── layer.py │ │ ├── test_decoder.py │ │ ├── test_encoder.py │ │ ├── test_tokendictionary.py │ │ └── tokendictionary.py │ ├── interface │ │ ├── __init__.py │ │ └── interface.py │ ├── logger │ │ ├── __init__.py │ │ └── layer.py │ ├── network │ │ ├── __init__.py │ │ ├── layer.py │ │ └── layer_interface.py │ ├── protocol_acks │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── ack.py │ │ │ ├── ack_incoming.py │ │ │ ├── ack_outgoing.py │ │ │ ├── test_ack_incoming.py │ │ │ └── test_ack_outgoing.py │ │ └── test_layer.py │ ├── protocol_calls │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── call.py │ │ │ └── test_call.py │ ├── protocol_chatstate │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── chatstate.py │ │ │ ├── chatstate_incoming.py │ │ │ ├── chatstate_outgoing.py │ │ │ ├── test_chatstate_incoming.py │ │ │ └── test_chatstate_outgoing.py │ │ └── test_layer.py │ ├── protocol_contacts │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_statuses_get.py │ │ │ ├── iq_statuses_result.py │ │ │ ├── iq_sync.py │ │ │ ├── iq_sync_get.py │ │ │ ├── iq_sync_result.py │ │ │ ├── notification_contact.py │ │ │ ├── notification_contact_add.py │ │ │ ├── notification_contact_remove.py │ │ │ ├── notification_contact_update.py │ │ │ ├── notificiation_contacts_sync.py │ │ │ ├── test_iq_sync_get.py │ │ │ ├── test_iq_sync_result.py │ │ │ ├── test_notification_contact_add.py │ │ │ ├── test_notification_contact_remove.py │ │ │ └── test_notification_contact_update.py │ │ └── test_layer.py │ ├── protocol_groups │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_groups.py │ │ │ ├── iq_groups_create.py │ │ │ ├── iq_groups_create_success.py │ │ │ ├── iq_groups_info.py │ │ │ ├── iq_groups_leave.py │ │ │ ├── iq_groups_leave_success.py │ │ │ ├── iq_groups_list.py │ │ │ ├── iq_groups_participants.py │ │ │ ├── iq_groups_participants_add.py │ │ │ ├── iq_groups_participants_add_failure.py │ │ │ ├── iq_groups_participants_add_success.py │ │ │ ├── iq_groups_participants_demote.py │ │ │ ├── iq_groups_participants_promote.py │ │ │ ├── iq_groups_participants_remove.py │ │ │ ├── iq_groups_participants_remove_success.py │ │ │ ├── iq_groups_subject.py │ │ │ ├── iq_result_groups_info.py │ │ │ ├── iq_result_groups_list.py │ │ │ ├── iq_result_participants_list.py │ │ │ ├── notification_groups.py │ │ │ ├── notification_groups_add.py │ │ │ ├── notification_groups_create.py │ │ │ ├── notification_groups_remove.py │ │ │ ├── notification_groups_subject.py │ │ │ ├── test_iq_groups.py │ │ │ ├── test_iq_groups_create.py │ │ │ ├── test_iq_groups_create_success.py │ │ │ ├── test_iq_groups_list.py │ │ │ ├── test_iq_result_groups.py │ │ │ └── test_iq_result_groups_list.py │ │ └── structs │ │ │ ├── __init__.py │ │ │ └── group.py │ ├── protocol_ib │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── account_ib.py │ │ │ ├── clean_iq.py │ │ │ ├── dirty_ib.py │ │ │ ├── ib.py │ │ │ ├── offline_ib.py │ │ │ ├── test_clean_iq.py │ │ │ ├── test_dirty_ib.py │ │ │ ├── test_ib.py │ │ │ └── test_offline_iq.py │ ├── protocol_iq │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq.py │ │ │ ├── iq_crypto.py │ │ │ ├── iq_error.py │ │ │ ├── iq_ping.py │ │ │ ├── iq_props.py │ │ │ ├── iq_push.py │ │ │ ├── iq_result.py │ │ │ ├── iq_result_pong.py │ │ │ ├── test_iq.py │ │ │ ├── test_iq_error.py │ │ │ └── test_iq_result.py │ ├── protocol_media │ │ ├── .~c9_invoke_Samean.py │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── mediadownloader.py │ │ ├── mediauploader.py │ │ ├── picture.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── builder_message_media_downloadable.py │ │ │ ├── iq_requestupload.py │ │ │ ├── iq_requestupload_result.py │ │ │ ├── message_media.py │ │ │ ├── message_media_downloadable.py │ │ │ ├── message_media_downloadable_audio.py │ │ │ ├── message_media_downloadable_document.py │ │ │ ├── message_media_downloadable_image.py │ │ │ ├── message_media_downloadable_video.py │ │ │ ├── message_media_location.py │ │ │ ├── message_media_vcard.py │ │ │ ├── test_iq_requestupload.py │ │ │ ├── test_iq_requestupload_result.py │ │ │ ├── test_message_media.py │ │ │ ├── test_message_media_downloadable.py │ │ │ ├── test_message_media_downloadable_audio.py │ │ │ ├── test_message_media_downloadable_image.py │ │ │ ├── test_message_media_downloadable_video.py │ │ │ ├── test_message_media_location.py │ │ │ └── test_message_media_vcard.py │ ├── protocol_messages │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── proto │ │ │ ├── __init__.py │ │ │ ├── wa.proto │ │ │ ├── wa_pb2.py │ │ │ └── wa_pb2.py.backup │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── message.py │ │ │ ├── message_text.py │ │ │ ├── message_text_broadcast.py │ │ │ ├── test_message.py │ │ │ ├── test_message_text.py │ │ │ └── test_message_text_broadcast.py │ ├── protocol_notifications │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── notification.py │ │ │ ├── notification_picture.py │ │ │ ├── notification_picture_delete.py │ │ │ ├── notification_picture_set.py │ │ │ ├── notification_status.py │ │ │ ├── test_notification.py │ │ │ ├── test_notification_picture.py │ │ │ ├── test_notification_picture_delete.py │ │ │ ├── test_notification_picture_set.py │ │ │ └── test_notification_status.py │ ├── protocol_presence │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_lastseen.py │ │ │ ├── iq_lastseen_result.py │ │ │ ├── presence.py │ │ │ ├── presence_available.py │ │ │ ├── presence_subscribe.py │ │ │ ├── presence_unavailable.py │ │ │ ├── presence_unsubscribe.py │ │ │ ├── test_presence.py │ │ │ ├── test_presence_available.py │ │ │ ├── test_presence_subscribe.py │ │ │ ├── test_presence_unavailable.py │ │ │ └── test_presence_unsubscribe.py │ ├── protocol_privacy │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ └── privacylist_iq.py │ ├── protocol_profiles │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_picture.py │ │ │ ├── iq_picture_delete.py │ │ │ ├── iq_picture_get.py │ │ │ ├── iq_picture_get_result.py │ │ │ ├── iq_picture_set.py │ │ │ ├── iq_pictures_list.py │ │ │ ├── iq_privacy_get.py │ │ │ ├── iq_privacy_result.py │ │ │ ├── iq_privacy_set.py │ │ │ ├── iq_status_set.py │ │ │ ├── iq_unregister.py │ │ │ ├── test_iq_privacy_get.py │ │ │ ├── test_iq_privacy_result.py │ │ │ ├── test_iq_privacy_set.py │ │ │ ├── test_iq_status_set.py │ │ │ └── test_iq_unregister.py │ ├── protocol_receipts │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── receipt.py │ │ │ ├── receipt_incoming.py │ │ │ ├── receipt_outgoing.py │ │ │ ├── test_receipt_incoming.py │ │ │ └── test_receipt_outgoing.py │ └── stanzaregulator │ │ ├── __init__.py │ │ └── layer.py │ ├── registration │ ├── __init__.py │ ├── coderequest.py │ ├── existsrequest.py │ └── regrequest.py │ ├── setup.py │ ├── signals.py │ ├── stacks │ ├── __init__.py │ └── yowstack.py │ ├── structs │ ├── __init__.py │ ├── protocolentity.py │ └── protocoltreenode.py │ ├── yowsup-cli │ └── yowsup │ ├── __init__.py │ ├── common │ ├── __init__.py │ ├── constants.py │ ├── http │ │ ├── __init__.py │ │ ├── httpproxy.py │ │ ├── test_warequest.py │ │ ├── warequest.py │ │ └── waresponseparser.py │ ├── mime.types │ ├── optionalmodules.py │ └── tools.py │ ├── demos │ ├── __init__.py │ ├── cli │ │ ├── __init__.py │ │ ├── cli.py │ │ ├── layer.py │ │ └── stack.py │ ├── contacts │ │ ├── __init__.py │ │ ├── layer.py │ │ └── stack.py │ ├── echoclient │ │ ├── __init__.py │ │ ├── layer.py │ │ └── stack.py │ └── sendclient │ │ ├── __init__.py │ │ ├── layer.py │ │ └── stack.py │ ├── env │ ├── __init__.py │ ├── env.py │ ├── env_android.py │ ├── env_s40.py │ └── test_env_s40.py │ ├── layers │ ├── __init__.py │ ├── auth │ │ ├── __init__.py │ │ ├── autherror.py │ │ ├── keystream.py │ │ ├── layer_authentication.py │ │ ├── layer_crypt.py │ │ ├── layer_interface_authentication.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── auth.py │ │ │ ├── challenge.py │ │ │ ├── failure.py │ │ │ ├── response.py │ │ │ ├── stream_error.py │ │ │ ├── stream_features.py │ │ │ ├── success.py │ │ │ ├── test_auth.py │ │ │ ├── test_challenge.py │ │ │ ├── test_failure.py │ │ │ ├── test_response.py │ │ │ ├── test_stream_features.py │ │ │ └── test_success.py │ │ ├── test_authenticator.py │ │ ├── test_crypt.py │ │ └── test_keystream.py │ ├── axolotl │ │ ├── __init__.py │ │ ├── layer_base.py │ │ ├── layer_control.py │ │ ├── layer_receive.py │ │ ├── layer_send.py │ │ ├── props.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── enc.py │ │ │ ├── iq_key_get.py │ │ │ ├── iq_keys_get_result.py │ │ │ ├── iq_keys_set.py │ │ │ ├── message_encrypted.py │ │ │ ├── notification_encrypt.py │ │ │ ├── receipt_incoming_retry.py │ │ │ ├── receipt_outgoing_retry.py │ │ │ ├── test_iq_keys_get_result.py │ │ │ ├── test_iq_keys_set.py │ │ │ └── test_notification_encrypt.py │ │ └── store │ │ │ ├── __init__.py │ │ │ └── sqlite │ │ │ ├── __init__.py │ │ │ ├── liteaxolotlstore.py │ │ │ ├── liteidentitykeystore.py │ │ │ ├── liteprekeystore.py │ │ │ ├── litesenderkeystore.py │ │ │ ├── litesessionstore.py │ │ │ └── litesignedprekeystore.py │ ├── coder │ │ ├── __init__.py │ │ ├── decoder.py │ │ ├── encoder.py │ │ ├── layer.py │ │ ├── test_decoder.py │ │ ├── test_encoder.py │ │ ├── test_tokendictionary.py │ │ └── tokendictionary.py │ ├── interface │ │ ├── __init__.py │ │ └── interface.py │ ├── logger │ │ ├── __init__.py │ │ └── layer.py │ ├── network │ │ ├── __init__.py │ │ ├── layer.py │ │ └── layer_interface.py │ ├── protocol_acks │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── ack.py │ │ │ ├── ack_incoming.py │ │ │ ├── ack_outgoing.py │ │ │ ├── test_ack_incoming.py │ │ │ └── test_ack_outgoing.py │ │ └── test_layer.py │ ├── protocol_calls │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── call.py │ │ │ └── test_call.py │ ├── protocol_chatstate │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── chatstate.py │ │ │ ├── chatstate_incoming.py │ │ │ ├── chatstate_outgoing.py │ │ │ ├── test_chatstate_incoming.py │ │ │ └── test_chatstate_outgoing.py │ │ └── test_layer.py │ ├── protocol_contacts │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_statuses_get.py │ │ │ ├── iq_statuses_result.py │ │ │ ├── iq_sync.py │ │ │ ├── iq_sync_get.py │ │ │ ├── iq_sync_result.py │ │ │ ├── notification_contact.py │ │ │ ├── notification_contact_add.py │ │ │ ├── notification_contact_remove.py │ │ │ ├── notification_contact_update.py │ │ │ ├── notificiation_contacts_sync.py │ │ │ ├── test_iq_sync_get.py │ │ │ ├── test_iq_sync_result.py │ │ │ ├── test_notification_contact_add.py │ │ │ ├── test_notification_contact_remove.py │ │ │ └── test_notification_contact_update.py │ │ └── test_layer.py │ ├── protocol_groups │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_groups.py │ │ │ ├── iq_groups_create.py │ │ │ ├── iq_groups_create_success.py │ │ │ ├── iq_groups_info.py │ │ │ ├── iq_groups_leave.py │ │ │ ├── iq_groups_leave_success.py │ │ │ ├── iq_groups_list.py │ │ │ ├── iq_groups_participants.py │ │ │ ├── iq_groups_participants_add.py │ │ │ ├── iq_groups_participants_add_failure.py │ │ │ ├── iq_groups_participants_add_success.py │ │ │ ├── iq_groups_participants_demote.py │ │ │ ├── iq_groups_participants_promote.py │ │ │ ├── iq_groups_participants_remove.py │ │ │ ├── iq_groups_participants_remove_success.py │ │ │ ├── iq_groups_subject.py │ │ │ ├── iq_result_groups_info.py │ │ │ ├── iq_result_groups_list.py │ │ │ ├── iq_result_participants_list.py │ │ │ ├── notification_groups.py │ │ │ ├── notification_groups_add.py │ │ │ ├── notification_groups_create.py │ │ │ ├── notification_groups_remove.py │ │ │ ├── notification_groups_subject.py │ │ │ ├── test_iq_groups.py │ │ │ ├── test_iq_groups_create.py │ │ │ ├── test_iq_groups_create_success.py │ │ │ ├── test_iq_groups_list.py │ │ │ ├── test_iq_result_groups.py │ │ │ └── test_iq_result_groups_list.py │ │ └── structs │ │ │ ├── __init__.py │ │ │ └── group.py │ ├── protocol_ib │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── account_ib.py │ │ │ ├── clean_iq.py │ │ │ ├── dirty_ib.py │ │ │ ├── ib.py │ │ │ ├── offline_ib.py │ │ │ ├── test_clean_iq.py │ │ │ ├── test_dirty_ib.py │ │ │ ├── test_ib.py │ │ │ └── test_offline_iq.py │ ├── protocol_iq │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq.py │ │ │ ├── iq_crypto.py │ │ │ ├── iq_error.py │ │ │ ├── iq_ping.py │ │ │ ├── iq_props.py │ │ │ ├── iq_push.py │ │ │ ├── iq_result.py │ │ │ ├── iq_result_pong.py │ │ │ ├── test_iq.py │ │ │ ├── test_iq_error.py │ │ │ └── test_iq_result.py │ ├── protocol_media │ │ ├── .~c9_invoke_Samean.py │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── mediadownloader.py │ │ ├── mediauploader.py │ │ ├── picture.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── builder_message_media_downloadable.py │ │ │ ├── iq_requestupload.py │ │ │ ├── iq_requestupload_result.py │ │ │ ├── message_media.py │ │ │ ├── message_media_downloadable.py │ │ │ ├── message_media_downloadable_audio.py │ │ │ ├── message_media_downloadable_document.py │ │ │ ├── message_media_downloadable_image.py │ │ │ ├── message_media_downloadable_video.py │ │ │ ├── message_media_location.py │ │ │ ├── message_media_vcard.py │ │ │ ├── test_iq_requestupload.py │ │ │ ├── test_iq_requestupload_result.py │ │ │ ├── test_message_media.py │ │ │ ├── test_message_media_downloadable.py │ │ │ ├── test_message_media_downloadable_audio.py │ │ │ ├── test_message_media_downloadable_image.py │ │ │ ├── test_message_media_downloadable_video.py │ │ │ ├── test_message_media_location.py │ │ │ └── test_message_media_vcard.py │ ├── protocol_messages │ │ ├── __init__.py │ │ ├── layer.py │ │ ├── proto │ │ │ ├── __init__.py │ │ │ ├── wa.proto │ │ │ ├── wa_pb2.py │ │ │ └── wa_pb2.py.backup │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── message.py │ │ │ ├── message_text.py │ │ │ ├── message_text_broadcast.py │ │ │ ├── test_message.py │ │ │ ├── test_message_text.py │ │ │ └── test_message_text_broadcast.py │ ├── protocol_notifications │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── notification.py │ │ │ ├── notification_picture.py │ │ │ ├── notification_picture_delete.py │ │ │ ├── notification_picture_set.py │ │ │ ├── notification_status.py │ │ │ ├── test_notification.py │ │ │ ├── test_notification_picture.py │ │ │ ├── test_notification_picture_delete.py │ │ │ ├── test_notification_picture_set.py │ │ │ └── test_notification_status.py │ ├── protocol_presence │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_lastseen.py │ │ │ ├── iq_lastseen_result.py │ │ │ ├── presence.py │ │ │ ├── presence_available.py │ │ │ ├── presence_subscribe.py │ │ │ ├── presence_unavailable.py │ │ │ ├── presence_unsubscribe.py │ │ │ ├── test_presence.py │ │ │ ├── test_presence_available.py │ │ │ ├── test_presence_subscribe.py │ │ │ ├── test_presence_unavailable.py │ │ │ └── test_presence_unsubscribe.py │ ├── protocol_privacy │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ └── privacylist_iq.py │ ├── protocol_profiles │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── iq_picture.py │ │ │ ├── iq_picture_delete.py │ │ │ ├── iq_picture_get.py │ │ │ ├── iq_picture_get_result.py │ │ │ ├── iq_picture_set.py │ │ │ ├── iq_pictures_list.py │ │ │ ├── iq_privacy_get.py │ │ │ ├── iq_privacy_result.py │ │ │ ├── iq_privacy_set.py │ │ │ ├── iq_status_set.py │ │ │ ├── iq_unregister.py │ │ │ ├── test_iq_privacy_get.py │ │ │ ├── test_iq_privacy_result.py │ │ │ ├── test_iq_privacy_set.py │ │ │ ├── test_iq_status_set.py │ │ │ └── test_iq_unregister.py │ ├── protocol_receipts │ │ ├── __init__.py │ │ ├── layer.py │ │ └── protocolentities │ │ │ ├── __init__.py │ │ │ ├── receipt.py │ │ │ ├── receipt_incoming.py │ │ │ ├── receipt_outgoing.py │ │ │ ├── test_receipt_incoming.py │ │ │ └── test_receipt_outgoing.py │ └── stanzaregulator │ │ ├── __init__.py │ │ └── layer.py │ ├── registration │ ├── __init__.py │ ├── coderequest.py │ ├── existsrequest.py │ └── regrequest.py │ ├── signals.py │ ├── stacks │ ├── __init__.py │ └── yowstack.py │ └── structs │ ├── __init__.py │ ├── protocolentity.py │ └── protocoltreenode.py ├── modules ├── __init__.py ├── hihelp │ ├── __init__.py │ └── hihelp.py ├── pokedex │ ├── __init__.py │ ├── pykemon │ │ ├── __init__.py │ │ ├── api.py │ │ ├── exceptions.py │ │ ├── models.py │ │ ├── request.py │ │ └── resources.py │ └── requirements.txt ├── poker │ ├── __init__.py │ ├── constants.py │ ├── db │ │ ├── poker.db │ │ └── schema │ │ │ ├── data.sql │ │ │ └── schema.sql │ ├── deuces │ │ ├── __init__.py │ │ ├── card.py │ │ ├── deck.py │ │ ├── evaluator.py │ │ └── lookup.py │ ├── player.py │ ├── poker.py │ └── requirements.txt ├── poll │ ├── __init__.py │ ├── poll.py │ └── voter.py └── poll2 │ ├── __init__.py │ └── poll2.py ├── run.py ├── setup.sh └── start.sh /.gitignore: -------------------------------------------------------------------------------- 1 | commit.sh 2 | add.sh 3 | 4 | .idea/ 5 | .9 6 | __pycache__ 7 | 8 | app/build/ 9 | app/dist/ 10 | app/mac_bot.egg-info/ 11 | app/assets/* 12 | config.py 13 | 14 | cli.txt 15 | tags.txt 16 | 17 | # modules 18 | modules/broadcast/* 19 | modules/wolfram/* 20 | modules/yesno/* 21 | modules/elo/* -------------------------------------------------------------------------------- /app/__init__.py: -------------------------------------------------------------------------------- 1 | import modules -------------------------------------------------------------------------------- /app/mac/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/app/mac/__init__.py -------------------------------------------------------------------------------- /app/mac/signals.py: -------------------------------------------------------------------------------- 1 | from blinker import signal 2 | 3 | ''' 4 | Life cycle 5 | ''' 6 | 7 | initialized = signal('mac_initialized') 8 | 9 | 10 | ''' 11 | Messages 12 | ''' 13 | 14 | message_received = signal('message_received') # Plain message 15 | command_received = signal('command_received') # ! 16 | 17 | 18 | ''' 19 | Notifications 20 | ''' 21 | receipt = signal('message_receipted') 22 | ack = signal('message_ack') -------------------------------------------------------------------------------- /app/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/app/models/__init__.py -------------------------------------------------------------------------------- /app/models/receipt.py: -------------------------------------------------------------------------------- 1 | from app.utils import helper 2 | 3 | class Receipt(object): 4 | def __init__(self, message_entity): 5 | self.who = message_entity.getParticipant() 6 | self.conversation = message_entity.getFrom() 7 | self.timestamp = message_entity.timestamp 8 | self.message_entity = message_entity 9 | self.blue = message_entity.type == "read" 10 | 11 | """ 12 | Logs message node 13 | """ 14 | def log(self, deep=False): 15 | helper.log(self) 16 | if deep: 17 | helper.log(self.message_entity) -------------------------------------------------------------------------------- /app/receiver/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/app/receiver/__init__.py -------------------------------------------------------------------------------- /app/requirements.txt: -------------------------------------------------------------------------------- 1 | blinker -------------------------------------------------------------------------------- /app/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/app/utils/__init__.py -------------------------------------------------------------------------------- /clean.sh: -------------------------------------------------------------------------------- 1 | find / -name 'axolotl.db' -exec rm -rf {} \; -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | credentials = dict( 2 | phone = 'YOUR_PHONE', 3 | password = 'YOUR_PASWWORD', 4 | ) 5 | 6 | # Your contacts numbers (Framework will sync) 7 | # Add them here 8 | contacts = { 9 | "CONTACT_PHONE": "CONTACT_NAME", 10 | "ANOTHER_CONTACT_PHONE": "ANOTHER_CONTACT_NAME", 11 | } -------------------------------------------------------------------------------- /libs/python-axolotl/.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | python: '3.5' 3 | # command to install dependencies 4 | 5 | env: 6 | global: 7 | - LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so 8 | - SEGFAULT_SIGNALS=all 9 | matrix: 10 | - TOXENV=py26 11 | - TOXENV=py27 12 | - TOXENV=py33 13 | - TOXENV=py34 14 | - TOXENV=py35 15 | before_install: 16 | - python --version 17 | - uname -a 18 | - lsb_release -a 19 | install: 20 | - pip install tox 21 | - virtualenv --version 22 | - easy_install --version 23 | - pip --version 24 | - tox --version 25 | # command to run tests 26 | script: 27 | - tox -v 28 | after_failure: 29 | - more .tox/log/* | cat 30 | - more .tox/*/log/* | cat 31 | before_cache: 32 | - rm -rf $HOME/.cache/pip/log 33 | cache: 34 | directories: 35 | - $HOME/.cache/pip 36 | branches: 37 | only: 38 | - master 39 | - develop 40 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __version__ = '0.1.39' 4 | __author__ = 'Tarek Galal' 5 | __email__ = 'tare2.galal@gmail.com' 6 | __license__ = 'GPLv3' 7 | __status__ = 'Production' 8 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/axolotladdress.py: -------------------------------------------------------------------------------- 1 | class AxolotlAddress(object): 2 | def __init__(self, name, deviceId): 3 | self.name = name 4 | self.deviceId = deviceId 5 | 6 | def getName(self): 7 | return self.name 8 | 9 | def getDeviceId(self): 10 | return self.deviceId 11 | 12 | def __str__(self): 13 | return "%s;%s" % (self.name, self.deviceId) 14 | 15 | def __eq__(self, other): 16 | if other is None: 17 | return False 18 | 19 | if other.__class__ != AxolotlAddress: 20 | return False 21 | 22 | return self.name == other.getName() and self.deviceId == other.getDeviceId() 23 | 24 | def __hash__(self): 25 | return hash(self.name) ^ self.deviceId 26 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/duplicatemessagexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class DuplicateMessageException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/ecc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/python-axolotl/axolotl/ecc/__init__.py -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/ecc/ec.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class ECPublicKey(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | KEY_SIZE = 33 10 | 11 | @abc.abstractmethod 12 | def serialize(self): 13 | pass 14 | 15 | @abc.abstractmethod 16 | def getType(self): 17 | pass 18 | 19 | 20 | class ECPrivateKey(object): 21 | __metaclass__ = abc.ABCMeta 22 | 23 | @abc.abstractmethod 24 | def serialize(self): 25 | pass 26 | 27 | @abc.abstractmethod 28 | def getType(self): 29 | pass 30 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/ecc/eckeypair.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class ECKeyPair(): 5 | def __init__(self, publicKey, privateKey): 6 | """ 7 | :type publicKey: ECPublicKey 8 | :type privateKey: ECPrivateKey 9 | """ 10 | self.publicKey = publicKey 11 | self.privateKey = privateKey 12 | 13 | def getPrivateKey(self): 14 | return self.privateKey 15 | 16 | def getPublicKey(self): 17 | return self.publicKey 18 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/groups/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/groups/ratchet/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/groups/ratchet/sendermessagekey.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from ...kdf.hkdfv3 import HKDFv3 4 | from ...util.byteutil import ByteUtil 5 | 6 | 7 | class SenderMessageKey: 8 | def __init__(self, iteration, seed): 9 | """ 10 | :type iteration: int 11 | :type seed: bytearray 12 | """ 13 | derivative = HKDFv3().deriveSecrets(seed, "WhisperGroup".encode(), 48) 14 | parts = ByteUtil.split(derivative, 16, 32) 15 | 16 | self.iteration = iteration 17 | self.seed = seed 18 | self.iv = parts[0] 19 | self.cipherKey = parts[1] 20 | 21 | def getIteration(self): 22 | return self.iteration 23 | 24 | def getIv(self): 25 | return self.iv 26 | 27 | def getCipherKey(self): 28 | return self.cipherKey 29 | 30 | def getSeed(self): 31 | return self.seed 32 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/groups/senderkeyname.py: -------------------------------------------------------------------------------- 1 | class SenderKeyName(object): 2 | def __init__(self, groupId, senderAxolotlAddress): 3 | self.groupId = groupId 4 | self.sender = senderAxolotlAddress 5 | 6 | def getGroupId(self): 7 | return self.groupId 8 | 9 | def getSender(self): 10 | return self.sender 11 | 12 | def serialize(self): 13 | return "%s::%s::%s" % (self.groupId, self.sender.getName(), self.sender.getDeviceId()) 14 | 15 | def __eq__(self, other): 16 | if other is None: return False 17 | if other.__class__ != SenderKeyName: return False 18 | 19 | return self.groupId == other.getGroupId() and self.sender == other.getSender() 20 | 21 | def __hash__(self): 22 | return hash(self.groupId) ^ hash(self.sender) 23 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/groups/state/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/groups/state/senderkeystore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class SenderKeyStore(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | @abc.abstractmethod 10 | def storeSenderKey(self, senderKeyId, senderKeyRecord): 11 | """ 12 | :type senderKeyId: str 13 | :type senderKeyRecord: SenderKeyRecord 14 | """ 15 | 16 | @abc.abstractmethod 17 | def loadSenderKey(self, senderKeyId): 18 | """ 19 | :type senderKeyId: str 20 | """ 21 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/identitykey.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from .ecc.curve import Curve 4 | 5 | 6 | class IdentityKey: 7 | def __init__(self, ecPubKeyOrBytes, offset=None): 8 | if offset is None: 9 | self.publicKey = ecPubKeyOrBytes 10 | else: 11 | self.publicKey = Curve.decodePoint(bytearray(ecPubKeyOrBytes), offset) 12 | 13 | def getPublicKey(self): 14 | return self.publicKey 15 | 16 | def serialize(self): 17 | return self.publicKey.serialize() 18 | 19 | def get_fingerprint(self): 20 | raise Exception("IMPL ME") 21 | 22 | def __eq__(self, other): 23 | return self.publicKey == other.getPublicKey() 24 | 25 | def hashCode(self): 26 | raise Exception("IMPL ME") 27 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/invalidkeyexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class InvalidKeyException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/invalidkeyidexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class InvalidKeyIdException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/invalidmessageexception.py: -------------------------------------------------------------------------------- 1 | # -*- cofing: utf-8 -*- 2 | 3 | 4 | class InvalidMessageException(Exception): 5 | def __init__(self, message, exceptions=None): 6 | if exceptions: 7 | message += str(exceptions[0]) 8 | super(InvalidMessageException, self).__init__(message) 9 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/invalidversionexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class InvalidVersionException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/kdf/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __author__ = 'tarek' 4 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/kdf/derivedmessagesecrets.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from ..util.byteutil import ByteUtil 4 | 5 | 6 | class DerivedMessageSecrets: 7 | SIZE = 80 8 | CIPHER_KEY_LENGTH = 32 9 | MAC_KEY_LENGTH = 32 10 | IV_LENGTH = 16 11 | 12 | def __init__(self, okm): 13 | keys = ByteUtil.split(okm, 14 | self.__class__.CIPHER_KEY_LENGTH, 15 | self.__class__.MAC_KEY_LENGTH, 16 | self.__class__.IV_LENGTH) 17 | self.cipherKey = keys[0] # AES 18 | self.macKey = keys[1] # sha256 19 | self.iv = keys[2] 20 | 21 | def getCipherKey(self): 22 | return self.cipherKey 23 | 24 | def getMacKey(self): 25 | return self.macKey 26 | 27 | def getIv(self): 28 | return self.iv 29 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/kdf/derivedrootsecrets.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from ..util.byteutil import ByteUtil 4 | 5 | 6 | class DerivedRootSecrets: 7 | SIZE = 64 8 | 9 | def __init__(self, okm): 10 | keys = ByteUtil.split(okm, 32, 32) 11 | self.rootKey = keys[0] 12 | self.chainKey = keys[1] 13 | 14 | def getRootKey(self): 15 | return self.rootKey 16 | 17 | def getChainKey(self): 18 | return self.chainKey 19 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/kdf/hkdfv2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from .hkdf import HKDF 4 | 5 | 6 | class HKDFv2(HKDF): 7 | def getIterationStartOffset(self): 8 | return 0 9 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/kdf/hkdfv3.py: -------------------------------------------------------------------------------- 1 | # -*- codsing: utf-8 -*- 2 | 3 | from .hkdf import HKDF 4 | 5 | 6 | class HKDFv3(HKDF): 7 | def getIterationStartOffset(self): 8 | return 1 9 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/kdf/messagekeys.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class MessageKeys: 5 | def __init__(self, cipherKey, macKey, iv, counter): 6 | self.cipherKey = cipherKey 7 | self.macKey = macKey 8 | self.iv = iv 9 | self.counter = counter 10 | 11 | def getCipherKey(self): 12 | return self.cipherKey 13 | 14 | def getMacKey(self): 15 | return self.macKey 16 | 17 | def getIv(self): 18 | return self.iv 19 | 20 | def getCounter(self): 21 | return self.counter 22 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/legacymessageexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class LegacyMessageException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/nosessionexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class NoSessionException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/protocol/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __author__ = 'tarek' 4 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/protocol/ciphertextmessage.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class CiphertextMessage(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | UNSUPPORTED_VERSION = 1 10 | CURRENT_VERSION = 3 11 | 12 | WHISPER_TYPE = 2 13 | PREKEY_TYPE = 3 14 | SENDERKEY_TYPE = 4 15 | SENDERKEY_DISTRIBUTION_TYPE = 5 16 | 17 | # This should be the worst case (worse than V2). So not always accurate, but good enough for padding. 18 | ENCRYPTED_MESSAGE_OVERHEAD = 53 19 | 20 | @abc.abstractmethod 21 | def serialize(self): 22 | return 23 | 24 | @abc.abstractmethod 25 | def getType(self): 26 | return 27 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/ratchet/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/axolotlstore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | from .identitykeystore import IdentityKeyStore 6 | from .prekeystore import PreKeyStore 7 | from .sessionstore import SessionStore 8 | from .signedprekeystore import SignedPreKeyStore 9 | 10 | 11 | class AxolotlStore(IdentityKeyStore, PreKeyStore, SignedPreKeyStore, SessionStore): 12 | __metaclass__ = abc.ABCMeta 13 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/identitykeystore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class IdentityKeyStore(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | @abc.abstractmethod 10 | def getIdentityKeyPair(self): 11 | pass 12 | 13 | @abc.abstractmethod 14 | def getLocalRegistrationId(self): 15 | pass 16 | 17 | @abc.abstractmethod 18 | def saveIdentity(self, recepientId, identityKey): 19 | pass 20 | 21 | @abc.abstractmethod 22 | def isTrustedIdentity(self, recepientId, identityKey): 23 | pass 24 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/prekeyrecord.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from .storageprotos_pb2 import PreKeyRecordStructure 4 | from ..ecc.curve import Curve 5 | from ..ecc.eckeypair import ECKeyPair 6 | 7 | 8 | class PreKeyRecord: 9 | def __init__(self, _id=None, ecKeyPair=None, serialized=None): 10 | self.structure = PreKeyRecordStructure() 11 | if serialized: 12 | self.structure.ParseFromString(serialized) 13 | else: 14 | self.structure.id = _id 15 | self.structure.publicKey = ecKeyPair.getPublicKey().serialize() 16 | self.structure.privateKey = ecKeyPair.getPrivateKey().serialize() 17 | 18 | def getId(self): 19 | return self.structure.id 20 | 21 | def getKeyPair(self): 22 | publicKey = Curve.decodePoint(bytearray(self.structure.publicKey), 0) 23 | privateKey = Curve.decodePrivatePoint(bytearray(self.structure.privateKey)) 24 | return ECKeyPair(publicKey, privateKey) 25 | 26 | def serialize(self): 27 | return self.structure.SerializeToString() 28 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/prekeystore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class PreKeyStore(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | @abc.abstractmethod 10 | def loadPreKey(self, preKeyId): 11 | pass 12 | 13 | @abc.abstractmethod 14 | def storePreKey(self, preKeyId, preKeyRecord): 15 | pass 16 | 17 | @abc.abstractmethod 18 | def containsPreKey(self, preKeyId): 19 | pass 20 | 21 | @abc.abstractmethod 22 | def removePreKey(self, preKeyId): 23 | pass 24 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/sessionstore.py: -------------------------------------------------------------------------------- 1 | # -*- cosing: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class SessionStore(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | @abc.abstractmethod 10 | def loadSession(self, recepientId, deviceId): 11 | pass 12 | 13 | @abc.abstractmethod 14 | def getSubDeviceSessions(self, recepientId): 15 | pass 16 | 17 | @abc.abstractmethod 18 | def storeSession(self, recepientId, deviceId, sessionRecord): 19 | pass 20 | 21 | @abc.abstractmethod 22 | def containsSession(self, recepientId, deviceId): 23 | pass 24 | 25 | @abc.abstractmethod 26 | def deleteSession(self, recepientId, deviceId): 27 | pass 28 | 29 | @abc.abstractmethod 30 | def deleteAllSessions(self, recepientId): 31 | pass 32 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/state/signedprekeystore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import abc 4 | 5 | 6 | class SignedPreKeyStore(object): 7 | __metaclass__ = abc.ABCMeta 8 | 9 | @abc.abstractmethod 10 | def loadSignedPreKey(self, signedPreKeyId): 11 | pass 12 | 13 | @abc.abstractmethod 14 | def loadSignedPreKeys(self): 15 | pass 16 | 17 | @abc.abstractmethod 18 | def storeSignedPreKey(self, signedPreKeyId, signedPreKeyRecord): 19 | pass 20 | 21 | @abc.abstractmethod 22 | def containsSignedPreKey(self, signedPreKeyId): 23 | pass 24 | 25 | @abc.abstractmethod 26 | def removeSignedPreKey(self, signedPreKeyId): 27 | pass 28 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/statekeyexchangeexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class StaleKeyExchangeException(Exception): 5 | pass 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/groups/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/groups/inmemorysenderkeystore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from ...groups.state.senderkeystore import SenderKeyStore 4 | from ...groups.state.senderkeyrecord import SenderKeyRecord 5 | 6 | 7 | class InMemorySenderKeyStore(SenderKeyStore): 8 | def __init__(self): 9 | self.store = {} 10 | 11 | def storeSenderKey(self, senderKeyName, senderKeyRecord): 12 | self.store[senderKeyName] = senderKeyRecord 13 | 14 | def loadSenderKey(self, senderKeyName): 15 | if senderKeyName in self.store: 16 | return SenderKeyRecord(serialized=self.store[senderKeyName].serialize()) 17 | 18 | return SenderKeyRecord() 19 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/inmemoryprekeystore.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from ..state.prekeystore import PreKeyStore 4 | from ..state.prekeyrecord import PreKeyRecord 5 | from ..invalidkeyidexception import InvalidKeyIdException 6 | 7 | 8 | class InMemoryPreKeyStore(PreKeyStore): 9 | def __init__(self): 10 | self.store = {} 11 | 12 | def loadPreKey(self, preKeyId): 13 | if preKeyId not in self.store: 14 | raise InvalidKeyIdException("No such prekeyRecord!") 15 | 16 | return PreKeyRecord(serialized=self.store[preKeyId]) 17 | 18 | def storePreKey(self, preKeyId, preKeyRecord): 19 | self.store[preKeyId] = preKeyRecord.serialize() 20 | 21 | def containsPreKey(self, preKeyId): 22 | return preKeyId in self.store 23 | 24 | def removePreKey(self, preKeyId): 25 | if preKeyId in self.store: 26 | del self.store[preKeyId] 27 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/kdf/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- cosing: utf-8 -*- 2 | 3 | __author__ = 'tarek' 4 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/ratchet/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __author__ = 'tarek' 4 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/util/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | __author__ = 'tarek' 4 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/tests/util/test_byteutil.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import unittest 4 | 5 | from ...util.byteutil import ByteUtil 6 | # from ...util.hexutil import HexUtil 7 | 8 | 9 | class ByteUtilTest(unittest.TestCase): 10 | def test_split(self): 11 | # okm = HexUtil.decodeHex('02a9aa6c7dbd64f9d3aa92f92a277bf54609dadf0b00' 12 | # '828acfc61e3c724b84a7bfbe5efb603030526742e3ee' 13 | # '89c7024e884e440f1ff376bb2317b2d64deb7c8322f4' 14 | # 'c5015d9d895849411ba1d793a827') 15 | 16 | data = [i for i in range(0, 80)] 17 | a_data = [i for i in range(0, 32)] 18 | b_data = [i for i in range(32, 64)] 19 | c_data = [i for i in range(64, 80)] 20 | 21 | a, b, c = ByteUtil.split(data, 32, 32, 16) 22 | 23 | self.assertEqual(a, a_data) 24 | self.assertEqual(b, b_data) 25 | self.assertEqual(c, c_data) 26 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/untrustedidentityexception.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | class UntrustedIdentityException(Exception): 4 | def __init__(self, name, identityKey): 5 | self.name = name 6 | self.identityKey = identityKey 7 | 8 | def getName(self): 9 | return self.name 10 | 11 | def getIdentityKey(self): 12 | return self.identityKey 13 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/util/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/util/hexutil.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import codecs 4 | import sys 5 | 6 | decode_hex = codecs.getdecoder("hex_codec") 7 | 8 | 9 | class HexUtil: 10 | @staticmethod 11 | def decodeHex(hexString): 12 | hexString = hexString.encode() if type(hexString) is str else hexString 13 | result = decode_hex(hexString)[0] 14 | if sys.version_info >= (3, 0): 15 | result = result.decode('latin-1') 16 | return result 17 | -------------------------------------------------------------------------------- /libs/python-axolotl/axolotl/util/medium.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | class Medium: 5 | MAX_VALUE = 0xFFFFFF 6 | -------------------------------------------------------------------------------- /libs/python-axolotl/tox.ini: -------------------------------------------------------------------------------- 1 | # Tox (http://tox.testrun.org/) is a tool for running tests 2 | # in multiple virtualenvs. This configuration file will run the 3 | # test suite on all supported python versions. To use it, "pip install tox" 4 | # and then run "tox" from this directory. 5 | 6 | [tox] 7 | skip_missing_interpreters = true 8 | envlist = py26, py27, py32, py33, py34, py35, py36 9 | 10 | [testenv] 11 | commands = nosetests axolotl.tests 12 | deps = 13 | nose 14 | protobuf==3.0.0b2 15 | pycrypto 16 | python-axolotl-curve25519 17 | -------------------------------------------------------------------------------- /libs/yowsup/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.class 3 | todo 4 | *.egg-info 5 | tp 6 | tests 7 | dist 8 | build 9 | .idea 10 | .tox -------------------------------------------------------------------------------- /libs/yowsup/yowsup/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.class 3 | todo 4 | *.egg-info 5 | tp 6 | tests 7 | dist 8 | build 9 | .idea 10 | .tox -------------------------------------------------------------------------------- /libs/yowsup/yowsup/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "2.5.2" 2 | __author__ = "Tarek Galal" 3 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/common/__init__.py: -------------------------------------------------------------------------------- 1 | from .constants import YowConstants -------------------------------------------------------------------------------- /libs/yowsup/yowsup/common/constants.py: -------------------------------------------------------------------------------- 1 | class YowConstants: 2 | DOMAIN = "s.whatsapp.net" 3 | ENDPOINTS = ( 4 | ("e1.whatsapp.net", 443), 5 | ("e2.whatsapp.net", 443), 6 | ("e3.whatsapp.net", 443), 7 | ("e4.whatsapp.net", 443), 8 | ("e5.whatsapp.net", 443), 9 | ("e6.whatsapp.net", 443), 10 | ("e7.whatsapp.net", 443), 11 | ("e8.whatsapp.net", 443), 12 | ("e9.whatsapp.net", 443), 13 | ("e10.whatsapp.net", 443), 14 | ("e11.whatsapp.net", 443), 15 | ("e12.whatsapp.net", 443), 16 | ("e13.whatsapp.net", 443), 17 | ("e14.whatsapp.net", 443), 18 | ("e15.whatsapp.net", 443), 19 | ("e16.whatsapp.net", 443), 20 | ) 21 | 22 | WHATSAPP_SERVER = "s.whatsapp.net" 23 | WHATSAPP_GROUP_SERVER = "g.us" 24 | 25 | PATH_STORAGE = "~/.yowsup" 26 | 27 | PREVIEW_WIDTH = 64 28 | PREVIEW_HEIGHT = 64 29 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/common/http/__init__.py: -------------------------------------------------------------------------------- 1 | from .httpproxy import HttpProxy 2 | from .warequest import WARequest 3 | from .waresponseparser import JSONResponseParser -------------------------------------------------------------------------------- /libs/yowsup/yowsup/common/http/test_warequest.py: -------------------------------------------------------------------------------- 1 | from yowsup.common.http.warequest import WARequest -------------------------------------------------------------------------------- /libs/yowsup/yowsup/common/mime.types: -------------------------------------------------------------------------------- 1 | audio/3gpp 3gpp 2 | audio/aac aac 3 | audio/aiff aif 4 | audio/amr amr 5 | audio/mp4 m4a 6 | audio/mpeg mp3 mp2 mpga mpega 7 | audio/ogg oga ogg opus spx 8 | audio/qcelp qcp 9 | audio/wav wav 10 | audio/webm webm 11 | audio/x-caf caf 12 | audio/x-ms-wma wma 13 | audio/ogg ogg 14 | image/gif gif 15 | image/jpeg jpe jpg jpeg 16 | image/png png 17 | video/3gpp 3gp 18 | video/avi avi 19 | video/mp4 mp4 20 | video/mpeg m1v mpeg mpa mpg mpe 21 | video/quicktime mov qt 22 | video/x-flv flv 23 | video/x-ms-asf asf asx 24 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/demos/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/yowsup/yowsup/demos/__init__.py -------------------------------------------------------------------------------- /libs/yowsup/yowsup/demos/cli/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupCliStack 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/demos/contacts/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupSyncStack 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/demos/echoclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupEchoStack -------------------------------------------------------------------------------- /libs/yowsup/yowsup/demos/echoclient/stack.py: -------------------------------------------------------------------------------- 1 | from yowsup.stacks import YowStackBuilder 2 | from .layer import EchoLayer 3 | from yowsup.layers.auth import AuthError 4 | from yowsup.layers import YowLayerEvent 5 | from yowsup.layers.network import YowNetworkLayer 6 | 7 | class YowsupEchoStack(object): 8 | def __init__(self, credentials, encryptionEnabled = True): 9 | stackBuilder = YowStackBuilder() 10 | 11 | self.stack = stackBuilder\ 12 | .pushDefaultLayers(encryptionEnabled)\ 13 | .push(EchoLayer)\ 14 | .build() 15 | 16 | self.stack.setCredentials(credentials) 17 | 18 | def start(self): 19 | self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) 20 | try: 21 | self.stack.loop() 22 | except AuthError as e: 23 | print("Authentication Error: %s" % e.message) 24 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/demos/sendclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupSendStack -------------------------------------------------------------------------------- /libs/yowsup/yowsup/env/__init__.py: -------------------------------------------------------------------------------- 1 | from .env import YowsupEnv 2 | from .env_android import AndroidYowsupEnv 3 | from .env_s40 import S40YowsupEnv 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/env/test_env_s40.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from yowsup.env import S40YowsupEnv 3 | class S40YowsupEnvTest(unittest.TestCase): 4 | def test_tokengen(self): 5 | phone = "1234567" 6 | S40YowsupEnv._TOKEN_STRING = "PdA2DJyKoUrwLw1Bg6EIhzh502dF9noR9uFCllGk1425519315543{phone}" 7 | env = S40YowsupEnv() 8 | token = env.getToken(phone) 9 | self.assertEqual(token, 'e84e1f1477704159efd46f6f0781dbde') 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer_crypt import YowCryptLayer 2 | from .layer_authentication import YowAuthenticationProtocolLayer 3 | from .autherror import AuthError 4 | #import protocolentities 5 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/autherror.py: -------------------------------------------------------------------------------- 1 | class AuthError(Exception): 2 | pass -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/layer_interface_authentication.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayerInterface 2 | 3 | class YowAuthenticationProtocolLayerInterface(YowLayerInterface): 4 | def setCredentials(self, phone, password): 5 | self._layer.setCredentials((phone, password)) 6 | 7 | def getUsername(self, full = False): 8 | return self._layer.getUsername(full) 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .auth import AuthProtocolEntity 2 | from .challenge import ChallengeProtocolEntity 3 | from .response import ResponseProtocolEntity 4 | from .stream_features import StreamFeaturesProtocolEntity 5 | from .success import SuccessProtocolEntity 6 | from .failure import FailureProtocolEntity 7 | from .stream_error import StreamErrorProtocolEntity 8 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/auth.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class AuthProtocolEntity(ProtocolEntity): 3 | def __init__(self, user, mechanism = "WAUTH-2", passive = False, nonce = None): 4 | super(AuthProtocolEntity, self).__init__("auth") 5 | self.user = user 6 | self.mechanism = mechanism 7 | self.passive = passive 8 | self.nonce = nonce 9 | 10 | def toProtocolTreeNode(self): 11 | attributes = { 12 | "user" : self.user, 13 | "mechanism" : self.mechanism, 14 | "passive" : "true" if self.passive else "false" 15 | } 16 | return self._createProtocolTreeNode(attributes, children = None, data = self.nonce) 17 | 18 | @staticmethod 19 | def fromProtocolTreeNode(node): 20 | return AuthProtocolEntity( 21 | node.getAttributeValue("user"), 22 | node.getAttributeValue("mechanism"), 23 | node.getAttributeValue("passive") != "false", 24 | node.getData() 25 | ) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/challenge.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class ChallengeProtocolEntity(ProtocolEntity): 3 | def __init__(self, nonce): 4 | super(ChallengeProtocolEntity, self).__init__("challenge") 5 | self.nonce = nonce 6 | 7 | def getNonce(self): 8 | return self.nonce 9 | 10 | def toProtocolTreeNode(self): 11 | #return self._createProtocolTreeNode({}, children = None, data = self.nonce) 12 | return self._createProtocolTreeNode({}, children = [], data = "".join(map(chr, self.nonce))) 13 | 14 | def __str__(self): 15 | out = "Challenge\n" 16 | out += "Nonce: %s\n" % self.nonce 17 | return out 18 | 19 | @staticmethod 20 | def fromProtocolTreeNode(node): 21 | nonce = list(map(ord,node.getData())) 22 | entity = ChallengeProtocolEntity(bytearray(nonce)) 23 | return entity 24 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/failure.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class FailureProtocolEntity(ProtocolEntity): 3 | 4 | def __init__(self, reason): 5 | super(FailureProtocolEntity, self).__init__("failure") 6 | self.reason = reason 7 | 8 | def __str__(self): 9 | out = "Failure:\n" 10 | out += "Reason: %s\n" % self.reason 11 | return out 12 | 13 | def getReason(self): 14 | return self.reason 15 | 16 | def toProtocolTreeNode(self): 17 | reasonNode = ProtocolTreeNode(self.reason, {}) 18 | return self._createProtocolTreeNode({}, children = [reasonNode]) 19 | 20 | @staticmethod 21 | def fromProtocolTreeNode(node): 22 | return FailureProtocolEntity( node.getAllChildren()[0].tag ) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/response.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class ResponseProtocolEntity(ProtocolEntity): 3 | def __init__(self, data, xmlns = "urn:ietf:params:xml:ns:xmpp-sasl"): 4 | super(ResponseProtocolEntity, self).__init__("response") 5 | self.xmlns = xmlns 6 | self.data = data 7 | 8 | def toProtocolTreeNode(self): 9 | return self._createProtocolTreeNode({"xmlns": self.xmlns}, children = None, data = self.data) 10 | 11 | @staticmethod 12 | def fromProtocolTreeNode(node): 13 | return ResponseProtocolEntity(node.getData(), node.getAttributeValue("xmlns")) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/stream_features.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class StreamFeaturesProtocolEntity(ProtocolEntity): 3 | def __init__(self, features = None): 4 | super(StreamFeaturesProtocolEntity, self).__init__("stream:features") 5 | self.setFeatures(features) 6 | 7 | def setFeatures(self, features = None): 8 | self.features = features or [] 9 | 10 | def toProtocolTreeNode(self): 11 | featureNodes = [ProtocolTreeNode(feature) for feature in self.features] 12 | return self._createProtocolTreeNode({}, children = featureNodes, data = None) 13 | 14 | 15 | @staticmethod 16 | def fromProtocolTreeNode(node): 17 | return StreamFeaturesProtocolEntity([fnode.tag for fnode in node.getAllChildren()]) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/test_auth.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities import AuthProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class AuthProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = AuthProtocolEntity 9 | self.node = ProtocolTreeNode("auth", {"user": "testuser", "mechanism": "WAUTH-2", "passive": "false"}) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/test_challenge.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.challenge import ChallengeProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class ChallengeProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = ChallengeProtocolEntity 9 | attribs = {} 10 | childNodes = [] 11 | data = "dummydata" 12 | self.node = ProtocolTreeNode("challenge", attribs, [], data) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/test_failure.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.failure import FailureProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class FailureProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = FailureProtocolEntity 9 | self.node = ProtocolTreeNode("failure", {}, [ProtocolTreeNode("not-authorized", {})]) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/test_response.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.response import ResponseProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class ResponseProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = ResponseProtocolEntity 9 | attribs = { 10 | "xmlns": "urn:ietf:params:xml:ns:xmpp-sasl" 11 | } 12 | self.node = ProtocolTreeNode("response", attribs, None, "dummydata") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/test_stream_features.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.stream_features import StreamFeaturesProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class StreamFeaturesProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = StreamFeaturesProtocolEntity 9 | attribs = { 10 | } 11 | childNode = ProtocolTreeNode("receipt_acks", {}, None, None) 12 | self.node = ProtocolTreeNode("stream:features", attribs, [childNode]) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/auth/protocolentities/test_success.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.success import SuccessProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class SuccessProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = SuccessProtocolEntity 9 | attribs = { 10 | "status": "active", 11 | "kind": "free", 12 | "creation": "1234", 13 | "expiration": "1446578937", 14 | "props": "2", 15 | "t": "1415470561" 16 | } 17 | self.node = ProtocolTreeNode("success", attribs, None, "dummydata") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer_send import AxolotlSendLayer 2 | from .layer_control import AxolotlControlLayer 3 | from .layer_receive import AxolotlReceivelayer 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/props.py: -------------------------------------------------------------------------------- 1 | PROP_IDENTITY_AUTOTRUST = "org.openwhatsapp.yowsup.prop.axolotl.INDENTITY_AUTOTRUST" 2 | PROP_IGNORE_UNHANDLED = True -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq_key_get import GetKeysIqProtocolEntity 2 | from .iq_keys_set import SetKeysIqProtocolEntity 3 | from .iq_keys_get_result import ResultGetKeysIqProtocolEntity 4 | from .message_encrypted import EncryptedMessageProtocolEntity 5 | from .enc import EncProtocolEntity 6 | from .notification_encrypt import EncryptNotification 7 | from .receipt_outgoing_retry import RetryOutgoingReceiptProtocolEntity 8 | from .receipt_incoming_retry import RetryIncomingReceiptProtocolEntity 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/protocolentities/iq_key_get.py: -------------------------------------------------------------------------------- 1 | from yowsup.common import YowConstants 2 | from yowsup.layers.protocol_iq.protocolentities import IqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class GetKeysIqProtocolEntity(IqProtocolEntity): 5 | def __init__(self, jids): 6 | super(GetKeysIqProtocolEntity, self).__init__("encrypt", _type = "get", to = YowConstants.WHATSAPP_SERVER) 7 | self.setJids(jids) 8 | 9 | def setJids(self, jids): 10 | assert type(jids) is list, "expected list of jids, got %s" % type(jids) 11 | self.jids = jids 12 | 13 | def getJids(self): 14 | return self.jids 15 | 16 | def toProtocolTreeNode(self): 17 | node = super(GetKeysIqProtocolEntity, self).toProtocolTreeNode() 18 | keyNode = ProtocolTreeNode("key") 19 | 20 | for jid in self.getJids(): 21 | userNode = ProtocolTreeNode("user", { "jid": jid }) 22 | keyNode.addChild(userNode) 23 | node.addChild(keyNode) 24 | return node 25 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/protocolentities/test_notification_encrypt.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.test_notification import NotificationProtocolEntityTest 2 | from yowsup.layers.axolotl.protocolentities import EncryptNotification 3 | from yowsup.structs import ProtocolTreeNode 4 | class TestEncryptNotification(NotificationProtocolEntityTest): 5 | def setUp(self): 6 | super(TestEncryptNotification, self).setUp() 7 | self.ProtocolEntity = EncryptNotification 8 | self.node.addChild(ProtocolTreeNode("count", {"value": "9"})) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/store/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/yowsup/yowsup/layers/axolotl/store/__init__.py -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/axolotl/store/sqlite/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'tarek' 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/coder/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowCoderLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/coder/test_decoder.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from yowsup.layers.coder.decoder import ReadDecoder 3 | from yowsup.layers.coder.tokendictionary import TokenDictionary 4 | from yowsup.structs import ProtocolTreeNode 5 | class DecoderTest(unittest.TestCase): 6 | def setUp(self): 7 | self.decoder = ReadDecoder(TokenDictionary()) 8 | self.decoder.streamStarted = True 9 | 10 | def test_decode(self): 11 | data = [248, 6, 95, 179, 252, 3, 120, 121, 122, 252, 4, 102, 111, 114, 109, 252, 3, 97, 98, 99, 248, 1, 248, 4, 93, 12 | 236, 104, 255, 130, 18, 63, 252, 6, 49, 50, 51, 52, 53, 54] 13 | node = self.decoder.getProtocolTreeNode(data) 14 | targetNode = ProtocolTreeNode("message", {"form": "abc", "to":"xyz"}, [ProtocolTreeNode("media", {"width" : "123"}, data="123456")]) 15 | self.assertEqual(node, targetNode) 16 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/coder/test_tokendictionary.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.coder.tokendictionary import TokenDictionary 2 | import unittest 3 | class TokenDictionaryTest(unittest.TestCase): 4 | def setUp(self): 5 | self.tokenDictionary = TokenDictionary() 6 | 7 | def test_getToken(self): 8 | self.assertEqual(self.tokenDictionary.getToken(80), "iq") 9 | 10 | def test_getIndex(self): 11 | self.assertEqual(self.tokenDictionary.getIndex("iq"), (80, False)) 12 | 13 | def test_getSecondaryToken(self): 14 | self.assertEqual(self.tokenDictionary.getToken(238), "amrnb") 15 | 16 | def test_getSecondaryTokenExplicit(self): 17 | self.assertEqual(self.tokenDictionary.getToken(11, True), "wmv") 18 | 19 | def test_getSecondaryIndex(self): 20 | self.assertEqual(self.tokenDictionary.getIndex("wmv"), (11, True)) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/interface/__init__.py: -------------------------------------------------------------------------------- 1 | from .interface import YowInterfaceLayer, ProtocolEntityCallback -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/logger/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowLoggerLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/logger/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer 2 | import logging 3 | logger = logging.getLogger(__name__) 4 | class YowLoggerLayer(YowLayer): 5 | 6 | def send(self, data): 7 | ldata = list(data) if type(data) is bytearray else data 8 | logger.debug("tx:\n%s" % ldata) 9 | self.toLower(data) 10 | 11 | def receive(self, data): 12 | ldata = list(data) if type(data) is bytearray else data 13 | logger.debug("rx:\n%s" % ldata) 14 | self.toUpper(data) 15 | 16 | def __str__(self): 17 | return "Logger Layer" -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/network/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowNetworkLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/network/layer_interface.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayerInterface 2 | class YowNetworkLayerInterface(YowLayerInterface): 3 | def connect(self): 4 | self._layer.createConnection() 5 | 6 | def disconnect(self): 7 | self._layer.destroyConnection() 8 | 9 | def getStatus(self): 10 | return self._layer.getStatus() -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_acks/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowAckProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_acks/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowProtocolLayer 2 | from .protocolentities import * 3 | class YowAckProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "ack": (self.recvAckNode, self.sendAckEntity) 7 | } 8 | super(YowAckProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Ack Layer" 12 | 13 | def sendAckEntity(self, entity): 14 | self.entityToLower(entity) 15 | 16 | def recvAckNode(self, node): 17 | self.toUpper(IncomingAckProtocolEntity.fromProtocolTreeNode(node)) 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_acks/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .ack import AckProtocolEntity 2 | from .ack_incoming import IncomingAckProtocolEntity 3 | from .ack_outgoing import OutgoingAckProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_acks/protocolentities/test_ack_incoming.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_acks.protocolentities.ack_incoming import IncomingAckProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | import time 5 | 6 | entity = IncomingAckProtocolEntity("12345", "message", "sender@s.whatsapp.com", int(time.time())) 7 | 8 | class IncomingAckProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 9 | def setUp(self): 10 | self.ProtocolEntity = IncomingAckProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_acks/protocolentities/test_ack_outgoing.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_acks.protocolentities.ack_outgoing import OutgoingAckProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = OutgoingAckProtocolEntity("12345", "receipt", "delivery", "to_jid") 6 | 7 | class OutgoingAckProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = OutgoingAckProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_acks/test_layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowProtocolLayerTest 2 | from yowsup.layers.protocol_acks import YowAckProtocolLayer 3 | from yowsup.layers.protocol_acks.protocolentities.test_ack_incoming import entity as incomingAckEntity 4 | from yowsup.layers.protocol_acks.protocolentities.test_ack_outgoing import entity as outgoingAckEntity 5 | class YowAckProtocolLayerTest(YowProtocolLayerTest, YowAckProtocolLayer): 6 | def setUp(self): 7 | YowAckProtocolLayer.__init__(self) 8 | 9 | def test_receive(self): 10 | self.assertReceived(incomingAckEntity) 11 | 12 | def test_send(self): 13 | self.assertSent(outgoingAckEntity) 14 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_calls/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowCallsProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_calls/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .call import CallProtocolEntity 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_calls/protocolentities/test_call.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_calls.protocolentities.call import CallProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class CallProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = CallProtocolEntity 9 | children = [ProtocolTreeNode("offer", {"call-id": "call_id"})] 10 | attribs = { 11 | "t": "12345", 12 | "from": "from_jid", 13 | "offline": "0", 14 | "id": "message_id", 15 | "notify": "notify_name" 16 | } 17 | self.node = ProtocolTreeNode("call", attribs, children) 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_chatstate/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowChatstateProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_chatstate/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import * 3 | class YowChatstateProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "chatstate": (self.recvChatstateNode, self.sendChatstateEntity) 7 | } 8 | super(YowChatstateProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Chatstate Layer" 12 | 13 | def sendChatstateEntity(self, entity): 14 | self.entityToLower(entity) 15 | 16 | def recvChatstateNode(self, node): 17 | self.toUpper(IncomingChatstateProtocolEntity.fromProtocolTreeNode(node)) 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_chatstate/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .chatstate import ChatstateProtocolEntity 2 | from .chatstate_incoming import IncomingChatstateProtocolEntity 3 | from .chatstate_outgoing import OutgoingChatstateProtocolEntity 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_chatstate/protocolentities/test_chatstate_incoming.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_chatstate.protocolentities.chatstate_incoming import IncomingChatstateProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = IncomingChatstateProtocolEntity(IncomingChatstateProtocolEntity.STATE_TYPING, "jid@s.whatsapp.net") 6 | 7 | class IncomingChatstateProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = IncomingChatstateProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_chatstate/protocolentities/test_chatstate_outgoing.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_chatstate.protocolentities.chatstate_outgoing import OutgoingChatstateProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = OutgoingChatstateProtocolEntity(OutgoingChatstateProtocolEntity.STATE_PAUSED, "jid@s.whatsapp.net") 6 | 7 | class OutgoingChatstateProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = OutgoingChatstateProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_chatstate/test_layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowProtocolLayerTest 2 | from yowsup.layers.protocol_chatstate import YowChatstateProtocolLayer 3 | from yowsup.layers.protocol_chatstate.protocolentities import IncomingChatstateProtocolEntity, OutgoingChatstateProtocolEntity 4 | 5 | class YowChatStateProtocolLayerTest(YowProtocolLayerTest, YowChatstateProtocolLayer): 6 | def setUp(self): 7 | YowChatstateProtocolLayer.__init__(self) 8 | 9 | def test_send(self): 10 | entity = OutgoingChatstateProtocolEntity(OutgoingChatstateProtocolEntity.STATE_PAUSED, "jid@s.whatsapp.net") 11 | self.assertSent(entity) 12 | 13 | def test_receive(self): 14 | entity = IncomingChatstateProtocolEntity(IncomingChatstateProtocolEntity.STATE_TYPING, "jid@s.whatsapp.net") 15 | self.assertReceived(entity) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowContactsIqProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq_sync import SyncIqProtocolEntity 2 | from .iq_sync_get import GetSyncIqProtocolEntity 3 | from .iq_sync_result import ResultSyncIqProtocolEntity 4 | from .notification_contact_add import AddContactNotificationProtocolEntity 5 | from .notification_contact_remove import RemoveContactNotificationProtocolEntity 6 | from .notification_contact_update import UpdateContactNotificationProtocolEntity 7 | from .notificiation_contacts_sync import ContactsSyncNotificationProtocolEntity 8 | from .iq_statuses_get import GetStatusesIqProtocolEntity 9 | from .iq_statuses_result import ResultStatusesIqProtocolEntity 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/notification_contact.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from yowsup.layers.protocol_notifications.protocolentities import NotificationProtocolEntity 3 | class ContactNotificationProtocolEntity(NotificationProtocolEntity): 4 | ''' 5 | 7 | 8 | 9 | ''' 10 | 11 | def __init__(self, _id, _from, timestamp, notify, offline = False): 12 | super(ContactNotificationProtocolEntity, self).__init__("contacts", _id, _from, timestamp, notify, offline) 13 | 14 | 15 | @staticmethod 16 | def fromProtocolTreeNode(node): 17 | entity = NotificationProtocolEntity.fromProtocolTreeNode(node) 18 | entity.__class__ = ContactNotificationProtocolEntity 19 | return entity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_iq_sync_get.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities.iq_sync_get import GetSyncIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = GetSyncIqProtocolEntity(["12345678", "8764543121"]) 6 | 7 | class GetSyncIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = GetSyncIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_iq_sync_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities.iq_sync_result import ResultSyncIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = ResultSyncIqProtocolEntity("123", "1.30615237617e+17", 0, 6 | True, "123456", {"12345678": "12345678@s.whatsapp.net"}, 7 | {"12345678": "12345678@s.whatsapp.net"}, ["1234"]) 8 | 9 | class ResultSyncIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | self.ProtocolEntity = ResultSyncIqProtocolEntity 12 | self.node = entity.toProtocolTreeNode() 13 | 14 | def test_delta_result(self): 15 | del self.node.getChild("sync")["wait"] 16 | self.test_generation() 17 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_notification_contact_add.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities import AddContactNotificationProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import time 4 | import unittest 5 | 6 | entity = AddContactNotificationProtocolEntity("1234", "jid@s.whatsapp.net", int(time.time()), "notify", False, 7 | "sender@s.whatsapp.net") 8 | 9 | class AddContactNotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | super(AddContactNotificationProtocolEntityTest, self).setUp() 12 | self.ProtocolEntity = AddContactNotificationProtocolEntity 13 | self.node = entity.toProtocolTreeNode() 14 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_notification_contact_remove.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities import RemoveContactNotificationProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import time 4 | import unittest 5 | 6 | entity = RemoveContactNotificationProtocolEntity("1234", "jid@s.whatsapp.net", 7 | int(time.time()), "notify", False, "contactjid@s.whatsapp.net") 8 | 9 | class RemoveContactNotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | self.ProtocolEntity = RemoveContactNotificationProtocolEntity 12 | self.node = entity.toProtocolTreeNode() 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_notification_contact_update.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities import UpdateContactNotificationProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import time 4 | import unittest 5 | 6 | entity = UpdateContactNotificationProtocolEntity("1234", "jid@s.whatsapp.net", 7 | int(time.time()), "notify", False,"contactjid@s.whatsapp.net") 8 | 9 | class UpdateContactNotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | self.ProtocolEntity = UpdateContactNotificationProtocolEntity 12 | self.node = entity.toProtocolTreeNode() 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowGroupsProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/iq_groups.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from yowsup.layers.protocol_iq.protocolentities import IqProtocolEntity 3 | class GroupsIqProtocolEntity(IqProtocolEntity): 4 | ''' 5 | 6 | 7 | ''' 8 | def __init__(self, to = None, _from = None, _id = None, _type = None): 9 | super(GroupsIqProtocolEntity, self).__init__("w:g2", _id, _type, to = to, _from = _from) 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/iq_groups_participants_add_failure.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities import ErrorIqProtocolEntity 2 | class FailureAddParticipantsIqProtocolEntity(ErrorIqProtocolEntity): 3 | ''' 4 | 5 | 6 | 7 | 8 | ''' 9 | 10 | def __init__(self, _id, _from, _code, _text, _backoff= 0 ): 11 | super(FailureAddParticipantsIqProtocolEntity, self).__init__(_from = _from, 12 | _id = _id, code = _code, 13 | text = _text, backoff = _backoff) 14 | @staticmethod 15 | def fromProtocolTreeNode(node): 16 | entity = ErrorIqProtocolEntity.fromProtocolTreeNode(node) 17 | entity.__class__ = FailureAddParticipantsIqProtocolEntity 18 | return entity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | 3 | class GroupsIqProtocolEntityTest(IqProtocolEntityTest): 4 | pass 5 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups_create.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_groups.protocolentities.iq_groups_create import CreateGroupsIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = CreateGroupsIqProtocolEntity("group subject") 6 | 7 | class CreateGroupsIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = CreateGroupsIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups_create_success.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs.protocolentity import ProtocolEntityTest 2 | from yowsup.layers.protocol_groups.protocolentities import SuccessCreateGroupsIqProtocolEntity 3 | import unittest 4 | 5 | entity = SuccessCreateGroupsIqProtocolEntity("123-456", "431-123") 6 | 7 | class SuccessCreateGroupsIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = SuccessCreateGroupsIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups_list.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_groups.protocolentities.iq_groups_list import ListGroupsIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = ListGroupsIqProtocolEntity() 6 | 7 | class ListGroupsIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = ListGroupsIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_result_groups.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq_result import ResultIqProtocolEntityTest 2 | 3 | class GroupsResultIqProtocolEntityTest(ResultIqProtocolEntityTest): 4 | pass -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_result_groups_list.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_groups.protocolentities.iq_result_groups_list import ListGroupsResultIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | from yowsup.layers.protocol_groups.structs import Group 4 | import unittest 5 | import time 6 | 7 | entity = ListGroupsResultIqProtocolEntity( 8 | [ 9 | Group("1234-456", "owner@s.whatsapp.net", "subject", "sOwnerJid@s.whatsapp.net", int(time.time()), int(time.time())), 10 | Group("4321-456", "owner@s.whatsapp.net", "subject", "sOwnerJid@s.whatsapp.net", int(time.time()), int(time.time())) 11 | ] 12 | ) 13 | 14 | class ListGroupsResultIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 15 | def setUp(self): 16 | self.ProtocolEntity = ListGroupsResultIqProtocolEntity 17 | self.node = entity.toProtocolTreeNode() 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_groups/structs/__init__.py: -------------------------------------------------------------------------------- 1 | from .group import Group -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowIbProtocolLayer 2 | 3 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .clean_iq import CleanIqProtocolEntity 2 | from .dirty_ib import DirtyIbProtocolEntity 3 | from .offline_ib import OfflineIbProtocolEntity 4 | from .account_ib import AccountIbProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/protocolentities/ib.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class IbProtocolEntity(ProtocolEntity): 3 | ''' 4 | 5 | ''' 6 | def __init__(self): 7 | super(IbProtocolEntity, self).__init__("ib") 8 | 9 | def toProtocolTreeNode(self): 10 | return self._createProtocolTreeNode({}, None, None) 11 | 12 | def __str__(self): 13 | out = "Ib:\n" 14 | return out 15 | 16 | @staticmethod 17 | def fromProtocolTreeNode(node): 18 | return IbProtocolEntity() 19 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/protocolentities/test_clean_iq.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolTreeNode 2 | from yowsup.layers.protocol_ib.protocolentities.clean_iq import CleanIqProtocolEntity 3 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 4 | 5 | class CleanIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(CleanIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = CleanIqProtocolEntity 9 | cleanNode = ProtocolTreeNode("clean", {"type": "groups"}) 10 | self.node.addChild(cleanNode) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/protocolentities/test_dirty_ib.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_ib.protocolentities.test_ib import IbProtocolEntityTest 2 | from yowsup.layers.protocol_ib.protocolentities.dirty_ib import DirtyIbProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class DirtyIbProtocolEntityTest(IbProtocolEntityTest): 5 | def setUp(self): 6 | super(DirtyIbProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = DirtyIbProtocolEntity 8 | dirtyNode = ProtocolTreeNode("dirty") 9 | dirtyNode["timestamp"] = "123456" 10 | dirtyNode["type"] = "groups" 11 | self.node.addChild(dirtyNode) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/protocolentities/test_ib.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_ib.protocolentities.ib import IbProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class IbProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = IbProtocolEntity 9 | self.node = ProtocolTreeNode("ib") 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_ib/protocolentities/test_offline_iq.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_ib.protocolentities.test_ib import IbProtocolEntityTest 2 | from yowsup.layers.protocol_ib.protocolentities.offline_ib import OfflineIbProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class OfflineIbProtocolEntityTest(IbProtocolEntityTest): 5 | def setUp(self): 6 | super(OfflineIbProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = OfflineIbProtocolEntity 8 | self.node.addChild(ProtocolTreeNode("offline", {"count": "5"})) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowIqProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from .iq_result import ResultIqProtocolEntity 3 | from .iq_ping import PingIqProtocolEntity 4 | from .iq_result_pong import PongResultIqProtocolEntity 5 | from .iq_error import ErrorIqProtocolEntity 6 | from .iq_push import PushIqProtocolEntity 7 | from .iq_props import PropsIqProtocolEntity 8 | from .iq_crypto import CryptoIqProtocolEntity 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_crypto.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | class CryptoIqProtocolEntity(IqProtocolEntity): 4 | def __init__(self): 5 | super(CryptoIqProtocolEntity, self).__init__("urn:xmpp:whatsapp:account", _type="get") 6 | 7 | def toProtocolTreeNode(self): 8 | node = super(CryptoIqProtocolEntity, self).toProtocolTreeNode() 9 | cryptoNode = ProtocolTreeNode("crypto", {"action": "create"}) 10 | googleNode = ProtocolTreeNode("google", data = "fe5cf90c511fb899781bbed754577098e460d048312c8b36c11c91ca4b49ca34".decode('hex')) 11 | cryptoNode.addChild(googleNode) 12 | node.addChild(cryptoNode) 13 | return node -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_ping.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .iq import IqProtocolEntity 3 | class PingIqProtocolEntity(IqProtocolEntity): 4 | 5 | ''' 6 | Receive 7 | 8 | 9 | Send 10 | 11 | 12 | ''' 13 | 14 | def __init__(self, _from = None, to = None, _id = None): 15 | super(PingIqProtocolEntity, self).__init__("urn:xmpp:ping" if _from else "w:p", _id = _id, _type = "get", _from = _from, to = to) 16 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_props.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | class PropsIqProtocolEntity(IqProtocolEntity): 4 | def __init__(self): 5 | super(PropsIqProtocolEntity, self).__init__("w", _type="get") 6 | 7 | def toProtocolTreeNode(self): 8 | node = super(PropsIqProtocolEntity, self).toProtocolTreeNode() 9 | node.addChild(ProtocolTreeNode("props")) 10 | return node -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_push.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | class PushIqProtocolEntity(IqProtocolEntity): 4 | def __init__(self): 5 | super(PushIqProtocolEntity, self).__init__("urn:xmpp:whatsapp:push", _type="get") 6 | 7 | def toProtocolTreeNode(self): 8 | node = super(PushIqProtocolEntity, self).toProtocolTreeNode() 9 | node.addChild(ProtocolTreeNode("config")) 10 | return node -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .iq import IqProtocolEntity 3 | class ResultIqProtocolEntity(IqProtocolEntity): 4 | 5 | ''' 6 | 7 | 8 | ''' 9 | 10 | def __init__(self, xmlns = None, _id = None, to = None, _from = None): 11 | super(ResultIqProtocolEntity, self).__init__(xmlns = xmlns, _id = _id, _type = "result", to = to, _from = _from) 12 | 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_result_pong.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .iq_result import ResultIqProtocolEntity 3 | class PongResultIqProtocolEntity(ResultIqProtocolEntity): 4 | 5 | ''' 6 | 7 | 8 | ''' 9 | def __init__(self, to, _id = None): 10 | super(PongResultIqProtocolEntity, self).__init__("w:p", _id = _id, to = to) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/test_iq.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class IqProtocolEntityTest(unittest.TestCase, ProtocolEntityTest): 7 | def setUp(self): 8 | self.ProtocolEntity = IqProtocolEntity 9 | self.node = ProtocolTreeNode("iq", {"id": "test_id", "type": "get", "xmlns": "iq_xmlns"}, None, None) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/test_iq_error.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_iq.protocolentities import ErrorIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class ErrorIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(ErrorIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = ErrorIqProtocolEntity 9 | errorNode = ProtocolTreeNode("error", {"code": "123", "text": "abc"}) 10 | self.node.addChild(errorNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_iq/protocolentities/test_iq_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | class ResultIqProtocolEntityTest(IqProtocolEntityTest): 3 | def setUp(self): 4 | super(ResultIqProtocolEntityTest, self).setUp() 5 | self.node.setAttribute("type", "result") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowMediaProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .message_media import MediaMessageProtocolEntity 2 | from .message_media_downloadable import DownloadableMediaMessageProtocolEntity 3 | from .message_media_downloadable_image import ImageDownloadableMediaMessageProtocolEntity 4 | from .message_media_downloadable_audio import AudioDownloadableMediaMessageProtocolEntity 5 | from .message_media_downloadable_video import VideoDownloadableMediaMessageProtocolEntity 6 | from .message_media_location import LocationMediaMessageProtocolEntity 7 | from .message_media_vcard import VCardMediaMessageProtocolEntity 8 | from .iq_requestupload import RequestUploadIqProtocolEntity 9 | from .iq_requestupload_result import ResultRequestUploadIqProtocolEntity 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_iq_requestupload.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import RequestUploadIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class RequestUploadIqProtocolEntityTest(IqProtocolEntityTest): 5 | def setUp(self): 6 | super(RequestUploadIqProtocolEntityTest, self).setUp() 7 | mediaNode = ProtocolTreeNode("encr_media", {"hash": "hash", "size": "1234", "orighash": "orighash", "type": "image"}) 8 | self.ProtocolEntity = RequestUploadIqProtocolEntity 9 | self.node.setAttribute("type", "set") 10 | self.node.addChild(mediaNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_iq_requestupload_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq_result import ResultIqProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import ResultRequestUploadIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class ResultRequestUploadIqProtocolEntityTest(ResultIqProtocolEntityTest): 5 | def setUp(self): 6 | super(ResultRequestUploadIqProtocolEntityTest, self).setUp() 7 | mediaNode = ProtocolTreeNode("encr_media", {"url": "url", "ip": "1.2.3.4"}) 8 | self.ProtocolEntity = ResultRequestUploadIqProtocolEntity 9 | self.node.addChild(mediaNode) 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.message_media import MediaMessageProtocolEntity 2 | from yowsup.layers.protocol_messages.protocolentities.test_message import MessageProtocolEntityTest 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class MediaMessageProtocolEntityTest(MessageProtocolEntityTest): 6 | def setUp(self): 7 | super(MediaMessageProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = MediaMessageProtocolEntity 9 | mediaNode = ProtocolTreeNode("media", {"type":"MEDIA_TYPE"}, None, None) 10 | self.node.addChild(mediaNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_downloadable_audio.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.message_media_downloadable_audio import AudioDownloadableMediaMessageProtocolEntity 2 | from yowsup.layers.protocol_media.protocolentities.test_message_media_downloadable import DownloadableMediaMessageProtocolEntityTest 3 | 4 | class AudioDownloadableMediaMessageProtocolEntityTest(DownloadableMediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(AudioDownloadableMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = AudioDownloadableMediaMessageProtocolEntity 8 | mediaNode = self.node.getChild("media") 9 | mediaNode.setAttribute("abitrate", "31") 10 | mediaNode.setAttribute("acodec", "aac") 11 | mediaNode.setAttribute("asampfreq", "22050") 12 | mediaNode.setAttribute("duration", "3") 13 | mediaNode.setAttribute("encoding", "raw") 14 | mediaNode.setAttribute("origin", "live") 15 | mediaNode.setAttribute("seconds", "3") 16 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_downloadable_image.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.message_media_downloadable_image import ImageDownloadableMediaMessageProtocolEntity 2 | from yowsup.layers.protocol_media.protocolentities.test_message_media_downloadable import DownloadableMediaMessageProtocolEntityTest 3 | 4 | class ImageDownloadableMediaMessageProtocolEntityTest(DownloadableMediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(ImageDownloadableMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = ImageDownloadableMediaMessageProtocolEntity 8 | mediaNode = self.node.getChild("media") 9 | mediaNode.setAttribute("encoding", "ENCODING") 10 | mediaNode.setAttribute("width", "1024") 11 | mediaNode.setAttribute("height", "768") 12 | mediaNode.setAttribute("caption", "caption") 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_location.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.test_message_media import MediaMessageProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import LocationMediaMessageProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class LocationMediaMessageProtocolEntityTest(MediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(LocationMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = LocationMediaMessageProtocolEntity 8 | mediaNode = self.node.getChild("media") 9 | mediaNode["type"] = "location" 10 | mediaNode["latitude"] = "52.52393" 11 | mediaNode["longitude"] = "13.41747" 12 | mediaNode["encoding"] = "raw" 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_vcard.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.test_message_media import MediaMessageProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import VCardMediaMessageProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class VCardMediaMessageProtocolEntityTest(MediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(VCardMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = VCardMediaMessageProtocolEntity 8 | vcardNode = ProtocolTreeNode("vcard", {"name":"abc"}, None, "VCARD_DATA") 9 | mediaNode = self.node.getChild("media") 10 | mediaNode["type"] = "vcard" 11 | mediaNode.addChild(vcardNode) 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowMessagesProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import TextMessageProtocolEntity 3 | class YowMessagesProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "message": (self.recvMessageStanza, self.sendMessageEntity) 7 | } 8 | super(YowMessagesProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Messages Layer" 12 | 13 | def sendMessageEntity(self, entity): 14 | if entity.getType() == "text": 15 | self.entityToLower(entity) 16 | 17 | ###recieved node handlers handlers 18 | def recvMessageStanza(self, node): 19 | if node.getAttributeValue("type") == "text": 20 | entity = TextMessageProtocolEntity.fromProtocolTreeNode(node) 21 | self.toUpper(entity) 22 | 23 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/proto/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/yowsup/yowsup/layers/protocol_messages/proto/__init__.py -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .message_text import TextMessageProtocolEntity 2 | from .message import MessageProtocolEntity 3 | from .message_text_broadcast import BroadcastTextMessage 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/protocolentities/test_message.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_messages.protocolentities.message import MessageProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class MessageProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = MessageProtocolEntity 9 | # ORDER_MATTERS for node.toString() to output return attribs in same order 10 | attribs = { 11 | "type": "message_type", 12 | "id": "message-id", 13 | "t": "12345", 14 | "offline": "0", 15 | "from": "from_jid", 16 | "notify": "notify_name" 17 | } 18 | self.node = ProtocolTreeNode("message", attribs) 19 | 20 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/protocolentities/test_message_text.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_messages.protocolentities.message_text import TextMessageProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_messages.protocolentities.test_message import MessageProtocolEntityTest 4 | 5 | class TextMessageProtocolEntityTest(MessageProtocolEntityTest): 6 | def setUp(self): 7 | super(TextMessageProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = TextMessageProtocolEntity 9 | bodyNode = ProtocolTreeNode("body", {}, None, "body_data") 10 | self.node.addChild(bodyNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_messages/protocolentities/test_message_text_broadcast.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_messages.protocolentities.test_message_text import TextMessageProtocolEntityTest 2 | from yowsup.layers.protocol_messages.protocolentities.message_text_broadcast import BroadcastTextMessage 3 | from yowsup.structs import ProtocolTreeNode 4 | class BroadcastTextMessageTest(TextMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(BroadcastTextMessageTest, self).setUp() 7 | self.ProtocolEntity = BroadcastTextMessage 8 | broadcastNode = ProtocolTreeNode("broadcast") 9 | jids = ["jid1", "jid2"] 10 | toNodes = [ProtocolTreeNode("to", {"jid" : jid}) for jid in jids] 11 | broadcastNode.addChildren(toNodes) 12 | self.node.addChild(broadcastNode) 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowNotificationsProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .notification import NotificationProtocolEntity 2 | from .notification_picture import PictureNotificationProtocolEntity 3 | from .notification_picture_set import SetPictureNotificationProtocolEntity 4 | from .notification_picture_delete import DeletePictureNotificationProtocolEntity 5 | from .notification_status import StatusNotificationProtocolEntity 6 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/notification_picture.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .notification import NotificationProtocolEntity 3 | class PictureNotificationProtocolEntity(NotificationProtocolEntity): 4 | ''' 5 | 7 | 8 | ''' 9 | 10 | def __init__(self, _id, _from, status, timestamp, notify, offline, setJid, setId): 11 | super(PictureNotificationProtocolEntity, self).__init__("picture", _id, _from, timestamp, notify, offline) 12 | self.setData(setJid, setId) 13 | 14 | @staticmethod 15 | def fromProtocolTreeNode(node): 16 | entity = NotificationProtocolEntity.fromProtocolTreeNode(node) 17 | entity.__class__ = PictureNotificationProtocolEntity 18 | return entity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification import NotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class NotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = NotificationProtocolEntity 9 | attribs = { 10 | "t": "12345", 11 | "from": "from_jid", 12 | "offline": "0", 13 | "type": "notif_type", 14 | "id": "message-id", 15 | "notify": "notify_name" 16 | } 17 | self.node = ProtocolTreeNode("notification", attribs) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_picture.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_picture import PictureNotificationProtocolEntity 2 | from yowsup.layers.protocol_notifications.protocolentities.test_notification import NotificationProtocolEntityTest 3 | 4 | class PictureNotificationProtocolEntityTest(NotificationProtocolEntityTest): 5 | def setUp(self): 6 | super(PictureNotificationProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = PictureNotificationProtocolEntity 8 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_picture_delete.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_picture_delete import DeletePictureNotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_notifications.protocolentities.test_notification_picture import PictureNotificationProtocolEntityTest 4 | 5 | class DeletePictureNotificationProtocolEntityTest(PictureNotificationProtocolEntityTest): 6 | def setUp(self): 7 | super(DeletePictureNotificationProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = DeletePictureNotificationProtocolEntity 9 | deleteNode = ProtocolTreeNode("delete", {"jid": "DELETE_JID"}, None, None) 10 | self.node.addChild(deleteNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_picture_set.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_picture_set import SetPictureNotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_notifications.protocolentities.test_notification_picture import PictureNotificationProtocolEntityTest 4 | 5 | class SetPictureNotificationProtocolEntityTest(PictureNotificationProtocolEntityTest): 6 | def setUp(self): 7 | super(SetPictureNotificationProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = SetPictureNotificationProtocolEntity 9 | setNode = ProtocolTreeNode("set", {"jid": "SET_JID", "id": "123"}, None, None) 10 | self.node.addChild(setNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_status.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_status import StatusNotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_notifications.protocolentities.test_notification import NotificationProtocolEntityTest 4 | 5 | class StatusNotificationProtocolEntityTest(NotificationProtocolEntityTest): 6 | def setUp(self): 7 | super(StatusNotificationProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = StatusNotificationProtocolEntity 9 | setNode = ProtocolTreeNode("set", {}, [], "status_data") 10 | self.node.addChild(setNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowPresenceProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .presence import PresenceProtocolEntity 2 | from .presence_available import AvailablePresenceProtocolEntity 3 | from .presence_unavailable import UnavailablePresenceProtocolEntity 4 | from .presence_subscribe import SubscribePresenceProtocolEntity 5 | from .presence_unsubscribe import UnsubscribePresenceProtocolEntity 6 | from .iq_lastseen import LastseenIqProtocolEntity 7 | from .iq_lastseen_result import ResultLastseenIqProtocolEntity 8 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/iq_lastseen.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.iq import IqProtocolEntity 2 | from yowsup.structs.protocoltreenode import ProtocolTreeNode 3 | class LastseenIqProtocolEntity(IqProtocolEntity): 4 | XMLNS = "jabber:iq:last" 5 | def __init__(self, jid, _id = None): 6 | super(LastseenIqProtocolEntity, self).__init__(self.__class__.XMLNS, _type = "get", to = jid, _id = _id) 7 | 8 | @staticmethod 9 | def fromProtocolTreeNode(node): 10 | return LastseenIqProtocolEntity(node["to"]) 11 | 12 | def toProtocolTreeNode(self): 13 | node = super(LastseenIqProtocolEntity, self).toProtocolTreeNode() 14 | node.setAttribute("xmlns", self.__class__.XMLNS) 15 | node.addChild(ProtocolTreeNode("query")) 16 | return node 17 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/presence_available.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .presence import PresenceProtocolEntity 3 | class AvailablePresenceProtocolEntity(PresenceProtocolEntity): 4 | ''' 5 | 6 | response: 7 | 8 | 9 | 10 | ''' 11 | def __init__(self): 12 | super(AvailablePresenceProtocolEntity, self).__init__("available") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/presence_unavailable.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .presence import PresenceProtocolEntity 3 | class UnavailablePresenceProtocolEntity(PresenceProtocolEntity): 4 | ''' 5 | 6 | response: 7 | 8 | 9 | ''' 10 | def __init__(self): 11 | super(UnavailablePresenceProtocolEntity, self).__init__("unavailable") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence import PresenceProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class PresenceProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = PresenceProtocolEntity 9 | self.node = ProtocolTreeNode("presence", {"type": "presence_type", "name": "presence_name"}, None, None) 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_available.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_available import AvailablePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class AvailablePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(AvailablePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = AvailablePresenceProtocolEntity 8 | self.node.setAttribute("type", "available") 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_subscribe.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_subscribe import SubscribePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class SubscribePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(SubscribePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = SubscribePresenceProtocolEntity 8 | self.node.setAttribute("type", "subscribe") 9 | self.node.setAttribute("to", "subscribe_jid") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_unavailable.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_unavailable import UnavailablePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class UnavailablePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(UnavailablePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = UnavailablePresenceProtocolEntity 8 | self.node.setAttribute("type", "unavailable") 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_unsubscribe.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_unsubscribe import UnsubscribePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class UnsubscribePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(UnsubscribePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = UnsubscribePresenceProtocolEntity 8 | self.node.setAttribute("type", "unsubscribe") 9 | self.node.setAttribute("to", "some_jid") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_privacy/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowPrivacyProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_privacy/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import * 3 | class YowPrivacyProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "iq": (self.recvIq, self.sendIq) 7 | } 8 | super(YowPrivacyProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Privacy Layer" 12 | 13 | def sendIq(self, entity): 14 | if entity.getXmlns() == "jabber:iq:privacy": 15 | self.entityToLower(entity) 16 | 17 | def recvIq(self, node): 18 | pass 19 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_privacy/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .privacylist_iq import PrivacyListIqProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowProfilesProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq_unregister import UnregisterIqProtocolEntity 2 | from .iq_status_set import SetStatusIqProtocolEntity 3 | from .iq_picture_get import GetPictureIqProtocolEntity 4 | from .iq_picture_get_result import ResultGetPictureIqProtocolEntity 5 | from .iq_pictures_list import ListPicturesIqProtocolEntity 6 | from .iq_picture_set import SetPictureIqProtocolEntity 7 | from .iq_privacy_set import SetPrivacyIqProtocolEntity 8 | from .iq_privacy_get import GetPrivacyIqProtocolEntity 9 | from .iq_privacy_result import ResultPrivacyIqProtocolEntity 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/iq_picture.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities import IqProtocolEntity 2 | class PictureIqProtocolEntity(IqProtocolEntity): 3 | ''' 4 | When receiving a profile picture: 5 | 6 | 7 | {{Binary bytes of the picture.}} 8 | 9 | 10 | ''' 11 | XMLNS = "w:profile:picture" 12 | 13 | def __init__(self, jid, _id = None, type = "get"): 14 | super(PictureIqProtocolEntity, self).__init__(self.__class__.XMLNS, _id = _id, _type=type, to = jid) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_privacy_get.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import GetPrivacyIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | entity = GetPrivacyIqProtocolEntity() 6 | 7 | class GetPrivacyIqProtocolEntityTest(IqProtocolEntityTest): 8 | def setUp(self): 9 | super(GetPrivacyIqProtocolEntityTest, self).setUp() 10 | self.ProtocolEntity = GetPrivacyIqProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_privacy_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import ResultPrivacyIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | entity = ResultPrivacyIqProtocolEntity({"profile":"all","last":"none","status":"contacts"}) 6 | 7 | class ResultPrivacyIqProtocolEntityTest(IqProtocolEntityTest): 8 | def setUp(self): 9 | super(ResultPrivacyIqProtocolEntityTest, self).setUp() 10 | self.ProtocolEntity = ResultPrivacyIqProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_privacy_set.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import SetPrivacyIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | entity = SetPrivacyIqProtocolEntity("all", ["profile","last","status"]) 6 | 7 | class SetPrivacyIqProtocolEntityTest(IqProtocolEntityTest): 8 | def setUp(self): 9 | super(SetPrivacyIqProtocolEntityTest, self).setUp() 10 | self.ProtocolEntity = SetPrivacyIqProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_status_set.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import SetStatusIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class SetStatusIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(SetStatusIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = SetStatusIqProtocolEntity 9 | statusNode = ProtocolTreeNode("status", {}, [], "Hey there, I'm using WhatsApp") 10 | self.node.addChild(statusNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_unregister.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import UnregisterIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class UnregisterIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(UnregisterIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = UnregisterIqProtocolEntity 9 | self.node.addChild(ProtocolTreeNode("remove", {"xmlns": "urn:xmpp:whatsapp:account"})) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_receipts/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowReceiptProtocolLayer 2 | 3 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_receipts/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import * 3 | class YowReceiptProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "receipt": (self.recvReceiptNode, self.sendReceiptEntity) 7 | } 8 | super(YowReceiptProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Receipt Layer" 12 | 13 | def sendReceiptEntity(self, entity): 14 | self.entityToLower(entity) 15 | 16 | def recvReceiptNode(self, node): 17 | self.toUpper(IncomingReceiptProtocolEntity.fromProtocolTreeNode(node)) 18 | 19 | 20 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_receipts/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .receipt import ReceiptProtocolEntity 2 | from .receipt_incoming import IncomingReceiptProtocolEntity 3 | from .receipt_outgoing import OutgoingReceiptProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_receipts/protocolentities/test_receipt_incoming.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_receipts.protocolentities import IncomingReceiptProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | import time 5 | 6 | class IncomingReceiptProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = IncomingReceiptProtocolEntity 9 | self.node = IncomingReceiptProtocolEntity("123", "sender", int(time.time())).toProtocolTreeNode() 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/protocol_receipts/protocolentities/test_receipt_outgoing.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_receipts.protocolentities import OutgoingReceiptProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | class OutgoingReceiptProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 6 | def setUp(self): 7 | self.ProtocolEntity = OutgoingReceiptProtocolEntity 8 | self.node = OutgoingReceiptProtocolEntity("123", "target", "read").toProtocolTreeNode() -------------------------------------------------------------------------------- /libs/yowsup/yowsup/layers/stanzaregulator/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowStanzaRegulator -------------------------------------------------------------------------------- /libs/yowsup/yowsup/registration/__init__.py: -------------------------------------------------------------------------------- 1 | from .coderequest import WACodeRequest 2 | from .existsrequest import WAExistsRequest 3 | from .regrequest import WARegRequest -------------------------------------------------------------------------------- /libs/yowsup/yowsup/signals.py: -------------------------------------------------------------------------------- 1 | from blinker import signal 2 | 3 | ''' 4 | System signals, you probably should't use this 5 | ''' 6 | 7 | # Reply-type message or @tag () 8 | node_intercepted = signal('node_intercepted') -------------------------------------------------------------------------------- /libs/yowsup/yowsup/structs/__init__.py: -------------------------------------------------------------------------------- 1 | from .protocolentity import ProtocolEntity 2 | from .protocoltreenode import ProtocolTreeNode -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "2.5.2" 2 | __author__ = "Tarek Galal" 3 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/common/__init__.py: -------------------------------------------------------------------------------- 1 | from .constants import YowConstants -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/common/constants.py: -------------------------------------------------------------------------------- 1 | class YowConstants: 2 | DOMAIN = "s.whatsapp.net" 3 | ENDPOINTS = ( 4 | ("e1.whatsapp.net", 443), 5 | ("e2.whatsapp.net", 443), 6 | ("e3.whatsapp.net", 443), 7 | ("e4.whatsapp.net", 443), 8 | ("e5.whatsapp.net", 443), 9 | ("e6.whatsapp.net", 443), 10 | ("e7.whatsapp.net", 443), 11 | ("e8.whatsapp.net", 443), 12 | ("e9.whatsapp.net", 443), 13 | ("e10.whatsapp.net", 443), 14 | ("e11.whatsapp.net", 443), 15 | ("e12.whatsapp.net", 443), 16 | ("e13.whatsapp.net", 443), 17 | ("e14.whatsapp.net", 443), 18 | ("e15.whatsapp.net", 443), 19 | ("e16.whatsapp.net", 443), 20 | ) 21 | 22 | WHATSAPP_SERVER = "s.whatsapp.net" 23 | WHATSAPP_GROUP_SERVER = "g.us" 24 | 25 | PATH_STORAGE = "~/.yowsup" 26 | 27 | PREVIEW_WIDTH = 64 28 | PREVIEW_HEIGHT = 64 29 | PREVIEW_DOCUMENT_WIDTH = 339 30 | PREVIEW_DOCUMENT_HEIGHT = 480 31 | 32 | MAP_ZOOM = 13 33 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/common/http/__init__.py: -------------------------------------------------------------------------------- 1 | from .httpproxy import HttpProxy 2 | from .warequest import WARequest 3 | from .waresponseparser import JSONResponseParser -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/common/http/test_warequest.py: -------------------------------------------------------------------------------- 1 | from yowsup.common.http.warequest import WARequest -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/common/mime.types: -------------------------------------------------------------------------------- 1 | audio/3gpp 3gpp 2 | audio/aac aac 3 | audio/aiff aif 4 | audio/amr amr 5 | audio/mp4 m4a 6 | audio/mpeg mp3 mp2 mpga mpega 7 | audio/ogg ogg 8 | audio/x-opus+ogg ogg 9 | audio/qcelp qcp 10 | audio/wav wav 11 | audio/webm webm 12 | audio/x-caf caf 13 | audio/x-ms-wma wma 14 | image/gif gif 15 | image/jpeg jpg 16 | image/png png 17 | video/3gpp 3gp 18 | video/avi avi 19 | video/mp4 mp4 20 | video/mpeg m1v mpeg mpa mpg mpe 21 | video/quicktime mov qt 22 | video/x-flv flv 23 | video/x-ms-asf asf asx 24 | application/pdf pdf 25 | text/xml xml 26 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/demos/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/yowsup/yowsup/yowsup/demos/__init__.py -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/demos/cli/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupCliStack 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/demos/contacts/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupSyncStack 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/demos/echoclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupEchoStack -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/demos/echoclient/stack.py: -------------------------------------------------------------------------------- 1 | from yowsup.stacks import YowStackBuilder 2 | from .layer import EchoLayer 3 | from yowsup.layers.auth import AuthError 4 | from yowsup.layers import YowLayerEvent 5 | from yowsup.layers.network import YowNetworkLayer 6 | 7 | class YowsupEchoStack(object): 8 | def __init__(self, credentials, encryptionEnabled = True): 9 | stackBuilder = YowStackBuilder() 10 | 11 | self.stack = stackBuilder\ 12 | .pushDefaultLayers(encryptionEnabled)\ 13 | .push(EchoLayer)\ 14 | .build() 15 | 16 | self.stack.setCredentials(credentials) 17 | 18 | def start(self): 19 | self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) 20 | try: 21 | self.stack.loop() 22 | except AuthError as e: 23 | print("Authentication Error: %s" % e.message) 24 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/demos/sendclient/__init__.py: -------------------------------------------------------------------------------- 1 | from .stack import YowsupSendStack -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/env/__init__.py: -------------------------------------------------------------------------------- 1 | from .env import YowsupEnv 2 | from .env_android import AndroidYowsupEnv 3 | from .env_s40 import S40YowsupEnv 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/env/test_env_s40.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from yowsup.env import S40YowsupEnv 3 | class S40YowsupEnvTest(unittest.TestCase): 4 | def test_tokengen(self): 5 | phone = "1234567" 6 | S40YowsupEnv._TOKEN_STRING = "PdA2DJyKoUrwLw1Bg6EIhzh502dF9noR9uFCllGk1425519315543{phone}" 7 | env = S40YowsupEnv() 8 | token = env.getToken(phone) 9 | self.assertEqual(token, 'e84e1f1477704159efd46f6f0781dbde') 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer_crypt import YowCryptLayer 2 | from .layer_authentication import YowAuthenticationProtocolLayer 3 | from .autherror import AuthError 4 | #import protocolentities 5 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/autherror.py: -------------------------------------------------------------------------------- 1 | class AuthError(Exception): 2 | pass -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/layer_interface_authentication.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayerInterface 2 | 3 | class YowAuthenticationProtocolLayerInterface(YowLayerInterface): 4 | def setCredentials(self, phone, password): 5 | self._layer.setCredentials((phone, password)) 6 | 7 | def getUsername(self, full = False): 8 | return self._layer.getUsername(full) 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .auth import AuthProtocolEntity 2 | from .challenge import ChallengeProtocolEntity 3 | from .response import ResponseProtocolEntity 4 | from .stream_features import StreamFeaturesProtocolEntity 5 | from .success import SuccessProtocolEntity 6 | from .failure import FailureProtocolEntity 7 | from .stream_error import StreamErrorProtocolEntity 8 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/challenge.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class ChallengeProtocolEntity(ProtocolEntity): 3 | def __init__(self, nonce): 4 | super(ChallengeProtocolEntity, self).__init__("challenge") 5 | self.nonce = nonce 6 | 7 | def getNonce(self): 8 | return self.nonce 9 | 10 | def toProtocolTreeNode(self): 11 | #return self._createProtocolTreeNode({}, children = None, data = self.nonce) 12 | return self._createProtocolTreeNode({}, children = [], data = "".join(map(chr, self.nonce))) 13 | 14 | def __str__(self): 15 | out = "Challenge\n" 16 | out += "Nonce: %s\n" % self.nonce 17 | return out 18 | 19 | @staticmethod 20 | def fromProtocolTreeNode(node): 21 | nonce = list(map(ord,node.getData())) 22 | entity = ChallengeProtocolEntity(bytearray(nonce)) 23 | return entity 24 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/failure.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class FailureProtocolEntity(ProtocolEntity): 3 | 4 | def __init__(self, reason): 5 | super(FailureProtocolEntity, self).__init__("failure") 6 | self.reason = reason 7 | 8 | def __str__(self): 9 | out = "Failure:\n" 10 | out += "Reason: %s\n" % self.reason 11 | return out 12 | 13 | def getReason(self): 14 | return self.reason 15 | 16 | def toProtocolTreeNode(self): 17 | reasonNode = ProtocolTreeNode(self.reason, {}) 18 | return self._createProtocolTreeNode({}, children = [reasonNode]) 19 | 20 | @staticmethod 21 | def fromProtocolTreeNode(node): 22 | return FailureProtocolEntity( node.getAllChildren()[0].tag ) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/response.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class ResponseProtocolEntity(ProtocolEntity): 3 | def __init__(self, data, xmlns = "urn:ietf:params:xml:ns:xmpp-sasl"): 4 | super(ResponseProtocolEntity, self).__init__("response") 5 | self.xmlns = xmlns 6 | self.data = data 7 | 8 | def toProtocolTreeNode(self): 9 | return self._createProtocolTreeNode({"xmlns": self.xmlns}, children = None, data = self.data) 10 | 11 | @staticmethod 12 | def fromProtocolTreeNode(node): 13 | return ResponseProtocolEntity(node.getData(), node.getAttributeValue("xmlns")) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/stream_features.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class StreamFeaturesProtocolEntity(ProtocolEntity): 3 | def __init__(self, features = None): 4 | super(StreamFeaturesProtocolEntity, self).__init__("stream:features") 5 | self.setFeatures(features) 6 | 7 | def setFeatures(self, features = None): 8 | self.features = features or [] 9 | 10 | def toProtocolTreeNode(self): 11 | featureNodes = [ProtocolTreeNode(feature) for feature in self.features] 12 | return self._createProtocolTreeNode({}, children = featureNodes, data = None) 13 | 14 | 15 | @staticmethod 16 | def fromProtocolTreeNode(node): 17 | return StreamFeaturesProtocolEntity([fnode.tag for fnode in node.getAllChildren()]) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/test_auth.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities import AuthProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class AuthProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = AuthProtocolEntity 9 | self.node = ProtocolTreeNode("auth", {"user": "testuser", "mechanism": "WAUTH-2", "passive": "false"}) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/test_challenge.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.challenge import ChallengeProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class ChallengeProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = ChallengeProtocolEntity 9 | attribs = {} 10 | childNodes = [] 11 | data = "dummydata" 12 | self.node = ProtocolTreeNode("challenge", attribs, [], data) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/test_failure.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.failure import FailureProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class FailureProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = FailureProtocolEntity 9 | self.node = ProtocolTreeNode("failure", {}, [ProtocolTreeNode("not-authorized", {})]) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/test_response.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.response import ResponseProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class ResponseProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = ResponseProtocolEntity 9 | attribs = { 10 | "xmlns": "urn:ietf:params:xml:ns:xmpp-sasl" 11 | } 12 | self.node = ProtocolTreeNode("response", attribs, None, "dummydata") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/test_stream_features.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.stream_features import StreamFeaturesProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class StreamFeaturesProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = StreamFeaturesProtocolEntity 9 | attribs = { 10 | } 11 | childNode = ProtocolTreeNode("receipt_acks", {}, None, None) 12 | self.node = ProtocolTreeNode("stream:features", attribs, [childNode]) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/auth/protocolentities/test_success.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.auth.protocolentities.success import SuccessProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class SuccessProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = SuccessProtocolEntity 9 | attribs = { 10 | "status": "active", 11 | "kind": "free", 12 | "creation": "1234", 13 | "expiration": "1446578937", 14 | "props": "2", 15 | "t": "1415470561" 16 | } 17 | self.node = ProtocolTreeNode("success", attribs, None, "dummydata") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer_send import AxolotlSendLayer 2 | from .layer_control import AxolotlControlLayer 3 | from .layer_receive import AxolotlReceivelayer 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/props.py: -------------------------------------------------------------------------------- 1 | PROP_IDENTITY_AUTOTRUST = "org.openwhatsapp.yowsup.prop.axolotl.INDENTITY_AUTOTRUST" 2 | PROP_IGNORE_UNHANDLED = True -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq_key_get import GetKeysIqProtocolEntity 2 | from .iq_keys_set import SetKeysIqProtocolEntity 3 | from .iq_keys_get_result import ResultGetKeysIqProtocolEntity 4 | from .message_encrypted import EncryptedMessageProtocolEntity 5 | from .enc import EncProtocolEntity 6 | from .notification_encrypt import EncryptNotification 7 | from .receipt_outgoing_retry import RetryOutgoingReceiptProtocolEntity 8 | from .receipt_incoming_retry import RetryIncomingReceiptProtocolEntity 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/protocolentities/iq_key_get.py: -------------------------------------------------------------------------------- 1 | from yowsup.common import YowConstants 2 | from yowsup.layers.protocol_iq.protocolentities import IqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class GetKeysIqProtocolEntity(IqProtocolEntity): 5 | def __init__(self, jids): 6 | super(GetKeysIqProtocolEntity, self).__init__("encrypt", _type = "get", to = YowConstants.WHATSAPP_SERVER) 7 | self.setJids(jids) 8 | 9 | def setJids(self, jids): 10 | assert type(jids) is list, "expected list of jids, got %s" % type(jids) 11 | self.jids = jids 12 | 13 | def getJids(self): 14 | return self.jids 15 | 16 | def toProtocolTreeNode(self): 17 | node = super(GetKeysIqProtocolEntity, self).toProtocolTreeNode() 18 | keyNode = ProtocolTreeNode("key") 19 | 20 | for jid in self.getJids(): 21 | userNode = ProtocolTreeNode("user", { "jid": jid }) 22 | keyNode.addChild(userNode) 23 | node.addChild(keyNode) 24 | return node 25 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/protocolentities/test_notification_encrypt.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.test_notification import NotificationProtocolEntityTest 2 | from yowsup.layers.axolotl.protocolentities import EncryptNotification 3 | from yowsup.structs import ProtocolTreeNode 4 | class TestEncryptNotification(NotificationProtocolEntityTest): 5 | def setUp(self): 6 | super(TestEncryptNotification, self).setUp() 7 | self.ProtocolEntity = EncryptNotification 8 | self.node.addChild(ProtocolTreeNode("count", {"value": "9"})) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/store/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/yowsup/yowsup/yowsup/layers/axolotl/store/__init__.py -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/axolotl/store/sqlite/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'tarek' 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/coder/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowCoderLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/coder/test_decoder.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from yowsup.layers.coder.decoder import ReadDecoder 3 | from yowsup.layers.coder.tokendictionary import TokenDictionary 4 | from yowsup.structs import ProtocolTreeNode 5 | class DecoderTest(unittest.TestCase): 6 | def setUp(self): 7 | self.decoder = ReadDecoder(TokenDictionary()) 8 | self.decoder.streamStarted = True 9 | 10 | def test_decode(self): 11 | data = [248, 6, 95, 179, 252, 3, 120, 121, 122, 252, 4, 102, 111, 114, 109, 252, 3, 97, 98, 99, 248, 1, 248, 4, 93, 12 | 236, 104, 255, 130, 18, 63, 252, 6, 49, 50, 51, 52, 53, 54] 13 | node = self.decoder.getProtocolTreeNode(data) 14 | targetNode = ProtocolTreeNode("message", {"form": "abc", "to":"xyz"}, [ProtocolTreeNode("media", {"width" : "123"}, data="123456")]) 15 | self.assertEqual(node, targetNode) 16 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/coder/test_tokendictionary.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.coder.tokendictionary import TokenDictionary 2 | import unittest 3 | class TokenDictionaryTest(unittest.TestCase): 4 | def setUp(self): 5 | self.tokenDictionary = TokenDictionary() 6 | 7 | def test_getToken(self): 8 | self.assertEqual(self.tokenDictionary.getToken(80), "iq") 9 | 10 | def test_getIndex(self): 11 | self.assertEqual(self.tokenDictionary.getIndex("iq"), (80, False)) 12 | 13 | def test_getSecondaryToken(self): 14 | self.assertEqual(self.tokenDictionary.getToken(238), "amrnb") 15 | 16 | def test_getSecondaryTokenExplicit(self): 17 | self.assertEqual(self.tokenDictionary.getToken(11, True), "wmv") 18 | 19 | def test_getSecondaryIndex(self): 20 | self.assertEqual(self.tokenDictionary.getIndex("wmv"), (11, True)) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/interface/__init__.py: -------------------------------------------------------------------------------- 1 | from .interface import YowInterfaceLayer, ProtocolEntityCallback -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/logger/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowLoggerLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/logger/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer 2 | import logging 3 | logger = logging.getLogger(__name__) 4 | class YowLoggerLayer(YowLayer): 5 | 6 | def send(self, data): 7 | ldata = list(data) if type(data) is bytearray else data 8 | logger.debug("tx:\n%s" % ldata) 9 | self.toLower(data) 10 | 11 | def receive(self, data): 12 | ldata = list(data) if type(data) is bytearray else data 13 | logger.debug("rx:\n%s" % ldata) 14 | self.toUpper(data) 15 | 16 | def __str__(self): 17 | return "Logger Layer" -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/network/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowNetworkLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/network/layer_interface.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayerInterface 2 | class YowNetworkLayerInterface(YowLayerInterface): 3 | def connect(self): 4 | self._layer.createConnection() 5 | 6 | def disconnect(self): 7 | self._layer.destroyConnection() 8 | 9 | def getStatus(self): 10 | return self._layer.getStatus() -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_acks/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowAckProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_acks/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowProtocolLayer 2 | from .protocolentities import * 3 | class YowAckProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "ack": (self.recvAckNode, self.sendAckEntity) 7 | } 8 | super(YowAckProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Ack Layer" 12 | 13 | def sendAckEntity(self, entity): 14 | self.entityToLower(entity) 15 | 16 | def recvAckNode(self, node): 17 | self.toUpper(IncomingAckProtocolEntity.fromProtocolTreeNode(node)) 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_acks/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .ack import AckProtocolEntity 2 | from .ack_incoming import IncomingAckProtocolEntity 3 | from .ack_outgoing import OutgoingAckProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_acks/protocolentities/test_ack_incoming.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_acks.protocolentities.ack_incoming import IncomingAckProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | import time 5 | 6 | entity = IncomingAckProtocolEntity("12345", "message", "sender@s.whatsapp.com", int(time.time())) 7 | 8 | class IncomingAckProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 9 | def setUp(self): 10 | self.ProtocolEntity = IncomingAckProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_acks/protocolentities/test_ack_outgoing.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_acks.protocolentities.ack_outgoing import OutgoingAckProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = OutgoingAckProtocolEntity("12345", "receipt", "delivery", "to_jid") 6 | 7 | class OutgoingAckProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = OutgoingAckProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_acks/test_layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowProtocolLayerTest 2 | from yowsup.layers.protocol_acks import YowAckProtocolLayer 3 | from yowsup.layers.protocol_acks.protocolentities.test_ack_incoming import entity as incomingAckEntity 4 | from yowsup.layers.protocol_acks.protocolentities.test_ack_outgoing import entity as outgoingAckEntity 5 | class YowAckProtocolLayerTest(YowProtocolLayerTest, YowAckProtocolLayer): 6 | def setUp(self): 7 | YowAckProtocolLayer.__init__(self) 8 | 9 | def test_receive(self): 10 | self.assertReceived(incomingAckEntity) 11 | 12 | def test_send(self): 13 | self.assertSent(outgoingAckEntity) 14 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_calls/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowCallsProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_calls/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .call import CallProtocolEntity 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_calls/protocolentities/test_call.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_calls.protocolentities.call import CallProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class CallProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = CallProtocolEntity 9 | children = [ProtocolTreeNode("offer", {"call-id": "call_id"})] 10 | attribs = { 11 | "t": "12345", 12 | "from": "from_jid", 13 | "offline": "0", 14 | "id": "message_id", 15 | "notify": "notify_name" 16 | } 17 | self.node = ProtocolTreeNode("call", attribs, children) 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_chatstate/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowChatstateProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_chatstate/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import * 3 | class YowChatstateProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "chatstate": (self.recvChatstateNode, self.sendChatstateEntity) 7 | } 8 | super(YowChatstateProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Chatstate Layer" 12 | 13 | def sendChatstateEntity(self, entity): 14 | self.entityToLower(entity) 15 | 16 | def recvChatstateNode(self, node): 17 | self.toUpper(IncomingChatstateProtocolEntity.fromProtocolTreeNode(node)) 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_chatstate/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .chatstate import ChatstateProtocolEntity 2 | from .chatstate_incoming import IncomingChatstateProtocolEntity 3 | from .chatstate_outgoing import OutgoingChatstateProtocolEntity 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_chatstate/protocolentities/test_chatstate_incoming.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_chatstate.protocolentities.chatstate_incoming import IncomingChatstateProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = IncomingChatstateProtocolEntity(IncomingChatstateProtocolEntity.STATE_TYPING, "jid@s.whatsapp.net") 6 | 7 | class IncomingChatstateProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = IncomingChatstateProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_chatstate/protocolentities/test_chatstate_outgoing.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_chatstate.protocolentities.chatstate_outgoing import OutgoingChatstateProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = OutgoingChatstateProtocolEntity(OutgoingChatstateProtocolEntity.STATE_PAUSED, "jid@s.whatsapp.net") 6 | 7 | class OutgoingChatstateProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = OutgoingChatstateProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_chatstate/test_layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowProtocolLayerTest 2 | from yowsup.layers.protocol_chatstate import YowChatstateProtocolLayer 3 | from yowsup.layers.protocol_chatstate.protocolentities import IncomingChatstateProtocolEntity, OutgoingChatstateProtocolEntity 4 | 5 | class YowChatStateProtocolLayerTest(YowProtocolLayerTest, YowChatstateProtocolLayer): 6 | def setUp(self): 7 | YowChatstateProtocolLayer.__init__(self) 8 | 9 | def test_send(self): 10 | entity = OutgoingChatstateProtocolEntity(OutgoingChatstateProtocolEntity.STATE_PAUSED, "jid@s.whatsapp.net") 11 | self.assertSent(entity) 12 | 13 | def test_receive(self): 14 | entity = IncomingChatstateProtocolEntity(IncomingChatstateProtocolEntity.STATE_TYPING, "jid@s.whatsapp.net") 15 | self.assertReceived(entity) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowContactsIqProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq_sync import SyncIqProtocolEntity 2 | from .iq_sync_get import GetSyncIqProtocolEntity 3 | from .iq_sync_result import ResultSyncIqProtocolEntity 4 | from .notification_contact_add import AddContactNotificationProtocolEntity 5 | from .notification_contact_remove import RemoveContactNotificationProtocolEntity 6 | from .notification_contact_update import UpdateContactNotificationProtocolEntity 7 | from .notificiation_contacts_sync import ContactsSyncNotificationProtocolEntity 8 | from .iq_statuses_get import GetStatusesIqProtocolEntity 9 | from .iq_statuses_result import ResultStatusesIqProtocolEntity 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/notification_contact.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from yowsup.layers.protocol_notifications.protocolentities import NotificationProtocolEntity 3 | class ContactNotificationProtocolEntity(NotificationProtocolEntity): 4 | ''' 5 | 7 | 8 | 9 | ''' 10 | 11 | def __init__(self, _id, _from, timestamp, notify, offline = False): 12 | super(ContactNotificationProtocolEntity, self).__init__("contacts", _id, _from, timestamp, notify, offline) 13 | 14 | 15 | @staticmethod 16 | def fromProtocolTreeNode(node): 17 | entity = NotificationProtocolEntity.fromProtocolTreeNode(node) 18 | entity.__class__ = ContactNotificationProtocolEntity 19 | return entity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_iq_sync_get.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities.iq_sync_get import GetSyncIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = GetSyncIqProtocolEntity(["12345678", "8764543121"]) 6 | 7 | class GetSyncIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = GetSyncIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_iq_sync_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities.iq_sync_result import ResultSyncIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = ResultSyncIqProtocolEntity("123", "1.30615237617e+17", 0, 6 | True, "123456", {"12345678": "12345678@s.whatsapp.net"}, 7 | {"12345678": "12345678@s.whatsapp.net"}, ["1234"]) 8 | 9 | class ResultSyncIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | self.ProtocolEntity = ResultSyncIqProtocolEntity 12 | self.node = entity.toProtocolTreeNode() 13 | 14 | def test_delta_result(self): 15 | del self.node.getChild("sync")["wait"] 16 | self.test_generation() 17 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_notification_contact_add.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities import AddContactNotificationProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import time 4 | import unittest 5 | 6 | entity = AddContactNotificationProtocolEntity("1234", "jid@s.whatsapp.net", int(time.time()), "notify", False, 7 | "sender@s.whatsapp.net") 8 | 9 | class AddContactNotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | super(AddContactNotificationProtocolEntityTest, self).setUp() 12 | self.ProtocolEntity = AddContactNotificationProtocolEntity 13 | self.node = entity.toProtocolTreeNode() 14 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_notification_contact_remove.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities import RemoveContactNotificationProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import time 4 | import unittest 5 | 6 | entity = RemoveContactNotificationProtocolEntity("1234", "jid@s.whatsapp.net", 7 | int(time.time()), "notify", False, "contactjid@s.whatsapp.net") 8 | 9 | class RemoveContactNotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | self.ProtocolEntity = RemoveContactNotificationProtocolEntity 12 | self.node = entity.toProtocolTreeNode() 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_contacts/protocolentities/test_notification_contact_update.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_contacts.protocolentities import UpdateContactNotificationProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import time 4 | import unittest 5 | 6 | entity = UpdateContactNotificationProtocolEntity("1234", "jid@s.whatsapp.net", 7 | int(time.time()), "notify", False,"contactjid@s.whatsapp.net") 8 | 9 | class UpdateContactNotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 10 | def setUp(self): 11 | self.ProtocolEntity = UpdateContactNotificationProtocolEntity 12 | self.node = entity.toProtocolTreeNode() 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowGroupsProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/iq_groups.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from yowsup.layers.protocol_iq.protocolentities import IqProtocolEntity 3 | class GroupsIqProtocolEntity(IqProtocolEntity): 4 | ''' 5 | 6 | 7 | ''' 8 | def __init__(self, to = None, _from = None, _id = None, _type = None): 9 | super(GroupsIqProtocolEntity, self).__init__("w:g2", _id, _type, to = to, _from = _from) 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/iq_groups_participants_add_failure.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities import ErrorIqProtocolEntity 2 | class FailureAddParticipantsIqProtocolEntity(ErrorIqProtocolEntity): 3 | ''' 4 | 5 | 6 | 7 | 8 | ''' 9 | 10 | def __init__(self, _id, _from, _code, _text, _backoff= 0 ): 11 | super(FailureAddParticipantsIqProtocolEntity, self).__init__(_from = _from, 12 | _id = _id, code = _code, 13 | text = _text, backoff = _backoff) 14 | @staticmethod 15 | def fromProtocolTreeNode(node): 16 | entity = ErrorIqProtocolEntity.fromProtocolTreeNode(node) 17 | entity.__class__ = FailureAddParticipantsIqProtocolEntity 18 | return entity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | 3 | class GroupsIqProtocolEntityTest(IqProtocolEntityTest): 4 | pass 5 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups_create.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_groups.protocolentities.iq_groups_create import CreateGroupsIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = CreateGroupsIqProtocolEntity("group subject") 6 | 7 | class CreateGroupsIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = CreateGroupsIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups_create_success.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs.protocolentity import ProtocolEntityTest 2 | from yowsup.layers.protocol_groups.protocolentities import SuccessCreateGroupsIqProtocolEntity 3 | import unittest 4 | 5 | entity = SuccessCreateGroupsIqProtocolEntity("123-456", "431-123") 6 | 7 | class SuccessCreateGroupsIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = SuccessCreateGroupsIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_groups_list.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_groups.protocolentities.iq_groups_list import ListGroupsIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | entity = ListGroupsIqProtocolEntity() 6 | 7 | class ListGroupsIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 8 | def setUp(self): 9 | self.ProtocolEntity = ListGroupsIqProtocolEntity 10 | self.node = entity.toProtocolTreeNode() 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_result_groups.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq_result import ResultIqProtocolEntityTest 2 | 3 | class GroupsResultIqProtocolEntityTest(ResultIqProtocolEntityTest): 4 | pass -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/protocolentities/test_iq_result_groups_list.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_groups.protocolentities.iq_result_groups_list import ListGroupsResultIqProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | from yowsup.layers.protocol_groups.structs import Group 4 | import unittest 5 | import time 6 | 7 | entity = ListGroupsResultIqProtocolEntity( 8 | [ 9 | Group("1234-456", "owner@s.whatsapp.net", "subject", "sOwnerJid@s.whatsapp.net", int(time.time()), int(time.time())), 10 | Group("4321-456", "owner@s.whatsapp.net", "subject", "sOwnerJid@s.whatsapp.net", int(time.time()), int(time.time())) 11 | ] 12 | ) 13 | 14 | class ListGroupsResultIqProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 15 | def setUp(self): 16 | self.ProtocolEntity = ListGroupsResultIqProtocolEntity 17 | self.node = entity.toProtocolTreeNode() 18 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_groups/structs/__init__.py: -------------------------------------------------------------------------------- 1 | from .group import Group -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowIbProtocolLayer 2 | 3 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .clean_iq import CleanIqProtocolEntity 2 | from .dirty_ib import DirtyIbProtocolEntity 3 | from .offline_ib import OfflineIbProtocolEntity 4 | from .account_ib import AccountIbProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/protocolentities/ib.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | class IbProtocolEntity(ProtocolEntity): 3 | ''' 4 | 5 | ''' 6 | def __init__(self): 7 | super(IbProtocolEntity, self).__init__("ib") 8 | 9 | def toProtocolTreeNode(self): 10 | return self._createProtocolTreeNode({}, None, None) 11 | 12 | def __str__(self): 13 | out = "Ib:\n" 14 | return out 15 | 16 | @staticmethod 17 | def fromProtocolTreeNode(node): 18 | return IbProtocolEntity() 19 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/protocolentities/test_clean_iq.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolTreeNode 2 | from yowsup.layers.protocol_ib.protocolentities.clean_iq import CleanIqProtocolEntity 3 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 4 | 5 | class CleanIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(CleanIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = CleanIqProtocolEntity 9 | cleanNode = ProtocolTreeNode("clean", {"type": "groups"}) 10 | self.node.addChild(cleanNode) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/protocolentities/test_dirty_ib.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_ib.protocolentities.test_ib import IbProtocolEntityTest 2 | from yowsup.layers.protocol_ib.protocolentities.dirty_ib import DirtyIbProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class DirtyIbProtocolEntityTest(IbProtocolEntityTest): 5 | def setUp(self): 6 | super(DirtyIbProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = DirtyIbProtocolEntity 8 | dirtyNode = ProtocolTreeNode("dirty") 9 | dirtyNode["timestamp"] = "123456" 10 | dirtyNode["type"] = "groups" 11 | self.node.addChild(dirtyNode) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/protocolentities/test_ib.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_ib.protocolentities.ib import IbProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class IbProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = IbProtocolEntity 9 | self.node = ProtocolTreeNode("ib") 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_ib/protocolentities/test_offline_iq.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_ib.protocolentities.test_ib import IbProtocolEntityTest 2 | from yowsup.layers.protocol_ib.protocolentities.offline_ib import OfflineIbProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class OfflineIbProtocolEntityTest(IbProtocolEntityTest): 5 | def setUp(self): 6 | super(OfflineIbProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = OfflineIbProtocolEntity 8 | self.node.addChild(ProtocolTreeNode("offline", {"count": "5"})) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowIqProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from .iq_result import ResultIqProtocolEntity 3 | from .iq_ping import PingIqProtocolEntity 4 | from .iq_result_pong import PongResultIqProtocolEntity 5 | from .iq_error import ErrorIqProtocolEntity 6 | from .iq_push import PushIqProtocolEntity 7 | from .iq_props import PropsIqProtocolEntity 8 | from .iq_crypto import CryptoIqProtocolEntity 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_crypto.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | class CryptoIqProtocolEntity(IqProtocolEntity): 4 | def __init__(self): 5 | super(CryptoIqProtocolEntity, self).__init__("urn:xmpp:whatsapp:account", _type="get") 6 | 7 | def toProtocolTreeNode(self): 8 | node = super(CryptoIqProtocolEntity, self).toProtocolTreeNode() 9 | cryptoNode = ProtocolTreeNode("crypto", {"action": "create"}) 10 | googleNode = ProtocolTreeNode("google", data = "fe5cf90c511fb899781bbed754577098e460d048312c8b36c11c91ca4b49ca34".decode('hex')) 11 | cryptoNode.addChild(googleNode) 12 | node.addChild(cryptoNode) 13 | return node -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_ping.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .iq import IqProtocolEntity 3 | class PingIqProtocolEntity(IqProtocolEntity): 4 | 5 | ''' 6 | Receive 7 | 8 | 9 | Send 10 | 11 | 12 | ''' 13 | 14 | def __init__(self, _from = None, to = None, _id = None): 15 | super(PingIqProtocolEntity, self).__init__("urn:xmpp:ping" if _from else "w:p", _id = _id, _type = "get", _from = _from, to = to) 16 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_props.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | class PropsIqProtocolEntity(IqProtocolEntity): 4 | def __init__(self): 5 | super(PropsIqProtocolEntity, self).__init__("w", _type="get") 6 | 7 | def toProtocolTreeNode(self): 8 | node = super(PropsIqProtocolEntity, self).toProtocolTreeNode() 9 | node.addChild(ProtocolTreeNode("props")) 10 | return node -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_push.py: -------------------------------------------------------------------------------- 1 | from .iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | class PushIqProtocolEntity(IqProtocolEntity): 4 | def __init__(self): 5 | super(PushIqProtocolEntity, self).__init__("urn:xmpp:whatsapp:push", _type="get") 6 | 7 | def toProtocolTreeNode(self): 8 | node = super(PushIqProtocolEntity, self).toProtocolTreeNode() 9 | node.addChild(ProtocolTreeNode("config")) 10 | return node -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .iq import IqProtocolEntity 3 | class ResultIqProtocolEntity(IqProtocolEntity): 4 | 5 | ''' 6 | 7 | 8 | ''' 9 | 10 | def __init__(self, xmlns = None, _id = None, to = None, _from = None): 11 | super(ResultIqProtocolEntity, self).__init__(xmlns = xmlns, _id = _id, _type = "result", to = to, _from = _from) 12 | 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/iq_result_pong.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .iq_result import ResultIqProtocolEntity 3 | class PongResultIqProtocolEntity(ResultIqProtocolEntity): 4 | 5 | ''' 6 | 7 | 8 | ''' 9 | def __init__(self, to, _id = None): 10 | super(PongResultIqProtocolEntity, self).__init__("w:p", _id = _id, to = to) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/test_iq.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.iq import IqProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class IqProtocolEntityTest(unittest.TestCase, ProtocolEntityTest): 7 | def setUp(self): 8 | self.ProtocolEntity = IqProtocolEntity 9 | self.node = ProtocolTreeNode("iq", {"id": "test_id", "type": "get", "xmlns": "iq_xmlns"}, None, None) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/test_iq_error.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_iq.protocolentities import ErrorIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class ErrorIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(ErrorIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = ErrorIqProtocolEntity 9 | errorNode = ProtocolTreeNode("error", {"code": "123", "text": "abc"}) 10 | self.node.addChild(errorNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_iq/protocolentities/test_iq_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | class ResultIqProtocolEntityTest(IqProtocolEntityTest): 3 | def setUp(self): 4 | super(ResultIqProtocolEntityTest, self).setUp() 5 | self.node.setAttribute("type", "result") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowMediaProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .message_media import MediaMessageProtocolEntity 2 | from .message_media_downloadable import DownloadableMediaMessageProtocolEntity 3 | from .message_media_downloadable_image import ImageDownloadableMediaMessageProtocolEntity 4 | from .message_media_downloadable_audio import AudioDownloadableMediaMessageProtocolEntity 5 | from .message_media_downloadable_video import VideoDownloadableMediaMessageProtocolEntity 6 | from .message_media_downloadable_document import DocumentDownloadableMediaMessageProtocolEntity 7 | from .message_media_location import LocationMediaMessageProtocolEntity 8 | from .message_media_vcard import VCardMediaMessageProtocolEntity 9 | from .iq_requestupload import RequestUploadIqProtocolEntity 10 | from .iq_requestupload_result import ResultRequestUploadIqProtocolEntity 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_iq_requestupload.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import RequestUploadIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class RequestUploadIqProtocolEntityTest(IqProtocolEntityTest): 5 | def setUp(self): 6 | super(RequestUploadIqProtocolEntityTest, self).setUp() 7 | mediaNode = ProtocolTreeNode("encr_media", {"hash": "hash", "size": "1234", "orighash": "orighash", "type": "image"}) 8 | self.ProtocolEntity = RequestUploadIqProtocolEntity 9 | self.node.setAttribute("type", "set") 10 | self.node.addChild(mediaNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_iq_requestupload_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq_result import ResultIqProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import ResultRequestUploadIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class ResultRequestUploadIqProtocolEntityTest(ResultIqProtocolEntityTest): 5 | def setUp(self): 6 | super(ResultRequestUploadIqProtocolEntityTest, self).setUp() 7 | mediaNode = ProtocolTreeNode("encr_media", {"url": "url", "ip": "1.2.3.4"}) 8 | self.ProtocolEntity = ResultRequestUploadIqProtocolEntity 9 | self.node.addChild(mediaNode) 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.message_media import MediaMessageProtocolEntity 2 | from yowsup.layers.protocol_messages.protocolentities.test_message import MessageProtocolEntityTest 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class MediaMessageProtocolEntityTest(MessageProtocolEntityTest): 6 | def setUp(self): 7 | super(MediaMessageProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = MediaMessageProtocolEntity 9 | mediaNode = ProtocolTreeNode("media", {"type":"MEDIA_TYPE"}, None, None) 10 | self.node.addChild(mediaNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_downloadable_audio.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.message_media_downloadable_audio import AudioDownloadableMediaMessageProtocolEntity 2 | from yowsup.layers.protocol_media.protocolentities.test_message_media_downloadable import DownloadableMediaMessageProtocolEntityTest 3 | 4 | class AudioDownloadableMediaMessageProtocolEntityTest(DownloadableMediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(AudioDownloadableMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = AudioDownloadableMediaMessageProtocolEntity 8 | mediaNode = self.node.getChild("media") 9 | mediaNode.setAttribute("abitrate", "31") 10 | mediaNode.setAttribute("acodec", "aac") 11 | mediaNode.setAttribute("asampfreq", "22050") 12 | mediaNode.setAttribute("duration", "3") 13 | mediaNode.setAttribute("encoding", "raw") 14 | mediaNode.setAttribute("origin", "live") 15 | mediaNode.setAttribute("seconds", "3") 16 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_downloadable_image.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.message_media_downloadable_image import ImageDownloadableMediaMessageProtocolEntity 2 | from yowsup.layers.protocol_media.protocolentities.test_message_media_downloadable import DownloadableMediaMessageProtocolEntityTest 3 | 4 | class ImageDownloadableMediaMessageProtocolEntityTest(DownloadableMediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(ImageDownloadableMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = ImageDownloadableMediaMessageProtocolEntity 8 | mediaNode = self.node.getChild("media") 9 | mediaNode.setAttribute("encoding", "ENCODING") 10 | mediaNode.setAttribute("width", "1024") 11 | mediaNode.setAttribute("height", "768") 12 | mediaNode.setAttribute("caption", "caption") 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_location.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.test_message_media import MediaMessageProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import LocationMediaMessageProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class LocationMediaMessageProtocolEntityTest(MediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(LocationMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = LocationMediaMessageProtocolEntity 8 | mediaNode = self.node.getChild("media") 9 | mediaNode["type"] = "location" 10 | mediaNode["latitude"] = "52.52393" 11 | mediaNode["longitude"] = "13.41747" 12 | mediaNode["encoding"] = "raw" 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_media/protocolentities/test_message_media_vcard.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_media.protocolentities.test_message_media import MediaMessageProtocolEntityTest 2 | from yowsup.layers.protocol_media.protocolentities import VCardMediaMessageProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | class VCardMediaMessageProtocolEntityTest(MediaMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(VCardMediaMessageProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = VCardMediaMessageProtocolEntity 8 | vcardNode = ProtocolTreeNode("vcard", {"name":"abc"}, None, "VCARD_DATA") 9 | mediaNode = self.node.getChild("media") 10 | mediaNode["type"] = "vcard" 11 | mediaNode.addChild(vcardNode) 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowMessagesProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import TextMessageProtocolEntity 3 | class YowMessagesProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "message": (self.recvMessageStanza, self.sendMessageEntity) 7 | } 8 | super(YowMessagesProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Messages Layer" 12 | 13 | def sendMessageEntity(self, entity): 14 | if entity.getType() == "text": 15 | self.entityToLower(entity) 16 | 17 | ###recieved node handlers handlers 18 | def recvMessageStanza(self, node): 19 | if node.getAttributeValue("type") == "text": 20 | entity = TextMessageProtocolEntity.fromProtocolTreeNode(node) 21 | self.toUpper(entity) 22 | 23 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/proto/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/libs/yowsup/yowsup/yowsup/layers/protocol_messages/proto/__init__.py -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .message_text import TextMessageProtocolEntity 2 | from .message import MessageProtocolEntity 3 | from .message_text_broadcast import BroadcastTextMessage 4 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/protocolentities/test_message.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_messages.protocolentities.message import MessageProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class MessageProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = MessageProtocolEntity 9 | # ORDER_MATTERS for node.toString() to output return attribs in same order 10 | attribs = { 11 | "type": "message_type", 12 | "id": "message-id", 13 | "t": "12345", 14 | "offline": "0", 15 | "from": "from_jid", 16 | "notify": "notify_name" 17 | } 18 | self.node = ProtocolTreeNode("message", attribs) 19 | 20 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/protocolentities/test_message_text.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_messages.protocolentities.message_text import TextMessageProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_messages.protocolentities.test_message import MessageProtocolEntityTest 4 | 5 | class TextMessageProtocolEntityTest(MessageProtocolEntityTest): 6 | def setUp(self): 7 | super(TextMessageProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = TextMessageProtocolEntity 9 | bodyNode = ProtocolTreeNode("body", {}, None, "body_data") 10 | self.node.addChild(bodyNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_messages/protocolentities/test_message_text_broadcast.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_messages.protocolentities.test_message_text import TextMessageProtocolEntityTest 2 | from yowsup.layers.protocol_messages.protocolentities.message_text_broadcast import BroadcastTextMessage 3 | from yowsup.structs import ProtocolTreeNode 4 | class BroadcastTextMessageTest(TextMessageProtocolEntityTest): 5 | def setUp(self): 6 | super(BroadcastTextMessageTest, self).setUp() 7 | self.ProtocolEntity = BroadcastTextMessage 8 | broadcastNode = ProtocolTreeNode("broadcast") 9 | jids = ["jid1", "jid2"] 10 | toNodes = [ProtocolTreeNode("to", {"jid" : jid}) for jid in jids] 11 | broadcastNode.addChildren(toNodes) 12 | self.node.addChild(broadcastNode) 13 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowNotificationsProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .notification import NotificationProtocolEntity 2 | from .notification_picture import PictureNotificationProtocolEntity 3 | from .notification_picture_set import SetPictureNotificationProtocolEntity 4 | from .notification_picture_delete import DeletePictureNotificationProtocolEntity 5 | from .notification_status import StatusNotificationProtocolEntity 6 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/notification_picture.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .notification import NotificationProtocolEntity 3 | class PictureNotificationProtocolEntity(NotificationProtocolEntity): 4 | ''' 5 | 7 | 8 | ''' 9 | 10 | def __init__(self, _id, _from, status, timestamp, notify, offline, setJid, setId): 11 | super(PictureNotificationProtocolEntity, self).__init__("picture", _id, _from, timestamp, notify, offline) 12 | self.setData(setJid, setId) 13 | 14 | @staticmethod 15 | def fromProtocolTreeNode(node): 16 | entity = NotificationProtocolEntity.fromProtocolTreeNode(node) 17 | entity.__class__ = PictureNotificationProtocolEntity 18 | return entity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification import NotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class NotificationProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = NotificationProtocolEntity 9 | attribs = { 10 | "t": "12345", 11 | "from": "from_jid", 12 | "offline": "0", 13 | "type": "notif_type", 14 | "id": "message-id", 15 | "notify": "notify_name" 16 | } 17 | self.node = ProtocolTreeNode("notification", attribs) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_picture.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_picture import PictureNotificationProtocolEntity 2 | from yowsup.layers.protocol_notifications.protocolentities.test_notification import NotificationProtocolEntityTest 3 | 4 | class PictureNotificationProtocolEntityTest(NotificationProtocolEntityTest): 5 | def setUp(self): 6 | super(PictureNotificationProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = PictureNotificationProtocolEntity 8 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_picture_delete.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_picture_delete import DeletePictureNotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_notifications.protocolentities.test_notification_picture import PictureNotificationProtocolEntityTest 4 | 5 | class DeletePictureNotificationProtocolEntityTest(PictureNotificationProtocolEntityTest): 6 | def setUp(self): 7 | super(DeletePictureNotificationProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = DeletePictureNotificationProtocolEntity 9 | deleteNode = ProtocolTreeNode("delete", {"jid": "DELETE_JID"}, None, None) 10 | self.node.addChild(deleteNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_picture_set.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_picture_set import SetPictureNotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_notifications.protocolentities.test_notification_picture import PictureNotificationProtocolEntityTest 4 | 5 | class SetPictureNotificationProtocolEntityTest(PictureNotificationProtocolEntityTest): 6 | def setUp(self): 7 | super(SetPictureNotificationProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = SetPictureNotificationProtocolEntity 9 | setNode = ProtocolTreeNode("set", {"jid": "SET_JID", "id": "123"}, None, None) 10 | self.node.addChild(setNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_notifications/protocolentities/test_notification_status.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_notifications.protocolentities.notification_status import StatusNotificationProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.layers.protocol_notifications.protocolentities.test_notification import NotificationProtocolEntityTest 4 | 5 | class StatusNotificationProtocolEntityTest(NotificationProtocolEntityTest): 6 | def setUp(self): 7 | super(StatusNotificationProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = StatusNotificationProtocolEntity 9 | setNode = ProtocolTreeNode("set", {}, [], "status_data") 10 | self.node.addChild(setNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowPresenceProtocolLayer 2 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .presence import PresenceProtocolEntity 2 | from .presence_available import AvailablePresenceProtocolEntity 3 | from .presence_unavailable import UnavailablePresenceProtocolEntity 4 | from .presence_subscribe import SubscribePresenceProtocolEntity 5 | from .presence_unsubscribe import UnsubscribePresenceProtocolEntity 6 | from .iq_lastseen import LastseenIqProtocolEntity 7 | from .iq_lastseen_result import ResultLastseenIqProtocolEntity 8 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/iq_lastseen.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.iq import IqProtocolEntity 2 | from yowsup.structs.protocoltreenode import ProtocolTreeNode 3 | class LastseenIqProtocolEntity(IqProtocolEntity): 4 | XMLNS = "jabber:iq:last" 5 | def __init__(self, jid, _id = None): 6 | super(LastseenIqProtocolEntity, self).__init__(self.__class__.XMLNS, _type = "get", to = jid, _id = _id) 7 | 8 | @staticmethod 9 | def fromProtocolTreeNode(node): 10 | return LastseenIqProtocolEntity(node["to"]) 11 | 12 | def toProtocolTreeNode(self): 13 | node = super(LastseenIqProtocolEntity, self).toProtocolTreeNode() 14 | node.setAttribute("xmlns", self.__class__.XMLNS) 15 | node.addChild(ProtocolTreeNode("query")) 16 | return node 17 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/presence_available.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .presence import PresenceProtocolEntity 3 | class AvailablePresenceProtocolEntity(PresenceProtocolEntity): 4 | ''' 5 | 6 | response: 7 | 8 | 9 | 10 | ''' 11 | def __init__(self): 12 | super(AvailablePresenceProtocolEntity, self).__init__("available") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/presence_unavailable.py: -------------------------------------------------------------------------------- 1 | from yowsup.structs import ProtocolEntity, ProtocolTreeNode 2 | from .presence import PresenceProtocolEntity 3 | class UnavailablePresenceProtocolEntity(PresenceProtocolEntity): 4 | ''' 5 | 6 | response: 7 | 8 | 9 | ''' 10 | def __init__(self): 11 | super(UnavailablePresenceProtocolEntity, self).__init__("unavailable") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence import PresenceProtocolEntity 2 | from yowsup.structs import ProtocolTreeNode 3 | from yowsup.structs.protocolentity import ProtocolEntityTest 4 | import unittest 5 | 6 | class PresenceProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = PresenceProtocolEntity 9 | self.node = ProtocolTreeNode("presence", {"type": "presence_type", "name": "presence_name"}, None, None) 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_available.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_available import AvailablePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class AvailablePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(AvailablePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = AvailablePresenceProtocolEntity 8 | self.node.setAttribute("type", "available") 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_subscribe.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_subscribe import SubscribePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class SubscribePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(SubscribePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = SubscribePresenceProtocolEntity 8 | self.node.setAttribute("type", "subscribe") 9 | self.node.setAttribute("to", "subscribe_jid") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_unavailable.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_unavailable import UnavailablePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class UnavailablePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(UnavailablePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = UnavailablePresenceProtocolEntity 8 | self.node.setAttribute("type", "unavailable") 9 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_presence/protocolentities/test_presence_unsubscribe.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_presence.protocolentities.presence_unsubscribe import UnsubscribePresenceProtocolEntity 2 | from yowsup.layers.protocol_presence.protocolentities.test_presence import PresenceProtocolEntityTest 3 | 4 | class UnsubscribePresenceProtocolEntityTest(PresenceProtocolEntityTest): 5 | def setUp(self): 6 | super(UnsubscribePresenceProtocolEntityTest, self).setUp() 7 | self.ProtocolEntity = UnsubscribePresenceProtocolEntity 8 | self.node.setAttribute("type", "unsubscribe") 9 | self.node.setAttribute("to", "some_jid") -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_privacy/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowPrivacyProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_privacy/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import * 3 | class YowPrivacyProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "iq": (self.recvIq, self.sendIq) 7 | } 8 | super(YowPrivacyProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Privacy Layer" 12 | 13 | def sendIq(self, entity): 14 | if entity.getXmlns() == "jabber:iq:privacy": 15 | self.entityToLower(entity) 16 | 17 | def recvIq(self, node): 18 | pass 19 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_privacy/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .privacylist_iq import PrivacyListIqProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowProfilesProtocolLayer -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .iq_unregister import UnregisterIqProtocolEntity 2 | from .iq_status_set import SetStatusIqProtocolEntity 3 | from .iq_picture_get import GetPictureIqProtocolEntity 4 | from .iq_picture_get_result import ResultGetPictureIqProtocolEntity 5 | from .iq_pictures_list import ListPicturesIqProtocolEntity 6 | from .iq_picture_set import SetPictureIqProtocolEntity 7 | from .iq_privacy_set import SetPrivacyIqProtocolEntity 8 | from .iq_privacy_get import GetPrivacyIqProtocolEntity 9 | from .iq_privacy_result import ResultPrivacyIqProtocolEntity 10 | from .iq_picture_delete import DeletePictureIqProtocolEntity 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/iq_picture.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities import IqProtocolEntity 2 | class PictureIqProtocolEntity(IqProtocolEntity): 3 | ''' 4 | When receiving a profile picture: 5 | 6 | 7 | {{Binary bytes of the picture.}} 8 | 9 | 10 | ''' 11 | XMLNS = "w:profile:picture" 12 | 13 | def __init__(self, jid, _id = None, type = "get"): 14 | super(PictureIqProtocolEntity, self).__init__(self.__class__.XMLNS, _id = _id, _type=type, to = jid) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_privacy_get.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import GetPrivacyIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | entity = GetPrivacyIqProtocolEntity() 6 | 7 | class GetPrivacyIqProtocolEntityTest(IqProtocolEntityTest): 8 | def setUp(self): 9 | super(GetPrivacyIqProtocolEntityTest, self).setUp() 10 | self.ProtocolEntity = GetPrivacyIqProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_privacy_result.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import ResultPrivacyIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | entity = ResultPrivacyIqProtocolEntity({"profile":"all","last":"none","status":"contacts"}) 6 | 7 | class ResultPrivacyIqProtocolEntityTest(IqProtocolEntityTest): 8 | def setUp(self): 9 | super(ResultPrivacyIqProtocolEntityTest, self).setUp() 10 | self.ProtocolEntity = ResultPrivacyIqProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_privacy_set.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import SetPrivacyIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | entity = SetPrivacyIqProtocolEntity("all", ["profile","last","status"]) 6 | 7 | class SetPrivacyIqProtocolEntityTest(IqProtocolEntityTest): 8 | def setUp(self): 9 | super(SetPrivacyIqProtocolEntityTest, self).setUp() 10 | self.ProtocolEntity = SetPrivacyIqProtocolEntity 11 | self.node = entity.toProtocolTreeNode() 12 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_status_set.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import SetStatusIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class SetStatusIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(SetStatusIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = SetStatusIqProtocolEntity 9 | statusNode = ProtocolTreeNode("status", {}, [], "Hey there, I'm using WhatsApp") 10 | self.node.addChild(statusNode) 11 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_profiles/protocolentities/test_iq_unregister.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_iq.protocolentities.test_iq import IqProtocolEntityTest 2 | from yowsup.layers.protocol_profiles.protocolentities import UnregisterIqProtocolEntity 3 | from yowsup.structs import ProtocolTreeNode 4 | 5 | class UnregisterIqProtocolEntityTest(IqProtocolEntityTest): 6 | def setUp(self): 7 | super(UnregisterIqProtocolEntityTest, self).setUp() 8 | self.ProtocolEntity = UnregisterIqProtocolEntity 9 | self.node.addChild(ProtocolTreeNode("remove", {"xmlns": "urn:xmpp:whatsapp:account"})) -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_receipts/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowReceiptProtocolLayer 2 | 3 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_receipts/layer.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers import YowLayer, YowLayerEvent, YowProtocolLayer 2 | from .protocolentities import * 3 | class YowReceiptProtocolLayer(YowProtocolLayer): 4 | def __init__(self): 5 | handleMap = { 6 | "receipt": (self.recvReceiptNode, self.sendReceiptEntity) 7 | } 8 | super(YowReceiptProtocolLayer, self).__init__(handleMap) 9 | 10 | def __str__(self): 11 | return "Receipt Layer" 12 | 13 | def sendReceiptEntity(self, entity): 14 | self.entityToLower(entity) 15 | 16 | def recvReceiptNode(self, node): 17 | self.toUpper(IncomingReceiptProtocolEntity.fromProtocolTreeNode(node)) 18 | 19 | 20 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_receipts/protocolentities/__init__.py: -------------------------------------------------------------------------------- 1 | from .receipt import ReceiptProtocolEntity 2 | from .receipt_incoming import IncomingReceiptProtocolEntity 3 | from .receipt_outgoing import OutgoingReceiptProtocolEntity -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_receipts/protocolentities/test_receipt_incoming.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_receipts.protocolentities import IncomingReceiptProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | import time 5 | 6 | class IncomingReceiptProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 7 | def setUp(self): 8 | self.ProtocolEntity = IncomingReceiptProtocolEntity 9 | self.node = IncomingReceiptProtocolEntity("123", "sender", int(time.time())).toProtocolTreeNode() 10 | -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/protocol_receipts/protocolentities/test_receipt_outgoing.py: -------------------------------------------------------------------------------- 1 | from yowsup.layers.protocol_receipts.protocolentities import OutgoingReceiptProtocolEntity 2 | from yowsup.structs.protocolentity import ProtocolEntityTest 3 | import unittest 4 | 5 | class OutgoingReceiptProtocolEntityTest(ProtocolEntityTest, unittest.TestCase): 6 | def setUp(self): 7 | self.ProtocolEntity = OutgoingReceiptProtocolEntity 8 | self.node = OutgoingReceiptProtocolEntity("123", "target", "read").toProtocolTreeNode() -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/layers/stanzaregulator/__init__.py: -------------------------------------------------------------------------------- 1 | from .layer import YowStanzaRegulator -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/registration/__init__.py: -------------------------------------------------------------------------------- 1 | from .coderequest import WACodeRequest 2 | from .existsrequest import WAExistsRequest 3 | from .regrequest import WARegRequest -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/signals.py: -------------------------------------------------------------------------------- 1 | from blinker import signal 2 | 3 | ''' 4 | System signals, you probably should't use this 5 | ''' 6 | 7 | # Reply-type message or @tag () 8 | node_intercepted = signal('node_intercepted') -------------------------------------------------------------------------------- /libs/yowsup/yowsup/yowsup/structs/__init__.py: -------------------------------------------------------------------------------- 1 | from .protocolentity import ProtocolEntity 2 | from .protocoltreenode import ProtocolTreeNode -------------------------------------------------------------------------------- /modules/__init__.py: -------------------------------------------------------------------------------- 1 | # Add here the modules you want to enable here 2 | 3 | from modules.hihelp import hihelp 4 | from modules import pokedex 5 | from modules import poker 6 | from modules.poll import poll 7 | from modules.poll2 import poll2 8 | -------------------------------------------------------------------------------- /modules/hihelp/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/modules/hihelp/__init__.py -------------------------------------------------------------------------------- /modules/hihelp/hihelp.py: -------------------------------------------------------------------------------- 1 | from app.mac import mac, signals 2 | 3 | ''' 4 | Signals this module listents to: 5 | 1. When a message is received (signals.command_received) 6 | ========================================================== 7 | ''' 8 | @signals.command_received.connect 9 | def handle(message): 10 | if message.command == "hi": 11 | hi(message) 12 | elif message.command == "help": 13 | help(message) 14 | 15 | ''' 16 | Actual module code 17 | ========================================================== 18 | ''' 19 | def hi(message): 20 | who_name = message.who_name 21 | answer = "Hi " + who_name 22 | mac.send_message(answer, message.conversation) 23 | 24 | def help(message): 25 | answer = "*Bot called mac* \nWhatsapp framework made in Python \n*Version:* 1.0.0 \n*Status:* Beta \nhttps://github.com/danielcardeenas/whatsapp-framework" 26 | mac.send_message(answer, message.conversation) 27 | -------------------------------------------------------------------------------- /modules/pokedex/pykemon/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | __author__ = 'Paul Hallett' 5 | __email__ = 'hello@phalt.co' 6 | __version__ = '0.2.0' 7 | __copyright__ = 'Copyright Paul Hallett 2016' 8 | __license__ = 'BSD' 9 | 10 | from .api import get, V1Client # NOQA 11 | from .exceptions import ResourceNotFoundError # NOQA 12 | 13 | 14 | """ 15 | 16 | ======== 17 | Pykemon 18 | ======== 19 | 20 | A Python wrapper for PokeAPI (http://pokeapi.co) 21 | 22 | Usage: 23 | 24 | >>> import pykemon 25 | >>> pykemon.get(pokemon='bulbasaur') 26 | 27 | >>> pykemon.get(pokemon_id=151) 28 | 29 | 30 | """ 31 | -------------------------------------------------------------------------------- /modules/pokedex/pykemon/exceptions.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | 5 | class ResourceNotFoundError(Exception): 6 | " Raised when resource not found in API " 7 | pass 8 | -------------------------------------------------------------------------------- /modules/pokedex/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | simplejson 3 | beckett -------------------------------------------------------------------------------- /modules/poker/constants.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | class TexasStatus(Enum): 4 | PREFLOP = 1 5 | FLOP = 2 6 | TURN = 3 7 | RIVER = 4 8 | SHOWDOWN = 5 9 | 10 | class PlayerActions(Enum): 11 | CHECK = 1 12 | BET = 2 13 | FOLD = 3 -------------------------------------------------------------------------------- /modules/poker/db/poker.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/modules/poker/db/poker.db -------------------------------------------------------------------------------- /modules/poker/db/schema/data.sql: -------------------------------------------------------------------------------- 1 | -- Players 2 | insert into players values(1, "Leind", 20, "5218114140740"); 3 | insert into players values(2, "Lucas", 20, "5218116133161"); 4 | insert into players values(3, "Pepe", 20, "5218110112681"); 5 | insert into players values(4, "Rob", 20, "5218123869192"); 6 | insert into players values(5, "Art", 20, "5218181162093"); 7 | insert into players values(6, "Fab", 20, "5218110117106"); 8 | insert into players values(7, "Luis", 20, "18325673741"); 9 | insert into players values(8, "Aaron", 20, "5218116559100"); 10 | insert into players values(9, "Berni", 20, "5218116616897"); 11 | insert into players values(10, "Nayo", 20, "5218116635862"); 12 | insert into players values(11, "Casta", 20, "5218114901244"); 13 | insert into players values(12, "Chad", 20, "5218123198861"); 14 | insert into players values(13, "Cesar", 20, "5218113465239"); 15 | insert into players values(14, "Roli", 20, "5218119098536"); 16 | insert into players values(15, "Kof", 20, "5218111834751"); 17 | insert into players values(16, "Dany", 20, "5218120749543"); -------------------------------------------------------------------------------- /modules/poker/db/schema/schema.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE players ( 2 | id INTEGER PRIMARY KEY, 3 | name TEXT NOT NULL, 4 | money REAL NOT NULL, 5 | phone TEXT NOT NULL 6 | ); -------------------------------------------------------------------------------- /modules/poker/deuces/__init__.py: -------------------------------------------------------------------------------- 1 | from .card import Card 2 | from .deck import Deck 3 | from .evaluator import Evaluator 4 | -------------------------------------------------------------------------------- /modules/poker/requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danielcardeenas/whatsapp-framework/488d8b0bd49a83bff183fbe17c9d775948fce4da/modules/poker/requirements.txt -------------------------------------------------------------------------------- /modules/poll/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Poll module 3 | ---------------------------------------------------------------------------- 4 | 5 | Handles the parameters to create a poll 6 | Structure of the message: "!poll , <identifier (optional)>" 7 | ''' 8 | 9 | from app.mac import mac, signals 10 | from modules.poll.poll import WAPoll 11 | from app.utils import helper 12 | 13 | ''' 14 | Main funciton, all happens after this 15 | ''' 16 | @signals.message_received.connect 17 | def handle(message): 18 | if helper.is_command(message.text) and message.command.lower() == "poll": 19 | if message.predicate == "-h": 20 | show_help(message) 21 | else: 22 | WAPoll.handle_command(message) 23 | 24 | else: 25 | WAPoll.handle_vote(message) 26 | 27 | 28 | ''' 29 | Prints help (how to use example) 30 | ''' 31 | def show_help(message): 32 | answer = "*Poll*\n*Usage:* !poll [title], [voter]\n*Example:* !poll who is gay?, ✋\n*To finish poll:* !poll finish" 33 | mac.send_message(answer, message.conversation) -------------------------------------------------------------------------------- /modules/poll/voter.py: -------------------------------------------------------------------------------- 1 | from app.utils import helper 2 | 3 | class Voter(object): 4 | def __init__(self, message): 5 | self.who = message.who 6 | self.conversation = message.conversation 7 | self.who_name = message.who_name -------------------------------------------------------------------------------- /modules/poll2/__init__.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Poll2 module 3 | ---------------------------------------------------------------------------- 4 | ''' 5 | 6 | from app.mac import mac, signals 7 | from modules.poll2 import poll2 8 | from app.utils import helper 9 | 10 | ''' 11 | Main funciton, all happens after this 12 | ''' 13 | @signals.message_received.connect 14 | def handle(message): 15 | if helper.is_command(message.text) and message.command.lower() == "poll2": 16 | if message.predicate == "-h": 17 | show_help(message) 18 | else: 19 | poll2.handle_command(message) 20 | else: 21 | poll2.handle_vote(message) 22 | 23 | 24 | ''' 25 | Prints help (how to use example) 26 | ''' 27 | def show_help(message): 28 | answer = "*Poll2*\n*Usage:* !poll2 [title], [options...]\n*Example:* !poll who is the gayest?, Lucas, Berni, Dany \n*To finish poll:* !poll2 finish" 29 | mac.send_message(answer, message.conversation) -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | until sudo python3 run.py; do 2 | echo "Whatsapp bot crashed with code $?. Respawning.." >&2 3 | sleep 1 4 | done --------------------------------------------------------------------------------