File: tempsend.sh

package info (click to toggle)
plowshare-modules 0~git20161210.0930e85-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,316 kB
  • ctags: 501
  • sloc: sh: 18,621; makefile: 2
file content (137 lines) | stat: -rw-r--r-- 3,929 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Plowshare tempsend.com module
# Copyright (c) 2014-2016 Plowshare team
#
# This file is part of Plowshare.
#
# Plowshare is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Plowshare is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Plowshare.  If not, see <http://www.gnu.org/licenses/>.

MODULE_TEMPSEND_REGEXP_URL='https\?://\(www\.\)\?tempsend\.com/'

MODULE_TEMPSEND_DOWNLOAD_OPTIONS=""
MODULE_TEMPSEND_DOWNLOAD_RESUME=no
MODULE_TEMPSEND_DOWNLOAD_FINAL_LINK_NEEDS_COOKIE=unused
MODULE_TEMPSEND_DOWNLOAD_SUCCESSIVE_INTERVAL=

MODULE_TEMPSEND_UPLOAD_OPTIONS="
NOSSL,,nossl,,Use HTTP upload url instead of HTTPS
TTL,,ttl,n=SECS,Expiration period (in seconds). Default is 86400 (one day)."
MODULE_TEMPSEND_UPLOAD_REMOTE_SUPPORT=no

MODULE_TEMPSEND_PROBE_OPTIONS=""

# Output a tempsend.com file download URL
# $1: cookie file (unused here)
# $2: tempsend.com url
# stdout: real file download link
tempsend_download() {
    local URL=$2
    local PAGE FILE_URL

    PAGE=$(curl -L "$URL") || return
    FILE_URL=$(parse_attr 'title=.Download' 'href' <<< "$PAGE") || return

    echo "http://tempsend.com$FILE_URL"
}

# Upload a file to tempsend.com
# $1: cookie file (unused here)
# $2: input file (with full path)
# $3: remote filename
# stdout: download
tempsend_upload() {
    local -r FILE=$2
    local -r DESTFILE=$3
    local BASE_URL='https://tempsend.com/send'
    local PAGE FILE_URL DELAY V

    [ -n "$NOSSL" ] && BASE_URL='http://tempsend.com/send'

    if [ -n "$TTL" ]; then
        # curl http://tempsend.com | grep option
        local -a VALUES=(3600 86400 604800 2678400)

        DELAY=0

        for V in ${VALUES[@]}; do
        if [[ $V -eq $TTL ]]; then
            DELAY=$V
            break;
        fi
        done

        if [[ $DELAY -eq 0 ]]; then
            log_error 'Bad value to --ttl, allowed values are: '${VALUES[*]}'.'
            return $ERR_BAD_COMMAND_LINE
        fi
    else
        DELAY=2678400
    fi

    PAGE=$(curl_with_log -L \
        -F "file=@$FILE;filename=$DESTFILE" \
        -F "expire=$DELAY" "$BASE_URL") || return

    # Sanity check
    if [ "$PAGE" == 'Could not connect to database' ]; then
        log_error "Remote error: $PAGE"
        return $ERR_LINK_TEMP_UNAVAILABLE
    fi

    if FILE_URL=$(parse_tag 'title=.Link to' a <<< "$PAGE"); then
        echo "$FILE_URL"
        return 0
    fi

    if match '>Not Found</' "$PAGE" && test -z "$NOSSL"; then
        log_error 'Remote error: retry using --nossl switch'
    fi

    return $ERR_FATAL
}

# Probe a download URL.
# $1: cookie file (unused here)
# $2: tempsend.com url
# $3: requested capability list
# stdout: 1 capability per line
tempsend_probe() {
    local -r URL=$2
    local -r REQ_IN=$3
    local PAGE REQ_OUT FID FILE_NAME FILE_SIZE

    PAGE=$(curl -L "$URL") || return

    if ! match '<h1>Download</h1>' "$PAGE"; then
        return $ERR_LINK_DEAD
    fi

    REQ_OUT=c

    if [[ $REQ_IN = *f* ]]; then
        FILE_NAME=$(parse_tag '="Download[[:space:]]' a <<< "$PAGE") && \
            echo "$FILE_NAME" && REQ_OUT="${REQ_OUT}f"
    fi

    if [[ $REQ_IN = *i* ]]; then
        FID=$(parse . '/\([[:alnum:]]*\)$' <<< "$URL") && \
            echo "$FID" && REQ_OUT="${REQ_OUT}i"
    fi

    if [[ $REQ_IN = *s* ]]; then
        FILE_SIZE=$(parse '[[:digit:]][[:space:]]downloads<' '^[^[:space:]]*[[:space:]]-[[:space:]]*\([^-]\+\)' <<< "$PAGE") && \
        translate_size "$FILE_SIZE" && REQ_OUT="${REQ_OUT}s"
    fi

    echo $REQ_OUT
}