dba/files
library moduleR
Summary
Upload backups.
- Authors
- Christian Grün, BaseX Team 2005-23, BSD License
Imports
This module is imported by 0 modules. It imports 1 modules.
Variables
Functions
4.1 dba:file-upload
Arities: #1R
dba:file-upload
(
$files
as
map(xs:string, xs:base64Binary)
) as
element(rest:response)
- files
as
map(xs:string, xs:base64Binary)
map with uploaded files
element(rest:response)
redirection
Invoked by 0 functions from 0 modules
Annotations (3)
%rest:POST | () |
%rest:path | ('/dba/backup-upload') |
%rest:form-param | ('files','{$files}') |
Source ( 26 lines)
function dba:file-upload(
$files as map(xs:string, xs:base64Binary)
) as element(rest:response) {
(: save files :)
let $dir := db:option('dbpath') || '/'
return try {
(: reject backups with invalid content :)
map:for-each($files, function($file, $content) {
let $name := replace($file, $util:BACKUP-ZIP-REGEX, '$1')
let $entries := archive:entries($content) ! data()
where not(if($name) then (
every $entry in $entries satisfies starts-with($entry, $name || '/') and
$entries = $name || '/inf.basex'
) else (
every $entry in $entries satisfies matches($entry, '\.(xml|basex)')
))
return error((), 'Invalid backup file: ' || $file)
}),
map:for-each($files, function($file, $content) {
file:write-binary($dir || $file, $content)
}),
web:redirect($dba:CAT, map { 'info': util:info(map:keys($files), 'backup', 'uploaded') })
} catch * {
web:redirect($dba:CAT, map { 'error': $err:description })
}
}
Namespaces
The following namespaces are defined:
Prefix | Uri |
---|---|
archive | http://basex.org/modules/archive |
db | http://basex.org/modules/db |
dba | dba/files 2 3 4 5 6 7 8 |
err | http://www.w3.org/2005/xqt-errors |
file | http://expath.org/ns/file |
map | http://www.w3.org/2005/xpath-functions/map |
rest | http://exquery.org/ns/restxq |
util | dba/util |
web | http://basex.org/modules/web |
xs | http://www.w3.org/2001/XMLSchema |
Source Code
(:~
: Upload backups.
:
: @author Christian Grün, BaseX Team 2005-23, BSD License
:)
module namespace dba = 'dba/files';
import module namespace util = 'dba/util' at '../../lib/util.xqm';
(:~ Top category :)
declare variable $dba:CAT := 'databases';
(:~
: Uploads backups.
: @param $files map with uploaded files
: @return redirection
:)
declare
%rest:POST
%rest:path('/dba/backup-upload')
%rest:form-param('files', '{$files}')
function dba:file-upload(
$files as map(xs:string, xs:base64Binary)
) as element(rest:response) {
(: save files :)
let $dir := db:option('dbpath') || '/'
return try {
(: reject backups with invalid content :)
map:for-each($files, function($file, $content) {
let $name := replace($file, $util:BACKUP-ZIP-REGEX, '$1')
let $entries := archive:entries($content) ! data()
where not(if($name) then (
every $entry in $entries satisfies starts-with($entry, $name || '/') and
$entries = $name || '/inf.basex'
) else (
every $entry in $entries satisfies matches($entry, '\.(xml|basex)')
))
return error((), 'Invalid backup file: ' || $file)
}),
map:for-each($files, function($file, $content) {
file:write-binary($dir || $file, $content)
}),
web:redirect($dba:CAT, map { 'info': util:info(map:keys($files), 'backup', 'uploaded') })
} catch * {
web:redirect($dba:CAT, map { 'error': $err:description })
}
};