220 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env 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
 | |
| }
 |