1
0
mirror of https://github.com/kha7iq/pingme.git synced 2025-05-16 06:40:12 -07:00

Compare commits

..

No commits in common. "master" and "v0.2.4" have entirely different histories.

20 changed files with 252 additions and 1111 deletions

View File

@ -11,13 +11,13 @@ pkgbase = pingme-bin
provides = ${_PKGNAME}
conflicts = ${_PKGNAME}
source_x86_64 = ${_PKGNAME}_${pkgver}_linux_x86_64.tar.gz::https://github.com/kha7iq/${_PKGNAME}/releases/download/v${pkgver}/${_PKGNAME}_linux_x86_64.tar.gz")
source_x86_64 = ${_PKGNAME}_${PKGVER}_linux_x86_64.tar.gz::https://github.com/kha7iq/${_PKGNAME}/releases/download/v${PKGVER}/${_PKGNAME}_linux_x86_64.tar.gz")
sha256sums_x86_64 = (${SHA256SUM_X86})
source_i686 = ${_PKGNAME}_${pkgver}_linux_i386.tar.gz::https://github.com/kha7iq/${_PKGNAME}/releases/download/v${pkgver}/${_PKGNAME}_linux_i386.tar.gz")
source_i686 = ${_PKGNAME}_${PKGVER}_linux_i386.tar.gz::https://github.com/kha7iq/${_PKGNAME}/releases/download/v${PKGVER}/${_PKGNAME}_linux_i386.tar.gz")
sha256sums_i686 = (${SHA256SUM_i686})
source_aarch64 = ${_PKGNAME}_${pkgver}_linux_arm64.tar.gz::https://github.com/kha7iq/${_PKGNAME}/releases/download/v${pkgver}/${_PKGNAME}_linux_arm64.tar.gz")
source_aarch64 = ${_PKGNAME}_${PKGVER}_linux_arm64.tar.gz::https://github.com/kha7iq/${_PKGNAME}/releases/download/v${PKGVER}/${_PKGNAME}_linux_arm64.tar.gz")
sha256sums_aarch64 = (${SHA256SUM_AARCH64})
pkgname = pingme-bin

View File

@ -5,7 +5,7 @@ set -e
WD=$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)
PKGNAME=$(basename $WD)
repo="kha7iq/pingme"
export _PKGNAME="${PKGNAME%-bin}"
ROOT=${WD%/.github/aur/$PKGNAME}
@ -14,9 +14,8 @@ exec 100>$LOCKFILE || exit 0
flock -n 100 || exit 0
trap "rm -f $LOCKFILE" EXIT
export PKGVER=$(curl -s https://api.github.com/repos/$repo/releases/latest | grep -o '"tag_name": "v[^"]*' | cut -d'"' -f4 | sed 's/^v//')
echo "Publishing to AUR as version ${PKGVER}"
export VERSION=$1
echo "Publishing to AUR as version ${VERSION}"
cd $WD
@ -37,6 +36,8 @@ git clone aur@aur.archlinux.org:$PKGNAME $GITDIR 2>&1
CURRENT_PKGVER=$(cat $GITDIR/.SRCINFO | grep pkgver | awk '{ print $3 }')
CURRENT_PKGREL=$(cat $GITDIR/.SRCINFO | grep pkgrel | awk '{ print $3 }')
export PKGVER=${VERSION/-/}
if [[ "${CURRENT_PKGVER}" == "${PKGVER}" ]]; then
export PKGREL=$((CURRENT_PKGREL+1))
else
@ -53,7 +54,7 @@ envsubst '$PKGVER $PKGREL $_PKGNAME $SHA256SUM_X86 $SHA256SUM_i686 $SHA256SUM_AA
envsubst '$PKGVER $PKGREL $SHA256SUM_X86 $SHA256SUM_i686 $SHA256SUM_AARCH64' < PKGBUILD.template > $GITDIR/PKGBUILD
cd $GITDIR
git config user.name "kha7iq"
git config user.name "GoReleaser"
git config user.email "a.khaliq@outlook.my"
git add -A
if [ -z "$(git status --porcelain)" ]; then

View File

@ -8,6 +8,6 @@ pkgbase = pingme
arch = aarch64
license = MIT
makedepends = go
source = pingme-${pkgver}.tar.gz::https://github.com/kha7iq/${pkgname}/archive/v${pkgver}.tar.gz
source = pingme-${PKGVER}.tar.gz::https://github.com/kha7iq/pingme/archive/v{PKGVER}.tar.gz
pkgname = pingme

View File

@ -18,7 +18,7 @@ sha256sums=(
build() {
cd "${pkgname}-${pkgver}"
export CGO_LDFLAGS="$LDFLAGS"
go build -ldflags "-linkmode=external -s -w -X main.Version=${pkgver}" -o ${pkgname} .
go build -ldflags "-linkmode=external -s -w -X main.version=${pkgver}" -o ${pkgname} .
}
package() {

View File

@ -5,17 +5,14 @@ set -e
WD=$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)
PKGNAME=$(basename $WD)
ROOT=${WD%/.github/aur/$PKGNAME}
repo="kha7iq/pingme"
LOCKFILE=/tmp/aur-$PKGNAME.lock
exec 100>$LOCKFILE || exit 0
flock -n 100 || exit 0
trap "rm -f $LOCKFILE" EXIT
export PKGVER=$(curl -s https://api.github.com/repos/$repo/releases/latest | grep -o '"tag_name": "v[^"]*' | cut -d'"' -f4 | sed 's/^v//')
echo "Publishing to AUR as version ${PKGVER}"
export VERSION=$1
echo "Publishing to AUR as version ${VERSION}"
cd $WD
@ -36,6 +33,7 @@ git clone aur@aur.archlinux.org:$PKGNAME $GITDIR 2>&1
CURRENT_PKGVER=$(cat $GITDIR/.SRCINFO | grep pkgver | awk '{ print $3 }')
CURRENT_PKGREL=$(cat $GITDIR/.SRCINFO | grep pkgrel | awk '{ print $3 }')
export PKGVER=${VERSION/-/}
if [[ "${CURRENT_PKGVER}" == "${PKGVER}" ]]; then
export PKGREL=$((CURRENT_PKGREL+1))
@ -49,8 +47,7 @@ envsubst '$PKGVER $PKGREL $SHA256SUM' < .SRCINFO.template > $GITDIR/.SRCINFO
envsubst '$PKGVER $PKGREL $SHA256SUM' < PKGBUILD.template > $GITDIR/PKGBUILD
cd $GITDIR
git config user.name "kha7iq"
git config user.name "GoReleaser"
git config user.email "a.khaliq@outlook.my"
git add -A
if [ -z "$(git status --porcelain)" ]; then

View File

@ -2,6 +2,10 @@ name: build
on:
push:
# branches:
# - 'master'
# paths-ignore:
# - '**.md'
tags:
- 'v0.[0-9]+.[0-9]'
@ -11,39 +15,55 @@ jobs:
env:
DOCKER_CLI_EXPERIMENTAL: "enabled"
steps:
- name: Checkout
uses: actions/checkout@v4
-
name: Checkout
uses: actions/checkout@v2.3.4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v4
-
name: Set up Go
uses: actions/setup-go@v2
with:
go-version: '>=1.20.0'
- name: Docker login GHCR
go-version: '1.16'
-
name: Cache Go modules
uses: actions/cache@v2.1.5
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
-
name: Diff
run: git diff
-
name: Docker login GHCR
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker Login DockerHub
-
name: Docker Login DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Release PingMe
uses: goreleaser/goreleaser-action@v3
-
name: Release PingMe
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --clean
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
AUR_SSH_PRIVATE_KEY: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
- name: Notify on failure
-
name: Notify on failure
uses: kha7iq/pingme-action@v1
if: failure()
env:
@ -54,7 +74,8 @@ jobs:
with:
service: telegram
- name: Notify on success
-
name: Notify on success
uses: kha7iq/pingme-action@v1
if: success()
env:

14
.github/workflows/pull_request.yml vendored Normal file
View File

@ -0,0 +1,14 @@
on: pull_request
jobs:
lint-code:
runs-on: ubuntu-latest
name: Perform Checks
steps:
- name: Checkout
uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.29

View File

@ -12,15 +12,10 @@ builds:
- darwin
- windows
goarch:
- "386"
- 386
- amd64
- arm
- arm64
goarm:
- "7"
ignore:
- goos: windows
goarch: arm64
mod_timestamp: '{{ .CommitTimestamp }}'
flags:
- -trimpath
@ -35,21 +30,19 @@ changelog:
exclude: ['^docs:', '^test:', 'Merge pull request', 'Merge branch', 'go mod tidy']
archives:
- name_template: >-
{{ .ProjectName }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
- name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
replacements:
darwin: Darwin
linux: Linux
windows: Windows
386: i386
amd64: x86_64
format_overrides:
- goos: windows
format: zip
files:
- README.md
- LICENSE.md
brews:
- repository:
- tap:
owner: kha7iq
name: homebrew-tap
folder: Formula
@ -63,7 +56,6 @@ brews:
nfpms:
- file_name_template: '{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
maintainer: 'Abdul Khaliq <a.khaliq@outlook.my>'
homepage: pingme.lmno.pk
description: PingMe is a CLI tool which provides the ability to send messages or alerts to multiple messaging platforms.
license: MIT
@ -73,11 +65,21 @@ nfpms:
dependencies:
- git
scoops:
- repository:
# snapcrafts:
# - name_template: '{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
# summary: PingMe is a CLI tool which provides the ability to send messages
# description: |
# PingMe is a CLI tool which provides the ability to send messages
# or alerts to multiple messaging platforms.
# grade: stable
# confinement: strict
# publish: false
scoop:
url_template: "https://github.com/kha7iq/pingme/releases/download/{{ .Tag }}/{{ .ArtifactName }}"
bucket:
owner: kha7iq
name: scoop-bucket
url_template: "https://github.com/kha7iq/pingme/releases/download/{{ .Tag }}/{{ .ArtifactName }}"
homepage: https://pingme.lmno.pk
description: PingMe is a CLI tool which provides the ability to send messages or alerts to multiple messaging platforms.
license: MIT
@ -98,3 +100,16 @@ dockers:
- "--label=org.opencontainers.image.version={{.Version}}"
- "--label=org.opencontainers.image.source={{.GitURL}}"
- "--platform=linux/amd64"
publishers:
- name: aur pingme binary
env:
- AUR_SSH_PRIVATE_KEY={{ .Env.AUR_SSH_PRIVATE_KEY }}
cmd: |
.github/aur/pingme-bin/publish.sh {{ .Version }}
- name: aur pingme sources
env:
- AUR_SSH_PRIVATE_KEY={{ .Env.AUR_SSH_PRIVATE_KEY }}
cmd: |
.github/aur/pingme/publish.sh {{ .Version }}

View File

@ -12,6 +12,8 @@
<img alt="Release" src="https://img.shields.io/github/v/release/kha7iq/pingme">
<a href="https://goreportcard.com/report/github.com/kha7iq/pingme">
<img alt="Go Report Card" src="https://goreportcard.com/badge/github.com/kha7iq/pingme">
<a href="#">
<img alt="Build" src="https://img.shields.io/github/workflow/status/kha7iq/pingme/goreleaser">
<a href="https://github.com/kha7iq/pingme/issues">
<img alt="GitHub issues" src="https://img.shields.io/github/issues/kha7iq/pingme?style=flat-square&logo=github&logoColor=white">
<a href="https://github.com/kha7iq/pingme/blob/master/LICENSE.md">
@ -29,6 +31,7 @@
<a href="#github-action">Github Action</a>
<a href="#configuration">Configuration</a>
<a href="#contributing">Contributing</a>
<a href="#show-your-support">Show Your Support</a>
</p>
---
@ -74,19 +77,6 @@ platforms.
brew install kha7iq/tap/pingme
```
## Shell Script
By default pingme is going to be installed at `/usr/bin/` sudo is requried for this operation.
If you would like to provide a custom install path you can do so as input to script. i.e `./install.sh $HOME/bin`
```bash
curl -s https://raw.githubusercontent.com/kha7iq/pingme/master/install.sh | sudo sh
```
or
```bash
curl -sL https://bit.ly/installpm | sudo sh
```
## Linux
* AUR
@ -99,20 +89,15 @@ yay -S pingme-bin
```
## Manual
* Binary
```bash
# Chose desired version, architecture & target os
export PINGME_VERSION="0.2.6"
export ARCH="x86_64"
export OS="Linux"
wget -q https://github.com/kha7iq/pingme/releases/download/v${PINGME_VERSION}/pingme_${OS}_${ARCH}.tar.gz && \
tar -xf pingme_${OS}_${ARCH}.tar.gz && \
export PINGME_VERSION="0.2.3"
wget -q https://github.com/kha7iq/pingme/releases/download/v${PINGME_VERSION}/pingme_Linux_x86_64.tar.gz && \
tar -xf pingme_Linux_x86_64.tar.gz && \
chmod +x pingme && \
sudo mv pingme /usr/local/bin/pingme
```
### Windows
```powershell
@ -215,6 +200,10 @@ Contributions, issues and feature requests are welcome!<br/>Feel free to check
[issues page](https://github.com/kha7iq/pingme/issues). You can also take a look
at the [contributing guide](https://github.com/kha7iq/pingme/blob/master/CONTRIBUTING.md).
## Show your support
Give a ⭐️ if you like this project!
## Acknowledgments
This project is based on amazing library [Notify](https://github.com/nikoksr/notify)
This project is based on amazing library [Notify](https://github.com/nikoksr/notify)

View File

@ -54,7 +54,6 @@ platforms.
- *Line*
- *Mastodon*
- *Mattermost*
- *Matrix*
- *Microsoft Teams*
- *Pushbullet*
- *Pushover*

View File

@ -6,6 +6,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css">
<link
rel="stylesheet"
href="//cdn.jsdelivr.net/npm/docsify-darklight-theme@latest/dist/style.min.css"
@ -18,31 +19,11 @@
<script>
window.$docsify = {
homepage: 'home.md',
siteFont : 'Source Sans Pro',
defaultTheme : 'light | dark',
codeFontFamily : 'monospace',
logo: '/_media/logo.png',
loadSidebar: true,
subMaxLevel: 2,
name: 'PingMe',
repo: 'https://github.com/kha7iq/pingme',
darklightTheme: {
siteFont : 'PT Sans',
defaultTheme : 'dark | light',
codeFontFamily : 'Roboto Mono, Monaco, courier, monospace',
bodyFontSize : '16px',
dark: {
accent: '#ffa500',
background: '#282C34',
codeTextColor : '#b4b4b4',
codeBackgroundColor : '#353A44',
coverBackground : '#161B22'
},
light: {
accent: '#008080',
coverBackground : '#f0f0f0'
}
}
repo: 'https://github.com/kha7iq/pingme'
}
</script>
<!-- Docsify v4 -->
@ -51,7 +32,5 @@
src="//cdn.jsdelivr.net/npm/docsify-darklight-theme@latest/dist/index.min.js"
type="text/javascript">
</script>
<script src="//unpkg.com/prismjs/components/prism-bash.min.js"></script>
<script src="//unpkg.com/prismjs/components/prism-yaml.min.js "></script>
</body>
</html>

View File

@ -6,18 +6,6 @@
brew install kha7iq/tap/pingme
```
## Shell Script
By default pingme is going to be installed at `/usr/bin/` sudo is requried for this operation.
If you would like to provide a custom install path you can do so as input to script. i.e `./install.sh $HOME/bin`
```bash
curl -s https://raw.githubusercontent.com/kha7iq/pingme/master/install.sh | sudo sh
```
or
```bash
curl -sL https://bit.ly/installpm | sudo sh
```
## Linux
* AUR
@ -25,18 +13,20 @@ curl -sL https://bit.ly/installpm | sudo sh
yay -S pingme-bin
```
## Manual
* Binary
```bash
# Chose desired version, architecture & target os
export PINGME_VERSION="0.2.4"
export ARCH="x86_64"
export OS="Linux"
wget -q https://github.com/kha7iq/pingme/releases/download/v${PINGME_VERSION}/pingme_${OS}_${ARCH}.tar.gz && \
tar -xf pingme_${OS}_${ARCH}.tar.gz && \
chmod +x pingme && \
wget -q https://github.com/kha7iq/pingme/releases/download/v0.2.3/pingme_Linux_x86_64.tar.gz
tar -xf pingme_Linux_x86_64.tar.gz
chmod +x pingme
sudo mv pingme /usr/local/bin/pingme
```
## Go Get
```bash
go get -u github.com/kha7iq/pingme
```
## Windows
```powershell

View File

@ -1,8 +1,8 @@
# Configuration
All the flags have corresponding environment variables associated with them. You
All the flags have corresponding environment variables assosiated with it. You
can either provide the value with flags or export to a variable. You can view
the corresponding variable with `--help` flag.
the corresponding variable to each with --help flag.
*Flags* take precedence over *variables*
@ -85,8 +85,7 @@ jobs:
- name: Ping me On
uses: kha7iq/pingme-action@v1
env:
GOTIFY_TOKEN: ${{ secrets.GOTIFY_TOKEN }}
GOTIFY_URL: "example.com"
GOTIFY_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
GOTIFY_TITLE: 'Reference: ${{ github.ref }}'
GOTIFY_MESSAGE: 'Event is triggered by ${{ github.event_name }}'
@ -248,6 +247,7 @@ jobs:
MATTERMOST_TOKEN: ${{ secrets.MATTERMOST_TOKEN }}
MATTERMOST_SERVER_URL: ${{ secrets.MATTERMOST_SERVER_URL }}
MATTERMOST_CHANNELS: ${{ secrets.MATTERMOST_CHANNELS }}
MATTERMOST_CHANNELS: ${{ secrets.MATTERMOST_CHANNELS }}
MATTERMOST_TITLE: 'Reference: ${{ github.ref }}'
MATTERMOST_MESSAGE: 'Event is triggered by ${{ github.event_name }}'
with:
@ -420,7 +420,7 @@ jobs:
pingme pushbullet \
--sms true \
--token "abcdefg" \
-d "android" \
-d "adnroid" \
--msg "some message" \
--number "00123456789"
```
@ -428,7 +428,7 @@ pingme pushbullet \
- Push notification
```bash
pingme pushbullet --token "abcdefg" -d "android" --msg "some message"
pingme pushbullet --token "abcdefg" -d "adnroid" --msg "some message"
```
- GitHub Action
@ -806,72 +806,3 @@ jobs:
| TEXTMAGIC_TITLE | "" |
| TEXTMAGIC_MESSAGE | "" |
| TEXTMAGIC_RECEIVER | "" |
## Matrix
Matrix uses either username and password, or an access token for authentication. Tokens will be used first, if not
present, username and password will be used. Similarly for --room, if not present, room will be determined using roomId
and domain.
```bash
pingme matrix \
--username 'matrix username' \
--password 'password' \
--token 'access token' \
--url 'https://matrix-client.matrix.org' \
--serverName 'server1.matrix.org' \
--room 'LRovrjPJaRChcTKgoK:matrix.org' \
--roomId 'LRovrjPJaRChcTKgoK' \
--domain 'matrix.org' \
--msg 'some message' \
--autoJoin
```
- GitHub Action
```yaml
on: [push]
jobs:
pingme-job:
runs-on: ubuntu-latest
name: PingMe
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Ping me On
uses: kha7iq/pingme-action@v1
env:
MATRIX_USERNAME: ${{ secrets.MATRIX_USERNAME }}
MATRIX_PASSWORD: ${{ secrets.MATRIX_PASSWORD }}
MATRIX_ACCESS_TOKEN: ${{ secrets.MATRIX_ACCESS_TOKEN }}
MATRIX_SERVER_URL: ${{ secrets.MATRIX_SERVER_URL }}
MATRIX_SERVER_NAME: ${{ secrets.MATRIX_SERVER_NAME }}
MATRIX_ROOM: ${{ secrets.MATRIX_ROOM }}
MATRIX_ROOM_ID: ${{ secrets.MATRIX_ROOM_ID }}
MATRIX_DOMAIN: ${{ secrets.MATRIX_DOMAIN }}
MATRIX_MESSAGE: 'Event is triggered by ${{ github.event_name }}'
MATRIX_AUTO_JOIN: ${{ secrets.MATRIX_AUTO_JOIN }}
with:
# Chose the messaging platform.
# slack / telegram / rocketchat / teams /
# pushover / discord / email / mattermost / textmagic / matrix
service: matrix
```
- **Variables**
| Variables | Default Value |
|--------------------| :----------------: |
| MATRIX_USERNAME | "" |
| MATRIX_PASSWORD | "" |
| MATRIX_ACCESS_TOKEN | "" |
| MATRIX_SERVER_URL | "" |
| MATRIX_SERVER_NAME | "" |
| MATRIX_ROOM | "" |
| MATRIX_ROOM_ID | "" |
| MATRIX_DOMAIN | "" |
| MATRIX_MESSAGE | "" |
| MATRIX_AUTO_JOIN | "" |

29
go.mod
View File

@ -3,26 +3,13 @@ module github.com/kha7iq/pingme
go 1.16
require (
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20220708192748-b73dcb041214 // indirect
github.com/go-openapi/analysis v0.21.3 // indirect
github.com/go-openapi/runtime v0.24.1 // indirect
github.com/go-openapi/spec v0.20.6 // indirect
github.com/go-openapi/strfmt v0.21.3 // indirect
github.com/go-openapi/validate v0.22.0 // indirect
github.com/gorilla/schema v1.4.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
github.com/gotify/go-api-client/v2 v2.0.4
github.com/gregdel/pushover v1.1.0
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/nikoksr/notify v0.27.0
github.com/sfreiberg/gotwilio v1.0.0
github.com/silenceper/wechat/v2 v2.1.3
github.com/slack-go/slack v0.11.0 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/stretchr/testify v1.8.0
github.com/textmagic/textmagic-rest-go-v2/v2 v2.0.3361 // indirect
github.com/urfave/cli/v2 v2.11.0
golang.org/x/net v0.38.0 // indirect
golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 // indirect
github.com/gregdel/pushover v0.0.0-20210216095829-2131362cb888
github.com/nikoksr/notify v0.17.2
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sfreiberg/gotwilio v0.0.0-20201211181435-c426a3710ab5
github.com/silenceper/wechat/v2 v2.0.6
github.com/stretchr/testify v1.7.0
github.com/urfave/cli/v2 v2.3.0
)

684
go.sum

File diff suppressed because it is too large Load Diff

View File

@ -1,81 +0,0 @@
#!/bin/sh
# Usage: [sudo] [BINDIR=/usr/local/bin] ./install.sh [<BINDIR>]
#
# Example:
# 1. sudo ./install.sh /usr/local/bin
# 2. sudo ./install.sh /usr/bin
# 3. ./install.sh $HOME/usr/bin
# 4. BINDIR=$HOME/usr/bin ./install.sh
#
# Default BINDIR=/usr/bin
set -euf
if [ -n "${DEBUG-}" ]; then
set -x
fi
: ${BINDIR:="/usr/bin"}
if [ $# -gt 0 ]; then
BINDIR=$1
fi
_can_install() {
if [ ! -d "${BINDIR}" ]; then
mkdir -p "${BINDIR}" 2> /dev/null
fi
[ -d "${BINDIR}" ] && [ -w "${BINDIR}" ]
}
if ! _can_install && [ "$(id -u)" != 0 ]; then
printf "Run script as sudo\n"
exit 1
fi
if ! _can_install; then
printf -- "Can't install to %s\n" "${BINDIR}"
exit 1
fi
machine=$(uname -m)
case $machine in
armv7*)
machine="arm"
;;
aarch64)
machine="arm64"
;;
esac
case $(uname -s) in
Linux)
os="Linux"
;;
Darwin)
os="macOS"
;;
*)
printf "OS not supported\n"
exit 1
;;
esac
printf "Fetching latest version\n"
latest="$(curl -sL 'https://api.github.com/repos/kha7iq/pingme/releases/latest' | grep 'tag_name' | grep --only 'v[0-9\.]\+' | cut -c 2-)"
tempFolder="/tmp/pingme_v${latest}"
printf -- "Found version %s\n" "${latest}"
mkdir -p "${tempFolder}" 2> /dev/null
printf -- "Downloading pingme_%s_%s_%s.tar.gz\n" "${latest}" "${os}" "${machine}"
curl -sL -o "${tempFolder}/pingme.tar.gz" "https://github.com/kha7iq/pingme/releases/download/v${latest}/pingme_${os}_${machine}.tar.gz"
printf -- "Installing...\n"
tar -C "${tempFolder}" -xf "${tempFolder}/pingme.tar.gz"
install -m755 "${tempFolder}/pingme" "${BINDIR}/pingme"
printf "Cleaning up temp files\n"
rm -rf "${tempFolder}"
printf -- "Successfully installed pingme into %s/\n" "${BINDIR}"

View File

@ -1,7 +1,6 @@
package main
import (
"github.com/kha7iq/pingme/service/matrix"
"log"
"os"
@ -59,7 +58,6 @@ email address, Line, Gotify and Wechat.`
wechat.Send(),
gotify.Send(),
textmagic.Send(),
matrix.Send(),
}
err := app.Run(os.Args)

View File

@ -1,221 +0,0 @@
package matrix
import (
"fmt"
"github.com/matrix-org/gomatrix"
"github.com/urfave/cli/v2"
"strings"
)
type matrixPingMe struct {
Username string
Password string
Token string
Url string
ServerName string
Room string
RoomID string
Domain string
Message string
AutoJoin bool
}
func Send() *cli.Command {
var matrix matrixPingMe
return &cli.Command{
Name: "matrix",
Usage: "Send message via matrix",
UsageText: "pingme matrix --token 'syt_YW...E2qD' --room 'LRovrjPJaRChcTKgoK:matrix.org' " +
"--url 'matrix-client.matrix.org' --autoJoin --msg 'Hello, Matrix!'",
Flags: []cli.Flag{
&cli.StringFlag{
Destination: &matrix.Username,
Name: "username",
Aliases: []string{"u"},
Usage: "Matrix username",
EnvVars: []string{"MATRIX_USER"},
},
&cli.StringFlag{
Destination: &matrix.Password,
Name: "password",
Aliases: []string{"p"},
Usage: "Matrix password",
EnvVars: []string{"MATRIX_PASSWORD"},
},
&cli.StringFlag{
Destination: &matrix.Token,
Name: "token",
Aliases: []string{"t"},
Usage: "Matrix access token. Can be used instead of username+password",
EnvVars: []string{"MATRIX_ACCESS_TOKEN"},
},
&cli.StringFlag{
Destination: &matrix.Url,
Name: "url",
Usage: "Matrix server URL",
EnvVars: []string{"MATRIX_SERVER_URL"},
},
&cli.StringFlag{
Destination: &matrix.ServerName,
Name: "serverName",
Usage: "Can be provided if requests should be routed via a particular server",
EnvVars: []string{"MATRIX_SERVER_NAME"},
},
&cli.StringFlag{
Destination: &matrix.Room,
Name: "room",
Usage: "Matrix room to send the message to, in the format <roomId>:<domain>",
EnvVars: []string{"MATRIX_ROOM"},
},
&cli.StringFlag{
Destination: &matrix.RoomID,
Name: "roomId",
Usage: "Matrix room ID to send the message to. The exclamation mark at the beginning can be excluded.",
EnvVars: []string{"MATRIX_ROOM_ID"},
},
&cli.StringFlag{
Destination: &matrix.Domain,
Name: "domain",
Usage: "Used in conjunction with room ID to get the desired room",
EnvVars: []string{"MATRIX_DOMAIN"},
},
&cli.StringFlag{
Destination: &matrix.Message,
Name: "msg",
Aliases: []string{"m"},
Required: true,
Usage: "Message to send to matrix",
EnvVars: []string{"MATRIX_MESSAGE"},
},
&cli.BoolFlag{
Destination: &matrix.AutoJoin,
Name: "autoJoin",
Usage: "If enabled, will automatically join the specified room if not already joined",
EnvVars: []string{"MATRIX_AUTO_JOIN"},
},
},
Action: func(ctx *cli.Context) error {
// Login
client, err := matrix.login()
if err != nil {
return fmt.Errorf("failed to login to matrix: %v", err)
}
// Parse and set variables
err = matrix.setupVars()
if err != nil {
return err
}
// If necessary, join the given room
err = matrix.joinRoomIfNecessary(client)
if err != nil {
return err
}
// Send the message
_, err = client.SendText(matrix.Room, matrix.Message)
if err != nil {
return fmt.Errorf("failed to send matrix text: %v", err)
}
return nil
},
}
}
/*
setupVars will ensure the room ID begins with an exclamation mark and set the room string if not
already set, using the room ID and domain. If the room string, room id and domain are not set,
an error will be thrown.
*/
func (m *matrixPingMe) setupVars() error {
// Format the room ID
if !strings.HasPrefix(m.RoomID, "!") {
m.RoomID = "!" + m.RoomID
}
// Create the matrix room string if not already provided
if m.Room == "" {
if m.RoomID == "" || m.Domain == "" {
return fmt.Errorf("matrix room, or room ID and domain must be provided")
}
m.Room = fmt.Sprintf("%s:%s", m.RoomID, m.Domain)
}
return nil
}
/*
joinRoomIfNecessary gets all the joined rooms and checks if the desired room is in the list.
If not, and autoJoin is set to true - will attempt to join the room. If autoJoin is set to
false, an error will be thrown
*/
func (m *matrixPingMe) joinRoomIfNecessary(client *gomatrix.Client) error {
// Get already joined rooms
joined, err := client.JoinedRooms()
if err != nil {
return fmt.Errorf("failed to get joined rooms: %v", err)
}
// Check if we've already joined the desired room
foundRoom := false
for _, room := range joined.JoinedRooms {
if room == m.Room {
foundRoom = true
break
}
}
// If not, try auto join the room
if !foundRoom {
if !m.AutoJoin {
return fmt.Errorf("not joined room '%s' and --autoJoin is set to false", m.Room)
}
_, err = client.JoinRoom(m.Room, m.ServerName, nil)
if err != nil {
return fmt.Errorf("failed to auto join room '%s': %v", m.Room, err)
}
}
return nil
}
/*
login creates a gomatrix.Client instance, connecting to the given URL, using the provided login details
*/
func (m *matrixPingMe) login() (*gomatrix.Client, error) {
// Create a client instance
client, err := gomatrix.NewClient(m.Url, "", "")
if err != nil {
return nil, fmt.Errorf("failed to create matrix client: %v", err)
}
// Attempt to log in with whatever login details were provided.
// Or, throw an error if no login details were given
var resp *gomatrix.RespLogin
if m.Token != "" {
resp, err = client.Login(&gomatrix.ReqLogin{
Type: "m.login.token",
Token: m.Token,
})
if err != nil {
return nil, err
}
} else if m.Username != "" && m.Password != "" {
resp, err = client.Login(&gomatrix.ReqLogin{
Type: "m.login.password",
User: m.Username,
Password: m.Password,
})
if err != nil {
return nil, err
}
} else {
return nil, fmt.Errorf("no token, or username and password provided")
}
// Set the access token for this session
client.SetCredentials(resp.UserID, resp.AccessToken)
m.Token = resp.AccessToken
return client, nil
}

View File

@ -16,7 +16,6 @@ type pushOver struct {
Recipient string
Message string
Title string
Priority int
}
// Send parse values from *cli.context and return *cli.Command.
@ -62,27 +61,10 @@ All configuration options are also available via environment variables.`,
Usage: "Title of the message.",
EnvVars: []string{"PUSHOVER_TITLE"},
},
&cli.IntFlag{
Destination: &pushOverOpts.Priority,
Name: "priority",
Aliases: []string{"p"},
Value: 0,
Usage: "Priority of the message.",
EnvVars: []string{"PUSHOVER_PRIORITY"},
},
},
Action: func(ctx *cli.Context) error {
app := pushover.New(pushOverOpts.Token)
// message := &pushover.Message{Title: pushOverOpts.Title, Message: pushOverOpts.Message, Priority: pushOverOpts.Priority}
message := &pushover.Message{Title: pushOverOpts.Title,
Message: pushOverOpts.Message,
Priority: pushOverOpts.Priority,
Retry: 60,
Expire: 3600,
}
message := pushover.NewMessageWithTitle(pushOverOpts.Message, pushOverOpts.Title)
users := strings.Split(pushOverOpts.Recipient, ",")
for _, v := range users {

View File

@ -26,7 +26,7 @@ func Send() *cli.Command {
Name: "textmagic",
Usage: "Send message via TextMagic",
UsageText: "pingme textmagic --token 'tokenabc' --user 'sid123' " +
"--title 'foo' --receiver '+140001442' --msg 'some message'",
"--subject 'foo' --receiver '+140001442' --msg 'some message'",
Description: `textmagic provides ability to send sms to multiple numbers.
You can specify multiple receivers by separating the value with a comma.`,
Flags: []cli.Flag{