82 lines
2.7 KiB
PowerShell
82 lines
2.7 KiB
PowerShell
|
|
#requires -version 5
|
||
|
|
<#
|
||
|
|
.SYNOPSIS
|
||
|
|
warpbox: command line uploader for Warpbox
|
||
|
|
.DESCRIPTION
|
||
|
|
Set the server once, then upload anything:
|
||
|
|
setx WARPBOX_HOST "https://your.warpbox.host"
|
||
|
|
warpbox .\report.pdf
|
||
|
|
|
||
|
|
Install (PowerShell):
|
||
|
|
iwr "$env:WARPBOX_HOST/static/api/warpbox.ps1" -OutFile $HOME\warpbox.ps1
|
||
|
|
# add a function to your $PROFILE: function warpbox { & "$HOME\warpbox.ps1" @args }
|
||
|
|
|
||
|
|
Auth: set the token once so it never lands in your command history.
|
||
|
|
setx WARPBOX_TOKEN "wbx_your_token"
|
||
|
|
Create a token under Account, Access tokens.
|
||
|
|
|
||
|
|
.EXAMPLE
|
||
|
|
.\warpbox.ps1 .\report.pdf
|
||
|
|
.EXAMPLE
|
||
|
|
.\warpbox.ps1 -Password 123 -Expiry 2d .\photo.png .\clip.mp4
|
||
|
|
#>
|
||
|
|
[CmdletBinding()]
|
||
|
|
param(
|
||
|
|
[Alias('p')][string]$Password,
|
||
|
|
[Alias('e')][string]$Expiry,
|
||
|
|
[Alias('n')][int]$MaxDownloads,
|
||
|
|
[Alias('o')][switch]$Obfuscate,
|
||
|
|
[string]$Server = $env:WARPBOX_HOST,
|
||
|
|
[string]$Auth = $env:WARPBOX_TOKEN,
|
||
|
|
[string]$AuthFile,
|
||
|
|
[switch]$Json,
|
||
|
|
[switch]$Help,
|
||
|
|
[Parameter(ValueFromRemainingArguments = $true)][string[]]$Files
|
||
|
|
)
|
||
|
|
|
||
|
|
if ($Help -or -not $Files) {
|
||
|
|
Write-Host 'warpbox: upload files to Warpbox'
|
||
|
|
Write-Host 'USAGE: warpbox.ps1 [-Password pw] [-Expiry 2d] [-MaxDownloads n] [-Obfuscate] [-Json] <file> [file ...]'
|
||
|
|
Write-Host 'SERVER: set WARPBOX_HOST in your environment (setx WARPBOX_HOST "https://your.host")'
|
||
|
|
Write-Host 'AUTH: set WARPBOX_TOKEN in your environment (setx WARPBOX_TOKEN "wbx_...")'
|
||
|
|
if (-not $Files -and -not $Help) { exit 2 } else { exit 0 }
|
||
|
|
}
|
||
|
|
|
||
|
|
if (-not $Server) {
|
||
|
|
Write-Error 'warpbox: no server set. Use -Server <url> or set WARPBOX_HOST'
|
||
|
|
exit 2
|
||
|
|
}
|
||
|
|
if ($AuthFile) { $Auth = (Get-Content -Raw $AuthFile).Trim() }
|
||
|
|
|
||
|
|
function ConvertTo-Minutes($v) {
|
||
|
|
if ($v -match '^(\d+)([mhdw]?)$') {
|
||
|
|
$n = [int]$Matches[1]
|
||
|
|
switch ($Matches[2]) {
|
||
|
|
'h' { return $n * 60 }
|
||
|
|
'd' { return $n * 1440 }
|
||
|
|
'w' { return $n * 10080 }
|
||
|
|
default { return $n }
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return $v
|
||
|
|
}
|
||
|
|
|
||
|
|
# Expand wildcards (PowerShell does not expand them in arguments).
|
||
|
|
$expanded = @()
|
||
|
|
foreach ($f in $Files) {
|
||
|
|
$hits = Get-ChildItem -Path $f -File -ErrorAction SilentlyContinue
|
||
|
|
if ($hits) { $expanded += $hits.FullName } else { $expanded += $f }
|
||
|
|
}
|
||
|
|
|
||
|
|
$curlArgs = @('-fS')
|
||
|
|
foreach ($f in $expanded) { $curlArgs += @('-F', "file=@$f") }
|
||
|
|
if ($Password) { $curlArgs += @('-F', "password=$Password") }
|
||
|
|
if ($Expiry) { $curlArgs += @('-F', "expires_minutes=$(ConvertTo-Minutes $Expiry)") }
|
||
|
|
if ($MaxDownloads) { $curlArgs += @('-F', "max_downloads=$MaxDownloads") }
|
||
|
|
if ($Obfuscate) { $curlArgs += @('-F', 'obfuscate_metadata=on') }
|
||
|
|
if ($Auth) { $curlArgs += @('-H', "Authorization: Bearer $Auth") }
|
||
|
|
if ($Json) { $curlArgs += @('-H', 'Accept: application/json') }
|
||
|
|
$curlArgs += "$($Server.TrimEnd('/'))/api/v1/upload"
|
||
|
|
|
||
|
|
& curl.exe @curlArgs
|