tv elm-package-proxy: add rudimentary publish API
This commit is contained in:
parent
ad9b2a538e
commit
5b455f5cca
@ -4,20 +4,43 @@
|
|||||||
cfg.packageDir = "/var/lib/elm-packages";
|
cfg.packageDir = "/var/lib/elm-packages";
|
||||||
cfg.port = 7782;
|
cfg.port = 7782;
|
||||||
|
|
||||||
|
# TODO secret files
|
||||||
|
cfg.htpasswd = "/var/lib/certs/package.elm-lang.org/htpasswd";
|
||||||
|
cfg.sslCertificate = "/var/lib/certs/package.elm-lang.org/fullchain.pem";
|
||||||
|
cfg.sslCertificateKey = "/var/lib/certs/package.elm-lang.org/key.pem";
|
||||||
|
|
||||||
|
semverRegex =
|
||||||
|
"(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?";
|
||||||
|
|
||||||
in {
|
in {
|
||||||
services.nginx.virtualHosts."package.elm-lang.org" = {
|
services.nginx.virtualHosts."package.elm-lang.org" = {
|
||||||
addSSL = true;
|
addSSL = true;
|
||||||
|
|
||||||
# TODO secret files
|
sslCertificate = cfg.sslCertificate;
|
||||||
sslCertificate = "/var/lib/certs/package.elm-lang.org/fullchain.pem";
|
sslCertificateKey = cfg.sslCertificateKey;
|
||||||
sslCertificateKey = "/var/lib/certs/package.elm-lang.org/key.pem";
|
|
||||||
|
|
||||||
locations."/all-packages/since/".extraConfig = ''
|
locations."/all-packages/since/".extraConfig = ''
|
||||||
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
|
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
|
||||||
proxy_pass_header Server;
|
proxy_pass_header Server;
|
||||||
'';
|
'';
|
||||||
|
|
||||||
locations."~ ^/packages/(?<author>[A-Za-z0-9-]+)/(?<pname>[A-Za-z0-9-]+)/(?<version>(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)/(?:zipball|elm.json|endpoint.json)\$".extraConfig = ''
|
locations."~ ^/packages/(?<author>[A-Za-z0-9-]+)/(?<pname>[A-Za-z0-9-]+)/(?<version>${semverRegex})\$".extraConfig = ''
|
||||||
|
auth_basic "Restricted Area";
|
||||||
|
auth_basic_user_file ${cfg.htpasswd};
|
||||||
|
|
||||||
|
proxy_set_header X-Author $author;
|
||||||
|
proxy_set_header X-Package $pname;
|
||||||
|
proxy_set_header X-Version $version;
|
||||||
|
proxy_pass_header Server;
|
||||||
|
|
||||||
|
if ($request_method != POST) {
|
||||||
|
return 405;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy_pass http://127.0.0.1:${toString config.krebs.htgen.elm-packages-proxy.port};
|
||||||
|
'';
|
||||||
|
|
||||||
|
locations."~ ^/packages/(?<author>[A-Za-z0-9-]+)/(?<pname>[A-Za-z0-9-]+)/(?<version>${semverRegex})/(?:zipball|elm.json|endpoint.json)\$".extraConfig = ''
|
||||||
set $zipball "${cfg.packageDir}/$author/$pname/$version/zipball";
|
set $zipball "${cfg.packageDir}/$author/$pname/$version/zipball";
|
||||||
proxy_set_header X-Author $author;
|
proxy_set_header X-Author $author;
|
||||||
proxy_set_header X-Package $pname;
|
proxy_set_header X-Package $pname;
|
||||||
@ -119,6 +142,27 @@ in {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
'POST /packages/'*)
|
||||||
|
|
||||||
|
author=$req_x_author
|
||||||
|
pname=$req_x_package
|
||||||
|
version=$req_x_version
|
||||||
|
|
||||||
|
zipball=${cfg.packageDir}/$author/$pname/$version/zipball
|
||||||
|
|
||||||
|
if test -e "$zipball"; then
|
||||||
|
string_response 409 Conflict \
|
||||||
|
"package already exists: $author/$pname@$version" \
|
||||||
|
text/plain
|
||||||
|
else
|
||||||
|
mkdir -p "$(dirname "$zipball")"
|
||||||
|
head -c $req_content_length > "$zipball"
|
||||||
|
string_response 200 OK \
|
||||||
|
"package created: $author/$pname@$version" \
|
||||||
|
text/plain
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
;;
|
||||||
'POST /all-packages/since/'*)
|
'POST /all-packages/since/'*)
|
||||||
|
|
||||||
# TODO only show newest?
|
# TODO only show newest?
|
||||||
|
Loading…
Reference in New Issue
Block a user