{"id":15147009,"url":"https://github.com/mrusme/pushover-to-xmpp","last_synced_at":"2025-08-29T16:32:25.859Z","repository":{"id":75669264,"uuid":"562604408","full_name":"mrusme/pushover-to-xmpp","owner":"mrusme","description":"Tiny Pushover to XMPP bridge written in Go","archived":false,"fork":false,"pushed_at":"2024-12-11T23:50:19.000Z","size":34,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-18T21:22:09.520Z","etag":null,"topics":["bridge","go","golang","hacky","lightweight","pushover","pushover-api","pushover-notifications","tiny","xmpp","xmpp-bot","xmpp-client"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrusme.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://github.com/mrusme#support"]}},"created_at":"2022-11-06T21:01:15.000Z","updated_at":"2024-06-15T17:09:15.000Z","dependencies_parsed_at":"2024-05-02T07:56:06.190Z","dependency_job_id":"776bb597-6a78-4e71-83e7-2efcfdf15a9c","html_url":"https://github.com/mrusme/pushover-to-xmpp","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fpushover-to-xmpp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fpushover-to-xmpp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fpushover-to-xmpp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrusme%2Fpushover-to-xmpp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrusme","download_url":"https://codeload.github.com/mrusme/pushover-to-xmpp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231397755,"owners_count":18370770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bridge","go","golang","hacky","lightweight","pushover","pushover-api","pushover-notifications","tiny","xmpp","xmpp-bot","xmpp-client"],"created_at":"2024-09-26T12:21:23.967Z","updated_at":"2025-08-29T16:32:25.821Z","avatar_url":"https://github.com/mrusme.png","language":"Go","funding_links":["https://github.com/mrusme#support"],"categories":[],"sub_categories":[],"readme":"Pushover to XMPP\n----------------\n\n---\n\n## ARCHIVED\n\nI migrated from Pushover to [Overpush](https://github.com/mrusme/overpush),\nhence this project is no longer maintained.\n\n---\n\nThis repository contains a \u003c500 LOC [Pushover](https://pushover.net) to\n[XMPP](https://xmpp.org) *bridge* that uses Pushover's [Open Client\nAPI](https://pushover.net/api/client) to get notified about new Pushover\nnotifications and forwards them to an XMPP account, using\n[go-xmpp](https://github.com/mattn/go-xmpp).\n\n## Background\n\nThe reason for building this was my switch over from\n[/e/OS](https://e.foundation/e-os/) to [GrapheneOS](https://grapheneos.org)\n(read more about that [here](https://xn--gckvb8fzb.com/phone/)) and\nhence the lack of a Pushover client that would function [without\nGSF/GCM/FCM](https://grapheneos.org/faq#notifications). Unfortunately the \n[official Pushover \nAndroid](https://play.google.com/store/apps/details?id=net.superblock.pushover) \napp depends on the Google Service Framework and implements no \nwebsocket-driven fallback on its own. Hence, on Graphene it refuses to start.\n\nSince I was already using\n[Conversations](https://f-droid.org/en/packages/eu.siacs.conversations/), an\nXMPP client that works without GSF/GCM/FCM, the easiest solution for continuing\nto retrieve Pushover notifications on Android was to simply forward them to my\nXMPP server.\n\nThis *quick and (very) dirty* Go service does exactly that.\n\n\n## Build\n\n```sh\ngo build .\n```\n\nThe binary is named `pushover-to-xmpp`.\n\n\n## Configure\n\nFor the sake of simplicity I added a `login.sh` script, which basically does\nwhat the [Pushover API documentation](https://pushover.net/api/client) tells\nunder *User Login* and *Device Registration* in an automated fashion. The script\ndepends on `curl` and `jq` to be available. You can run it as following:\n\n```sh\n./login.sh \u003cpushover e-mail\u003e \u003cpushover password\u003e \u003ctwo factor code\u003e\n```\n\nThe script does not implement login without 2FA, because you **should** use 2FA.\n\nThe script will output a Device ID and a secret. Keep those.\n\nIf you don't trust the script, just perform the `curl` requests mentioned in the\ndocumentation yourself. You don't have to do this before every start, it's only\nrequired once or in case you delete the device or the secret is invalidated.\n\n\n## Run\n\nThe bridge requires a dedicated XMPP account, either on your own server or a\ndifferent one that is permitted to S2S with yours. You also have to make sure\nupfront that the account is able to communicate with the target account. \n`pushover-to-xmpp` won't send or accept presence requests on its own, so make\nsure to pre-configure the account the way you'd need it.\n\nYou can run the bridge by exporting its required ENV variables and running the\n`pushover-to-xmpp` binary:\n\n```sh\nexport PTX_DEVICE_ID='\u003cpushover device id\u003e' \\\n       PTX_SECRET='\u003cpushover secret\u003e' \\\n       PTX_XMPP_SERVER='your-xmpp.org:5222' \\\n       PTX_XMPP_USER='pushover@your-xmpp.org' \\ \n       PTX_XMPP_PASSWORD='password' \\\n       PTX_XMPP_TLS=true \\\n       PTX_XMPP_TARGET='user@your-xmpp.org'\n```\n\nThe `PTX_XMPP_TARGET` is the target user that the bridge should forward Pushover\nnotifications to.\n\nIt's best to run the bridge via e.g. `supervisord`, in order to make\nsure it keeps running and, in case it won't, you're being notified about that.\n\nFor that purpose create a dedicated user (e.g. `ptx`), download and unpack [one \nof the binary releases](https://github.com/mrusme/pushover-to-xmpp/releases) \nand add something along these lines to your `/etc/supervisord.conf` (or\n`/usr/local/etc/supervisord.conf`):\n\n```conf\n[program:pushover-to-xmpp]\ncommand=/home/ptx/pushover-to-xmpp\nnumprocs=1\nautostart=true\nstartsecs=5\nstartretries=3\nautorestart=true\nuser=ptx\ndirectory=/home/ptx\nenvironment=PTX_DEVICE_ID=\"...\",PTX_SECRET=\"...\",PTX_XMPP_SERVER=\"...\",...\n```\n\n(`environment` should contain the same ENVs as listed above, separated by comma,\nwith each key's value in quotes)\n\nWhenever the bridge starts, the target user will receive a *\"Hello World\"*\nmessage to know that the bridge was just (re-?)started.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrusme%2Fpushover-to-xmpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrusme%2Fpushover-to-xmpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrusme%2Fpushover-to-xmpp/lists"}