Git Product home page Git Product logo

power-message's Introduction

Power Message

What the !#*? is this?

Power Message is a simple two part program that allows you to safely control your iMessage account with a REST API. This program assumes you have a Message enabled Apple device and a phone number you'd like to text (that is not the phone number connected to the iMessage account)

The project goal is to break the blue text free! Apple does not provide any API for thier messaging service, and is not likely to happen soon (if ever).

So we propose a simple, owner controller, safe and easy way for a user to extend the capabilies of thier Apple computer and access their messages from anywhere in the work!

It is important to note that we are not reverse engineering the iMessage API, we essentially provide Mac owners a convinent and secure way to remotely access thier computer and programmatically interact with iMessage.

Sounds cool, 😎 what can it do?

This beta supports a hanful of functionality:

  1. Create/Read/Update/Delete user managment
  2. JWT powered access control
  3. Python client that can programatically access the API
  4. realtime websocket message relaying from Apple device to secure server
  5. ** Statistical analysis of emojis, and average response times
  6. ** Websocket connection to subscriber to incomming message in realtime

** means the core functionality is implemented but not documented.

πŸš΄β€β™€οΈ Get Going

First we start our server. This server will control our iMessage client, it allows us to send and recieve iMessages via a simple REST api.

In this functional demo - both the server and client will be on the same machine, but if your interested in running the server in the cloud so you can access it from anywhere in the world 🌎 please shoot me an email!

First clone the repo - it contains the pre-compiled apps!

git clone https://github.com/drbh/power-message.git
cd power-message

Your gonna need to run 2 terminal windows and execute the following apps

Relay and REST server

In the first terminal

./relay-server

Next we have to turn on our client. This client sends and recieves all of your iMessages. The client looks for the running server and makes a secure websocket connection via openssl generated 509 cert.

Note: you will have to grant Full Disk Access to the terminal app since Apple has impelented a new security system that locks down Apple services like Mail, Safari and Messages. If you do not grant the terminal access. power-message will not have permission to read the Messsage database - and the app will not work

Message Client

In the second terminal

./message-client

πŸ‘¨β€πŸš€ Sending Messages

An example username and password are hardcoded in the demo and you must login with these credentials to get a vaild JWT. We use JWT's to secure the REST api.

pmc = PowerMessageClient(
    host = "http://localhost:8080/", 
    username = "power-message-user", 
    password = "super-secret-password"
)

Next we'll check if there are any existing users (since this is our first time, there will be no user so well need to add one!)

pmc.get_all_users()
# {u'rows': []}

Lets add our own phone number IMPORTANT THAT THIS IS NOT LINKED TO THE IMESSAGE ACCOUNT THAT YOUR COMPUTER IS SIGNED INTO.

In my case - my laptop is logged into my @icloud account, and I added a user with my cellphone number (which is not associated with my icloud account).

pmc.add_new_user({
    "name": "David Holtz",
    # "number": "+12345678910"
    "number": ". . . YOUR PHONE NUMBER INCLUDING COUNTRY CODE (eg +1). . .",
    "email": "[email protected]",
    "profileurl": "",
    "instagram": "",
    "facebook": "",
    "linkedin": "",
    "firstname": "david",
    "lastname": "holtz",
})

We've succesfully added a new user, when interacting with the REST api we do not send message to RAW phone numbers. We add a user, then send messages to that user.

In order to get the user id, we'll need to ask for a list of all of the existing users in power-message

pmc.get_all_users()
# {u'rows': [{u'CreatedAt': u'2019-10-28T21:20:28.747819-04:00',
#    u'DeletedAt': None,
#    u'ID': 1,
#    u'UpdatedAt': u'2019-10-28T21:20:28.747819-04:00',
#    u'email': u'[email protected]',
#    u'facebook': u'',
#    u'firstname': u'david',
#    u'instagram': u'',
#    u'lastname': u'holtz',
#    u'linkedin': u'',
#    u'name': u'David Holtz',
#    u'number': u'+12345678910',
#    u'profileurl': u''}]}

We can see that the user we just made has an ID of 1. We'll use this to send that user a message!

pmc.send_message("1", "Send a iMessage via REST")

Logo

and then on the phone (whos phone number we set above)

Logo

πŸŽ‰ yay, sending iMessages over REST is easy!

πŸ“Notes

keys

Please generate your own keys!

The keys provided in the keys are for demonstration purposes only! I suggest using openssl to generate new keys - even for your demo app just to be secure.

compilation

The two included libraries are binaries combiled for a MacBookPro

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.5
BuildVersion:	18F132

OSX will always be the build target (since its the only hardware that can connect to Apple's Messages service.

source code and the future

As of now this project is closed source but the binaries are freely available. In this inital release only the core functionality is accessible via the pre compiled binary - but I plan on adding some declaritive config files. This way people can easily deploy their relay servers in a cloud and use simple CLI tools to setup all the configurations.

Also - I'm not exactly sure whats next. Depending on the issues and responses from this inital release the future of the program will be based on what features help the maximum amount of users.

power-message's People

Contributors

drbh avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.