summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Pritz <bluewind@xinu.at>2013-05-11 12:21:59 +0200
committerFlorian Pritz <bluewind@xinu.at>2013-08-11 11:32:51 +0200
commit3ec7aef28c5523d15f7c677ab29dfc30b3b5fc2f (patch)
tree29f0ac19106195e3c88097f34700024487527552
parent0acf745e9aa6ab351fdc4d4c59d3421ea244f17a (diff)
Add API key support
Signed-off-by: Florian Pritz <bluewind@xinu.at>
-rw-r--r--fb-helper.c24
-rw-r--r--fb.14
-rw-r--r--fb.in14
3 files changed, 36 insertions, 6 deletions
diff --git a/fb-helper.c b/fb-helper.c
index c8e4256..6e2a7fb 100644
--- a/fb-helper.c
+++ b/fb-helper.c
@@ -51,6 +51,7 @@ struct options {
int debug;
char *url;
char *file;
+ char *apikeyfile;
};
/* load the contents of file fn into data */
@@ -222,6 +223,7 @@ void display_help()
printf(" -h This help\n");
printf(" -u <url> URL of pastebin or URL to download\n");
printf(" -f <file> File to upload to URL\n");
+ printf(" -a <file> Path to API key file\n");
}
int main(int argc, char *argv[])
@@ -251,7 +253,8 @@ int main(int argc, char *argv[])
struct options options = {
.debug = 0,
.file = NULL,
- .url = NULL
+ .url = NULL,
+ .apikeyfile = NULL
};
if (argc == 1) {
@@ -259,7 +262,7 @@ int main(int argc, char *argv[])
exit(0);
}
- while ((opt = getopt(argc, argv, "Du:f:m:h")) != -1) {
+ while ((opt = getopt(argc, argv, "Du:f:m:a:h")) != -1) {
switch (opt) {
case 'D': options.debug = 1; break;
@@ -267,6 +270,8 @@ int main(int argc, char *argv[])
case 'f': options.file = optarg; break;
+ case 'a': options.apikeyfile = optarg; break;
+
case 'h':
display_help();
exit(0);
@@ -296,6 +301,18 @@ int main(int argc, char *argv[])
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
}
+ if (options.apikeyfile) {
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "apikey",
+ CURLFORM_FILECONTENT, options.apikeyfile,
+ CURLFORM_END);
+ } else {
+ /* use .netrc settings for authentication if available */
+ curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+ }
+
+
/* if we have a file to upload, add it as a POST request */
if (options.file) {
struct stat statbuf;
@@ -358,9 +375,6 @@ int main(int argc, char *argv[])
curl_easy_setopt(curl, CURLOPT_URL, options.url);
curl_easy_setopt(curl, CURLOPT_USERAGENT, userAgent);
- /* use .netrc settings for authentication if available */
- curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
-
/* bail if the upload stalls for 30 seconds */
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1L);
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 30L);
diff --git a/fb.1 b/fb.1
index 26077d5..e2ba33e 100644
--- a/fb.1
+++ b/fb.1
@@ -91,6 +91,8 @@ Display debugging information.
.El
.Sh CONFIGURATION FILES
.Bl -tag
+.It $XDG_CONFIG_HOME/fb-client/apikey
+This file contains the API key to use for authentication. If this file exists, netrc authentication will be disabled.
.It $XDG_CONFIG_HOME/fb-client/config
This file allows to override certain variables by using the format 'option_name="value"'.
Both, the option value and name, are case-sensitive string literals.
@@ -101,6 +103,8 @@ The following option names are supported:
The URL of the pastebin you want to use
.It clipboard_cmd
The command used to copy URLs of uploaded files to the clipboard. This defaults to xclip or pbcopy on Darwin.
+.It apikey_file
+The file that contains the API key. This defaults to "$XDG_CONFIG_HOME/fb-client/apikey"
.El
.It ~/.netrc
This file will be used for authentication.
diff --git a/fb.in b/fb.in
index 3ab25db..cc79e21 100644
--- a/fb.in
+++ b/fb.in
@@ -32,6 +32,8 @@ if [ -z "$XDG_CONFIG_HOME" ]; then
XDG_CONFIG_HOME="$HOME/.config"
fi
+apikey_file="$XDG_CONFIG_HOME/fb-client/apikey"
+
config_file="$XDG_CONFIG_HOME/fb-client/config"
if [ -e "$config_file" ]; then
. "$config_file"
@@ -74,6 +76,10 @@ request_helper() {
helperopts="$helperopts -D"
fi
+ if [ -e "$apikey_file" ]; then
+ helperopts="$helperopts -a $apikey_file"
+ fi
+
if [ "$mode" = "d" ]; then
$libdir/fb-helper $helperopts -u "$url"
fi
@@ -83,7 +89,13 @@ request_helper() {
fi
else
useragent="fb-client/shell-$version"
- curlopts="-# -n -L -A $useragent --speed-time 30 --speed-limit 1 --connect-timeout 10"
+ curlopts="-# -L -A $useragent --speed-time 30 --speed-limit 1 --connect-timeout 10"
+
+ if [ -e "$apikey_file" ]; then
+ curlopts="$curlopts --data-urlencode 'apikey@$apikey_file'"
+ else
+ curlopts="$curlopts -n"
+ fi
if [ "$debug" ]; then
curlopts="$curlopts -v"