mirror of
https://github.com/YunoHost-Apps/hubzilla_ynh.git
synced 2024-09-03 19:26:21 +02:00
219 lines
6.7 KiB
Bash
Executable file
219 lines
6.7 KiB
Bash
Executable file
#!/bin/bash
|
|
# Copyright (c) 2012 Fabio Comuni
|
|
# Copyright (c) 2012 Michael Nowack
|
|
# Copyright (c) 2010, 2012 Yu-Jie Lin
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
# this software and associated documentation files (the "Software"), to deal in
|
|
# the Software without restriction, including without limitation the rights to
|
|
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
# of the Software, and to permit persons to whom the Software is furnished to do
|
|
# so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
|
|
FRIENDICAOAUTH_VERSION=0.1.1
|
|
|
|
F_API_VERSION="1"
|
|
|
|
# Friendica API endpoints
|
|
|
|
F_ACCOUNF_UPDATE_PROFILE_IMAGE="${hubzilla_url}/api/account/update_profile_image"
|
|
F_STATUSES_UPDATE="${hubzilla_url}/api/statuses/update"
|
|
F_STATUSES_HOME_TIMELINE="${hubzilla_url}/api/statuses/home_timeline"
|
|
|
|
F_REQUESF_TOKEN=${hubzilla_url}'/api/oauth/request_token'
|
|
F_ACCESS_TOKEN=${hubzilla_url}'/api/oauth/access_token'
|
|
F_AUTHORIZE_TOKEN=${hubzilla_url}'/api/oauth/authorize'
|
|
|
|
# Source OAuth.sh
|
|
|
|
OAuth_sh=$(which OAuth.sh)
|
|
(( $? != 0 )) && echo 'Unable to locate OAuth.sh! Make sure it is in searching PATH.' && exit 1
|
|
source "$OAuth_sh"
|
|
|
|
FO_debug () {
|
|
# Print out all parameters, each in own line
|
|
[[ "$FO_DEBUG" == "" ]] && return
|
|
local t=$(date +%FT%T.%N)
|
|
while (( $# > 0 )); do
|
|
echo "[FO][DEBUG][$t] $1"
|
|
shift 1
|
|
done
|
|
}
|
|
|
|
FO_extract_value () {
|
|
# $1 key name
|
|
# $2 string to find
|
|
egrep -o "$1=[a-zA-Z0-9-]*" <<< "$2" | cut -d\= -f 2
|
|
}
|
|
|
|
|
|
FO_init() {
|
|
# Initialize FriendicaOAuth
|
|
oauth_version='1.0'
|
|
oauth_signature_method='HMAC-SHA1'
|
|
oauth_basic_params=(
|
|
$(OAuth_param 'oauth_consumer_key' "$oauth_consumer_key")
|
|
$(OAuth_param 'oauth_signature_method' "$oauth_signature_method")
|
|
$(OAuth_param 'oauth_version' "$oauth_version")
|
|
)
|
|
}
|
|
|
|
FO_access_token_helper () {
|
|
# Help guide user to get access token
|
|
|
|
local resp PIN
|
|
|
|
# Request Token
|
|
|
|
local auth_header="$(_OAuth_authorization_header 'Authorization' "$hubzilla_url/" "$oauth_consumer_key" "$oauth_consumer_secret" '' '' "$oauth_signature_method" "$oauth_version" "$(OAuth_nonce)" "$(OAuth_timestamp)" 'POST' "$F_REQUESF_TOKEN" "$(OAuth_param 'oauth_callback' 'oob')"), $(OAuth_param_quote 'oauth_callback' 'oob')"
|
|
|
|
# echo $auth_header
|
|
# echo $F_REQUESF_TOKEN
|
|
|
|
resp=$(curl -s -d '' -H "$auth_header" "$F_REQUESF_TOKEN")
|
|
FO_rval=$?
|
|
(( $? != 0 )) && return $FO_rval
|
|
|
|
local _oauth_token=$(FO_extract_value 'oauth_token' "$resp")
|
|
local _oauth_token_secret=$(FO_extract_value 'oauth_token_secret' "$resp")
|
|
|
|
echo 'Please go to the following link to get the PIN:'
|
|
echo " ${F_AUTHORIZE_TOKEN}?oauth_token=$_oauth_token"
|
|
|
|
read -p 'PIN: ' PIN
|
|
|
|
# Access Token
|
|
|
|
local auth_header="$(_OAuth_authorization_header 'Authorization' "$hubzilla_url/" "$oauth_consumer_key" "$oauth_consumer_secret" "$_oauth_token" "$_oauth_token_secret" "$oauth_signature_method" "$oauth_version" "$(OAuth_nonce)" "$(OAuth_timestamp)" 'POST' "$F_ACCESS_TOKEN" "$(OAuth_param 'oauth_verifier' "$PIN")"), $(OAuth_param_quote 'oauth_verifier' "$PIN")"
|
|
|
|
resp=$(curl -s -d "" -H "$auth_header" "$F_ACCESS_TOKEN")
|
|
FO_rval=$?
|
|
(( $? != 0 )) && return $FO_rval
|
|
|
|
FO_ret=(
|
|
$(FO_extract_value 'oauth_token' "$resp")
|
|
$(FO_extract_value 'oauth_token_secret' "$resp")
|
|
$(FO_extract_value 'user_id' "$resp")
|
|
$(FO_extract_value 'screen_name' "$resp")
|
|
)
|
|
}
|
|
|
|
# APIs
|
|
######
|
|
|
|
FO_statuses_update () {
|
|
# $1 format
|
|
# $2 status
|
|
# $3 in_reply_to_status_id
|
|
# The followins are not implemented yet:
|
|
# $4 lat
|
|
# $5 long
|
|
# $6 place_id
|
|
# $7 display_coordinates
|
|
local format="$1"
|
|
[[ "$format" == "" ]] && format="xml"
|
|
|
|
local params=(
|
|
$(OAuth_param 'status' "$2")
|
|
)
|
|
|
|
params[${#params[@]}]=$(OAuth_param 'source' "shredder")
|
|
|
|
[[ "$3" != "" ]] && params[${#params[@]}]=$(OAuth_param 'in_reply_to_status_id' "$3") && local in_reply_to_status_id=( '--data-urlencode' "in_reply_to_status_id=$3" )
|
|
|
|
|
|
local auth_header=$(OAuth_authorization_header 'Authorization' "$hubzilla_url" '' '' 'POST' "$F_STATUSES_UPDATE.$format" ${params[@]})
|
|
|
|
|
|
FO_ret=$(curl -s -H "$auth_header" --data-urlencode "status=$2" --data-urlencode "source=shred" ${in_reply_to_status_id[@]} "$F_STATUSES_UPDATE.$format")
|
|
|
|
FO_rval=$?
|
|
return $FO_rval
|
|
}
|
|
|
|
|
|
# gets the user home_timeline.
|
|
#
|
|
# @sets FO_ret API response
|
|
# @returns status
|
|
# @public
|
|
FO_statuses_home_timeline () {
|
|
# $1 format
|
|
# $2 screen_name
|
|
# $3 count
|
|
local format="$1"
|
|
local screen_name="$2"
|
|
local count="$3"
|
|
[[ "$format" == "" ]] && format="xml"
|
|
[[ "$count" == "" ]] && count=1
|
|
|
|
local params=(
|
|
$(OAuth_param 'screen_name' $screen_name)
|
|
$(OAuth_param 'count' $count)
|
|
)
|
|
|
|
local auth_header=$(OAuth_authorization_header 'Authorization' "$hubzilla_url" '' '' 'GET' "$F_STATUSES_HOME_TIMELINE.$format" ${params[@]})
|
|
|
|
convscreen=$(OAuth_PE "$screen_name");
|
|
FO_ret=$(curl -s --get "${F_STATUSES_HOME_TIMELINE}.${format}" --data "screen_name=${convscreen}&count=${count}" --header "${auth_header}")
|
|
FO_rval=$?
|
|
|
|
return $FO_rval
|
|
}
|
|
|
|
FO_command () {
|
|
local command="$1"
|
|
local post="$2"
|
|
declare -a opts=("${!3}")
|
|
local params=(
|
|
$(OAuth_param 'screen_name' $screen_name)
|
|
$(OAuth_param 'count' $count)
|
|
)
|
|
|
|
#echo "$3"
|
|
#echo '---'
|
|
#echo "${opts[@]}"
|
|
|
|
convscreen=$(OAuth_PE "$screen_name");
|
|
data="screen_name=${convscreen}&count=${count}"
|
|
|
|
if [ ${#opts[@]} != 0 ]; then
|
|
for b in ${opts[@]}; do
|
|
lhs=`echo $b | awk -F= '{print $1};'`
|
|
rhs=`echo $b | awk -F= '{print $2};'`
|
|
params=("${params[@]}" $(OAuth_param "$lhs" "$rhs"))
|
|
data=$data"&""$lhs"="$rhs"
|
|
done
|
|
fi
|
|
|
|
#echo 'params: ' ${params[@]}
|
|
|
|
#echo 'data: ' $data
|
|
|
|
local auth_header='';
|
|
|
|
if [ "$post" == '1' ]; then
|
|
auth_header=$(OAuth_authorization_header 'Authorization' "$hubzilla_url" '' '' 'POST' "${hubzilla_url}/api/${command}.json" ${params[@]})
|
|
FO_ret=$(curl -s "${hubzilla_url}/api/${command}.json" --data-urlencode "${data}" --header "${auth_header}")
|
|
|
|
else
|
|
auth_header=$(OAuth_authorization_header 'Authorization' "$hubzilla_url" '' '' 'GET' "${hubzilla_url}/api/${command}.json" ${params[@]})
|
|
FO_ret=$(curl -s --get "${hubzilla_url}/api/${command}.json" --data "${data}" --header "${auth_header}")
|
|
|
|
fi
|
|
|
|
FO_rval=$?
|
|
|
|
return $FO_rval
|
|
}
|