Compare commits

...

11 Commits

7 changed files with 60 additions and 18 deletions

View File

@ -2,8 +2,30 @@
This is a small hack to send faxes via the sipgate REST API from the command line.
## Deployment
### Dependencies
* `bash >= 4.3`
* `curl`
* `sed`
* `bc`
* `getopt`
* [`jq`](https://stedolan.github.io/jq/download/).
* optional: `ghostscript`
### Configuration
Add your login credentials to `login_credentials_muster.sh` and rename the file to `.env`
Since sipgate enforces 2FA, your usual username and password won't work anymore.
Now, you need a so-called [Personal Access Token](https://app.sipgate.com/w0/personal-access-token), that you can retrieve after you login to the web interface.
Enable at least the following scopes:
* `balance:read`
* `devices:callerid:read`
* `devices:callerid:write`
* `history:read`
* `sessions:fax:write`
Enter the token-ID as `SIPUSER` or `TOKENID` and the token as `SIPPWD` or `TOKEN`.
It's prefered to use the `TOKEN*` variables, but in that case, the `SIP*` variables **MUST** be left empty/unset.
If you use Letterheads Address database, uncomment the last line of that file and add `your/path/to/Letterhead`
## Usage

View File

@ -1,9 +1,17 @@
BASEPATH=$(dirname $(realpath $0))
. $BASEPATH/.env
AUTH_TOKEN=$(echo $(curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --data-urlencode client_id=sipgate-app-web --data-urlencode grant_type=password --data-urlencode username=$SIPUSER --data-urlencode password=$SIPPWD https://api.sipgate.com/login/sipgate-apps/protocol/openid-connect/token -s | jq '.access_token') | sed 's/\"//g')
if [ -z "$AUTH_TOKEN" ];
then
echo "Login failed"
else
echo "Logged in"
if [ $TOKENID ] && [ -z $SIPUSER ]
then SIPUSER=$TOKENID
fi
if [ $TOKEN ] && [ -z $SIPPWD ]
then SIPPWD=$TOKEN
fi
AUTH_TOKEN=$(curl -o /dev/null -s -w "%{http_code}\n" --request GET --header 'Accept: application/json' --user $SIPUSER:$SIPPWD https://api.sipgate.com/v2/authorization/userinfo -s)
if [ $AUTH_TOKEN = "200" ];
then
echo "Login OK"
else
echo "Login failed"
fi

5
fax.sh
View File

@ -55,6 +55,7 @@ if [[ -z $REC0 || -z $1 ]]
then
usage
fi
#Check if account works - not necessarily needed anymore, since sipgate changed their auth processes
. $BASEPATH/authorization.sh
#Prepare fax credentials:
FILE=$1
@ -94,7 +95,7 @@ fi
#save payload to tempfile to prevent curl from throwing 'argument list too long' error.
echo '{"faxlineId":"f0", "recipient":"'${REC}'", "filename":"fax.pdf", "base64Content":"'${CONTENT}'"}' > /tmp/sipgatedata.txt
#Send fax
REPLY=$(curl --request POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Authorization: Bearer $AUTH_TOKEN" --data @/tmp/sipgatedata.txt "https://api.sipgate.com/v2/sessions/fax" -s)
REPLY=$(curl --request POST --header 'Content-Type: application/json' --header 'Accept: application/json' --user $SIPUSER:$SIPPWD --data @/tmp/sipgatedata.txt "https://api.sipgate.com/v2/sessions/fax" -s)
FAXID=$(echo $REPLY | jq '.sessionId' | sed -e 's:"::g' )
echo $REPLY > /tmp/sipgatereply.txt
#remove tempfile
@ -108,6 +109,6 @@ else
echo "$FAXID" >> $BASEPATH/.fax_history
fi
#Check if fax request was accepted by sipgate
curl --request GET --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Authorization: Bearer $AUTH_TOKEN" "https://api.sipgate.com/v2/history/$FAXID" -s | jq '.faxStatusType'
curl --request GET --header 'Content-Type: application/json' --header 'Accept: application/json' --user $SIPUSER:$SIPPWD "https://api.sipgate.com/v2/history/$FAXID" -s | jq '.faxStatusType'
#And show the account balance
. $BASEPATH/getbalance.sh

View File

@ -36,9 +36,9 @@ then
IDF=true
fi
. $BASEPATH/authorization.sh # stellt AUTH_TOKEN bereit
. $BASEPATH/authorization.sh # Checks if account works - after changed auth processes not necessarily needed anymore
JSON=$(curl -X GET -H "accept: application/json" -H "Authorization: Bearer $AUTH_TOKEN" "https://api.sipgate.com/v2/history/$ID" -s)
JSON=$(curl -X GET -H "accept: application/json" --user $SIPUSER:$SIPPWD "https://api.sipgate.com/v2/history/$ID" -s)
DATE=$(echo $JSON | jq '.created' | sed -e 's:"::g' )
if [ -z $DATE ]
then
@ -51,10 +51,13 @@ OUTFILE="$DATE-$ID-report.pdf"
if [ -z $FILE ]
then
echo "Fax seems not to be sent successfully (yet). No report available"
read -p "Delete id from history anyways? (y/n) " DIN
if [[ $DF = true && $DIN =~ [yYjJ] ]]
if [ $DF = true ]
then
echo "$(grep -v "^$ID$" $BASEPATH/.fax_history)" > $BASEPATH/.fax_history
read -p "Delete id from history anyways? (y/n) " DIN
if [ $DIN =~ [yYjJ] ]
then
echo "$(grep -v "^$ID$" $BASEPATH/.fax_history)" > $BASEPATH/.fax_history
fi
fi
exit 1
fi

View File

@ -1,4 +1,4 @@
BAL=$(curl --request GET --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Authorization: Bearer $AUTH_TOKEN" "https://api.sipgate.com/v2/balance" -s)
BAL=$(curl --request GET --header 'Content-Type: application/json' --header 'Accept: application/json' --user $SIPUSER:$SIPPWD "https://api.sipgate.com/v2/balance" -s)
AMOUNT=$(echo $BAL | jq '.amount')
CUR=$(echo $BAL | jq '.currency' | sed -e 's:"::g' )
AMOUNT=$(echo "scale=2; $AMOUNT/10000" | bc -l)

View File

@ -1,5 +1,13 @@
#Add your sipgate username and password here:
SIPUSER=
SIPPWD=
# Add your sipgate token-ID and token here:
# TOKENID is an alias for SIPUSER
# TOKEN is an alias for SIPPWD,
# so for legacy reasons you can use those variables as well.
# Take care: The SIP* variables MUST be empty/unset or contain the config to use.
# If they are set and not empty, the corresponding TOKEN* variable is ignored.
TOKENID=
TOKEN=
#uncomment if you use Letterheads Address database
#LETTERHEAD_PATH=
#Add your default CallerID here:
DEFAULT_CALLER_ID="anonymous"
LETTERHEAD_PATH="/home/bernhardt/Entwicklung/Letterhead"

View File

@ -4,7 +4,7 @@ BASEPATH=$(dirname $(realpath $0))
. $BASEPATH/authorization.sh
while read LINE;
do
JSON=$(curl --request GET --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Authorization: Bearer $AUTH_TOKEN" "https://api.sipgate.com/v2/history/$LINE" -s)
JSON=$(curl --request GET --header 'Content-Type: application/json' --header 'Accept: application/json' --user $SIPUSER:$SIPPWD "https://api.sipgate.com/v2/history/$LINE" -s)
STATUS=$(echo $JSON | jq '.faxStatusType' | sed -e 's:"::g' )
DATE=$(echo $JSON | jq '.created' | sed -e 's:"::g' )
TARGET=$(echo $JSON | jq '.target' | sed -e 's:"::g' )