Index: client/1.0/neutral/pkgr.eagle ================================================================== --- client/1.0/neutral/pkgr.eagle +++ client/1.0/neutral/pkgr.eagle @@ -616,10 +616,11 @@ # # NOTE: This procedure returns the base URI for the package repository # server. There are no arguments. # + # proc getLookupBaseUri {} { global env set varName [appendArgs [getLookupVarNamePrefix] base_uri] @@ -646,10 +647,15 @@ # looked up -OR- an empty string for any available version. There # are no HTTP requests issued by this procedure; it simply returns # the URI to use. # proc getLookupUri { apiKeys package version } { + # + # NOTE: Fetch the base URI for the package repository server. If it + # is not available for some reason, just return an empty string + # to the caller (i.e. as we cannot do anything productive). + # set baseUri [getLookupBaseUri] if {[string length $baseUri] == 0} then { return "" } @@ -1014,10 +1020,11 @@ # # NOTE: Load a native Tcl library. It absolutely must be signed with a # valid Authenticode signature. # tcl load -findflags +TrustedOnly -loadflags +SetDllDirectory + # tcl load -findflags =Typical -loadflags +SetDllDirectory # # NOTE: Verify that the native Tcl library appears to have beed loaded # into this interpreter. # Index: client/1.0/neutral/pkgr.eagle.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.asc +++ client/1.0/neutral/pkgr.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVwQeAAoJEFAslq9JXcLZeqkQAJTeEFiD45QEPzD2PrVAfoVG -EddgG1kirgYvAkLVJrH+gw0ebzCt0CmOnlPutr+saIDNu3IyozC8Hcui37I3FBqc -YwTZzXtoZ9VvRdFTJ118abyv9zQVAgB89WL6xOt6AhnlkNS5FAexi8eKNMppLTg2 -r7XkZlhI+vMKdJSE/UZsTy3PQ301Z31S4IxPDyLA6BfcL1dVuEKpgOosyNXdvtiZ -1In/f3aAze9Ech6gET8g2UAGCYIP/Sjxv87ehvCvwyrKXTPrtvL9PGnRfJUv4EDn -wOiNGS9Ki2vqUkVEay/6IIuRfwAVXw1Ln8RZmFJmp9g3aqqy7Y6NdyX57Jk14OdV -of19ykiFd9ZF/RMBwfP77gvELqeEm3JlB0OBeCgnaWnlQGZcs/jSqqmCQFe/oJ1V -8ySLyWos8IfvM20uK4STuutXF13GIBg4lcW5Er5AqjNIKlsNGfp0kwDAR3McKgcf -x7tVqPvDA8gEftgj/ry9s6cft2352WR3QGbSTUKefOs+utaGZZMMgWt7LsUe54zN -ee4kCeouGXjnu/lTnXazm6BKIgq9CxMYIPU/wP8s/He3sdGOsNVtnR3xb2TLbMLt -fIKPrTpumO8QiMXWFGD7pfdOnCZJ32vmCjKBcxgB/QdQzK35k/3EGgn44+hvX4E1 -OBBi97xC4x4HplQZsjud -=HUUN +iQIcBAABCAAGBQJYV1qhAAoJEFAslq9JXcLZBk8P/R61sxn625uxedhGkghlBeMG +eig8G8jh3phTRc9Cj4dBK/gpzV0m3rb7ZTamWweO80s3WAJHCG2wt6LSY3OSOTXk +zXPzO0BPh9+E4zNY8OsGuYlny9/R52AvQJIoe7e6Av1hnMMMVfDeLEit4P2rlkH0 +0FJQtZonIi2hB6k/qHOH56MX3MGxWx6oqYUHKm1j+SeAFoEaCOd859+suarsVro5 +LtEaM2SZk8ey3iXcXv5uuUxLQywB6Xj8ldg0wOEJWSXsBNpokWG2SXYQpb2NnDdK +YJTz9hozVltRGO/cu/n8L8oUdpraflG9Bab3AS94ge8e4R9D3ZHFgzb2qASPykIK +CZGioPet1uXu7Gie1KQfxa2oaCLwSsvnwoTc5wKRuOc20qpfr4MOkNXlTAzcdQiI +ue1FR2tn6WQKj08FOeKDg9jaJh+Ijb/T0V7/FXEEcZ/hmNlY6xRMo+Sx1loT1OMC +4cv82B/aX0esNNjQgvNOOCw0LsuwhCcTILd7JX7DxQlVZ4eQYPO9FVrYdOYm7Gcl +N3nkyn5Rddo9OU/fIJGa+Dc6qqiJak5bXVDyGO7Z9jwy6N6cdN1T3XKNnk6kb8nJ +rrkRn0Lt5Jsap8yk+N35HxK4j+4mDgrbZqT2r2/DMuC+bkEBx9dATsKe2So0DYb0 +boTTCES9e1rsLTG0kwVo +=SxLw -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy +++ client/1.0/neutral/pkgr.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - ae81f124-a07b-4d2b-93fe-7df620076a90 + 884ed82e-1119-488c-aa4b-9e59d0b2e9f2 SHA512 Script - 2016-12-18T21:45:50.7265625Z + 2016-12-19T03:56:33.4648437Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgr.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr.eagle.harpy.asc +++ client/1.0/neutral/pkgr.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVwQgAAoJEFAslq9JXcLZbsgQALatwV8267QDzHrDHW+18vu1 -gcmYc2ufKElQ/TC3eO+tClrLq57lSs7Q96ervPsK/zhpqFaGs6iNQjOk+zxguP2N -TNAmTiH7mTEnodg+8EAgxzpc/Oysgd/PFjeXduK+cyjCwqxTtkv3WDYyT+HtAEYQ -KK4JMM2eMTYb015CCceRj9stkd74aexQcKK7QzXOf7PmxxqRhyxw+ukP/XNkrIGA -iq7jSAV6ml8Z+ASkGIm4l4cMQ3yQMABB8xgda2svhvvmrAmPm0pEutserZFA9k9s -QF1QdEgzMb8STmj3zFiFBRUX/J9HRBaf7F9Bbn8WJzqjia1rzrpb6D6XNZBGt0ww -Qm6X0Zh6qL89Wlz6oQimg6kXOMpd84IN3f7mECGBY+Av+/byeZXzDBfeqJ+a54F/ -mev4tWdQtfnro0BGN5z/3nz13LVCgt9mp8o/UKn92FUL4738jIUAIpXAstMIihJZ -uMzr4fF+9kSgweWuD25folUy5mFxE2ZJJES/dVFuxY6hFv8RRqrLHppGOVw9EQoi -baJNWQhyFxBYCxj58cAPdmOp2Vk2teU/ePu94nwAauPto+2scAsYOwQDFL6I+V/G -TzOoq2Cc4JrhV6PS5e21Vj3fJms51rF6ZfFXrntxWHhU3wyyRrTqSH5AR2HIynbc -8H/k8gJ8I+WOp0v8UarK -=kXjW +iQIcBAABCAAGBQJYV1qjAAoJEFAslq9JXcLZN4YP/RMTQeRmnOHVaZZ5voONVqy4 +dtYh/ZvbiDdnohwuRr3o951+FD2iuoQKEInRivyQAliuTHp1qFdriG3oALKlh7X+ +mqjumejW1jyLciS+lxqDHCxYP5zuSahF4oEIo+4bdP8nG2+vsr2brUvLqiuuSsKw +v+9J4gC9XvALl21yAGXWQw4uiPoHOmzRfrpkfCdPfcsxx2wLaeKqYUiBr50Ap1Ip +0CAEBT7jXqeC+qdqdxsD52JLiMnNAmSZup15vtKbJIei2z3ac03kyJSeY1zB83VS +ZWkXcyncEdSqZSWjZ93oEB2hScDKUbAmewb8rJRkCbTJbu/xHMGEW1QCIdlRtLGh +n1js497t32lXTeIe4DKCo8scgF1Q1gKNrYssiRTSHC6Z4YwTzDI7cwxISkXrJXUM +7uRMDusaUV17cYobUiB2h6dzgmrYYFW4BApsSF0TnwH83TIpxvY9sbNIaHFdi9IQ +RYu6UKP+Hx9ipr9CVoj/fNLoeKcw/v7+i2hy/fNkZlHFzLuIEVNcni3QWRtpK2Bp +27wXrPM1c72ZQrPFb4zzF3wxxYPHj9zbhBDUvZdFZy2NvC+8WOqtnnDZh9/RsV/j +HbKqGeAqDYNyCrEjDHv8JhYcCugp/3yPUH+WFcsNpbOSBynJyLDv+r1vq6TmSHHp +7LKbHF0Umv/7+Dm5Wy/h +=59LI -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr_upload.eagle ================================================================== --- client/1.0/neutral/pkgr_upload.eagle +++ client/1.0/neutral/pkgr_upload.eagle @@ -83,10 +83,19 @@ variable fossilCommitPattern; # DEFAULT: {^New_Version: ([0-9a-f]{40})$} if {![info exists fossilCommitPattern]} then { set fossilCommitPattern {^New_Version: ([0-9a-f]{40})$} } + + # + # NOTE: Emit diagnostic messages when a new package is submitted? + # + variable verboseMetadataSubmit; # DEFAULT: false + + if {![info exists verboseMetadataSubmit]} then { + set verboseMetadataSubmit false + } } # # NOTE: This procedure returns a string value, formatted for use within a # script block being processed by the [string map] command. The @@ -310,10 +319,149 @@ %ns%::logoutAndResetCookie }] }]] } + # + # NOTE: This procedure creates textual data that conforms to the content + # type "multipart/form-data", per RFC 2388. The boundary argument + # is a boundary value, as specified in section 4.1 of the RFC. The + # request argument is the dictionary of name/value pairs to include + # in the form body. This procedure may not raise script errors. + # + proc createMultipartFormData { boundary request } { + set result "" + + foreach {name value} $request { + append result -- $boundary \r\n + append result "Content-Disposition: form-data; name=\"" + append result $name \"\r\n\r\n + append result $value \r\n + } + + if {[string length $result] > 0} then { + append result -- $boundary --\r\n + } + + if {[isEagle]} then { + return [object create -alias String $result] + } else { + return $result + } + } + + # + # NOTE: This procedure returns the full URI to use when submitting a new + # package to the package repository server. There are no arguments. + # This procedure may raise script errors. + # + proc getSubmitUri {} { + # + # NOTE: Fetch the base URI for the package repository server. If it + # is not available for some reason, just return an empty string + # to the caller (i.e. as we cannot do anything productive). + # + set baseUri [::PackageRepository::getLookupBaseUri] + + if {[string length $baseUri] == 0} then { + return "" + } + + # + # NOTE: Build the HTTP request URI and include the standard query + # parameters (with constant values) for this request type. + # + if {[isEagle]} then { + return [appendArgs \ + $baseUri ?raw=1&method=submit] + } else { + package require http 2.0 + + return [appendArgs \ + $baseUri ? [::http::formatQuery raw 1 method submit]] + } + } + + # + # NOTE: This procedure attempts to submit the metadata for a new package to + # the package repository server. Upon success, an empty string will + # be returned. Upon failure, a script error will be raised. The + # apiKey argument is the list of API keys to use. The package argument + # is the name of the package. The patchLevel argument is the specific + # patch level being submitted. The language argument must be an empty + # string, "Tcl", or "Eagle". If it is an empty string, the current + # language will be assumed. The script argument is the script to be + # evaluated when the package needs to be provided. The certificate + # argument is the certificate associated with the script, which may be + # an OpenPGP signature or a Harpy script certificate. + # + # + proc submitPackageMetadata { + apiKey package patchLevel language script certificate } { + variable verboseMetadataSubmit + + # + # NOTE: Fetch the submission URI for the package repository server. If + # it is not available for some reason, raise a script error. + # + set uri [getSubmitUri] + + if {[string length $uri] == 0} then { + error "" + } + + if {[string length $language] == 0} then { + set language [expr {[isEagle] ? "Eagle" : "Tcl"}] + } + + if {[isEagle]} then { + set boundary [string map \ + [list + "" / "" = ""] [base64 encode [expr {randstr(50)}]]] + } else { + set boundary [::PackageRepository::getUniqueSuffix] + } + + set contentType [appendArgs \ + "multipart/form-data; boundary=" $boundary] + + set formData [createMultipartFormData $boundary \ + [list apiKey $apiKey package $package patchLevel \ + $patchLevel language $language script $script \ + certificate $certificate]] + + if {[isEagle]} then { + if {![object invoke Eagle._Tests.Default \ + TestHasScriptNewWebClientCallback ""]} then { + set error null + + set code [object invoke Eagle._Tests.Default \ + TestSetScriptNewWebClientCallback "" true true error] + + if {$code ne "Ok"} then { + error [getStringFromObjectHandle $error] + } + } + + set script [object create String { + if {[methodName ToString] eq "GetWebRequest"} then { + webRequest ContentType $contentType + } + }] + + return [uri upload \ + -inline -raw -encoding identity -webclientdata \ + $script -data $formData $uri] + } else { + set options [list \ + -binary true -type $contentType -query $formData] + + return [eval ::PackageRepository::getFileViaHttp \ + [list $uri] [list 20] [list stdout] [list \ + [expr {!$verboseMetadataSubmit}]] $options] + } + } + # # NOTE: This procedure attempts to stage the specified package files using # Fossil. The fileNames argument is a list of (fully?) qualified # local file names to stage. # @@ -427,10 +575,13 @@ # be tweaked to account for changes to the Package Repository Client # package. # namespace eval ::PackageRepository { variable verboseUriDownload true + variable autoRequireGaruda false + variable autoLoadTcl false + variable autoHook false } # # NOTE: This package requires both the package repository and downloader # client packages. Index: client/1.0/neutral/pkgr_upload.eagle.asc ================================================================== --- client/1.0/neutral/pkgr_upload.eagle.asc +++ client/1.0/neutral/pkgr_upload.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVwQtAAoJEFAslq9JXcLZnJwQALBsQx/cyFnhirxuzPy2FRKV -PzEcn31GlctKucSzMEM6OPebLica8JpZ8F2G+EEaks4LAYEfS3L7nXsSzO5K1FkB -o6UCvho/IHvbP8Qealte7xydpAH9voxLuoZgoQvtIl4pnNy2zv+YYXX4vwiKdvkl -PttvyIlVZNhNUIKEivizmkZkN9Oj+uPqawn3FFSuUqg45jEB+h2Wc6mi0T6Hr85B -kCc56a+/w6IvMQXP/cIlY6/0Ki4ExSE4MYxJ/YuvdEDXokcTSgvuMXdhter1U8TG -X4cVHatGfjNvHPt7cjax+mRvi/md7f9xKOeI/mjDIdfqMzAMhXrP78lEO+uHqxgx -p1ugiPJYmljjiWzu/qX/onqkL95CfGIZlY4GNyd4E8nUwY/VWW0yXQwrcJdY/oic -ehfVJuenaeUUfXVDNux8meT/FnngGLoEQK9SM6HYKDlc1IUS6Oj0d68pd2hQNItC -CdJ+co8dPL1fhxGTcQUEkgTUNAbq3PmMG8J+NQQmz7MPSD/2c4d1EN5A1ZlK/l90 -GZT79FrCJholqkCcy7cJxBSRSuaw2MIc1Gsxipv74/936OSJbuG7l5fmzgcR6Ek1 -DlckRcQXsHoB5XjfjxXV/MEQpvaUvkCuSvK/yvwxtUcjAr8ve2axMhdrB/pPdlt3 -wVmzw6hrTus7pNmJsCdv -=Hylz +iQIcBAABCAAGBQJYV1qoAAoJEFAslq9JXcLZaq0QAKGNBMbsWjws8CLTFXKWts8n +aoQ7+Fe2YkGnpLIRLzc6gha/5K3suibDgZnOiSYxL5dRJnB5kJrVojaqFv2kQA9B +ZQFdSBdYGhZq2qGPIpOu/eeA3gbq0116FehPeqAIvo5wVZ1p0MWAPCau4Gg2LUGK +AY3hU55EH96a3cktuq8f+xDmmHV63ycgLCu1VAHcV/hvzpX0LpXW6n47gRsoQOff +fS4gFAzc6vlEt5F/CiYiEhXUN7UY5/F0ce6LKM5FVWclqCNZicQXwvZIn+/KF5z0 +F7riKt6QH8NGtjjGuRndGikfHmvKpjLoqAiwZ0/Y3fn9u3gPwU686iPc42eS4SUc +acEXMBrn8pM9BpSGnMIOrp5WcQDt07BLjzeX22KPWBsM1skmEqwMo+sefDAg5odK +raTnCtnFTG2r1oBNblrkF8jr0CntJpKcTTh9IlruTCMqlQxEQqYSylcLQrHO6NR7 +hKNAKUNf97v8GEjKMRHUNCYzVCDgY++ifhHOvxvf9yusMwlYLqJyFbi45sGvELpz +bQEybALCTQ7NCFom6/EV+v6e6CmnD0Hq/ho+c8rfCEJppLpu1ZUC6IVJ5o9msBwA +liKomZaH/gT+TuJJJn0KiR2sMe/g4nweVSRQyNqa6uo1erKi6/1URLIiL0Rmk+To +tsqZMJfTyHsz6EUiviyN +=5N7l -----END PGP SIGNATURE----- Index: client/1.0/neutral/pkgr_upload.eagle.harpy ================================================================== --- client/1.0/neutral/pkgr_upload.eagle.harpy +++ client/1.0/neutral/pkgr_upload.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 8a427ea5-5e28-484c-8fc6-75d2516fe10b + d6c3fbea-ed80-4cd6-acf7-df2997fc2f9e SHA512 Script - 2016-12-18T21:46:38.2734375Z + 2016-12-19T03:57:02.7109375Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/neutral/pkgr_upload.eagle.harpy.asc ================================================================== --- client/1.0/neutral/pkgr_upload.eagle.harpy.asc +++ client/1.0/neutral/pkgr_upload.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJYVwQvAAoJEFAslq9JXcLZe+oP/Rp4FbANSsPE8W02UsaCmK9c -DQm7+Gx0I8CpgCi/BXW99yotqJu4ymJ3XcrUkovJ5OtwqmyOUg4s5Q91K4lohSTk -Oqf5b+Vn7qQkzkf7ZH9H6DgBI1jRQfpHmpHxLMbQzKD3Empdq0YQgEjDtE1V2FId -QTjidrwJQm44SS1TsLUBWUp6l1tbqR2dAz5wfw8vTwUWVFepxywK0E/xPISRVXNX -1O9HBIZ0xuQoJhNo/1ARKXAa0nDybC4oH/PhuwsaTUsJER83GuEzs52/ProejlGm -gRstZmtzGd4eOabGzlnQGFI4ql/FLDvCKIwO0qRKx2z4YJYl1EgrCSCeaGf25upb -kSMEKByPZUBFiLhh6HgzTswyZk32hcc5O66rrQe/qnA4PBhputXeaPB7UIDAmJlB -z7UigHmnvIKVX3ZS+gzr0FncBLn1BrTMaBlOM403wXexKTG6p2EXOR4EWnLzYytK -K9pm0x1HPd3sYKjUWZrNlHzR2pAeAFSVpYSdP/FkIn6kqSepLuxen1JX5EXp0z4Z -bNqQMVFFQ3fVdF0u91LefMuPrZ1fE1qp6cFJ+MTXlMUxQiPj7VVkRyqJi7dve0ka -x/GIBn/8QhDsf/I9p+ZwhtLn/hxjlo/X0EX5Pb5D+7aEzqkQbKJ+aSCS5QkCEtVX -DpCHEnVVybZlM0TSvV6m -=y+0H +iQIcBAABCAAGBQJYV1qpAAoJEFAslq9JXcLZ1pMQAISOMNMTqtogHUMFqsnNevUV +HMCgTAqXiAhvhnGtVdUJHCqjGM2mpcmrfN6Yd8bA1lb18S3+J6hLpHArcSAS+SZh +g0pmepb+48k6T+2TB1owiZYOLYMOzvlCUDQPDTMmCuCEJlATtowgci4CBfJ9L26D +RvYhQTiPt1S8XLpH7/KvMXjaenNs6Mmcwm35A9aW8AVxC6khKe5yQ8eExtLYLIW6 +qJOv2Iis6mcxkb02psqDcHOhMMg+rhpWCxPOjL85xkacoiBPM7CsKfWCPSVO+fXF +UZyYoifqlBrYFD+rynGHuAl7TICIRraM/o542spj3wJ8Zinfk+AtizFSOaGs1au9 +XQ84qfCvnoMiP5cwv58wt/1/YF0Z2VwMIZjWfz6G7gXZRRevID4pQyyWVQGLDZQs +2UsSZ9KmaZPJfn9egyz579kEwpPwv5AU8Q7Qcx5DdHJoDaqAI2J+Idk97GHFNv/D +hTmNdsJyFpEucwVIJpdK6n00vG0OFsrtkQwEvCx4O+sDEeQ7wtdD6TwLSJimmnXk +NttnWjTJ9fxYXUjWFxQVNTICf55nri6I1XxIC5DLGfch6ObCF7z8KK8BQ4oEOg6T +OVpbz/eJbP4qkH4rCboX3CZbrL0FASaacjjMyduhx2whcwSLXFdQpQ9tH5TUsVLc +VRnkyutCYQ1ecBpk+9bu +=9XRy -----END PGP SIGNATURE-----