Index: client/1.0/pkgr.eagle ================================================================== --- client/1.0/pkgr.eagle +++ client/1.0/pkgr.eagle @@ -443,19 +443,20 @@ return https://urn.to/r/pkg; # NOTE: System default. } # # NOTE: This procedure returns the full URI to use when looking up a - # specific package via the package repository server. The apiKey - # argument is the API key to use -OR- an empty string if a public - # package is being looked up. The package argument is the name - # of the package being looked up, it cannot be an empty string. - # The version argument is the specific version being looked up - # -OR- an empty string for any available version. No HTTP request - # is issued by this procedure; it just returns the URI to use. - # - proc getLookupUri { apiKey package version } { + # specific package via the package repository server. The apiKeys + # argument is the list of API keys to use -OR- an empty list if a + # public package is being looked up. The package argument is the + # name of the package being looked up, it cannot be an empty + # string. The version argument is the specific version being + # 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 } { set baseUri [getLookupBaseUri] if {[string length $baseUri] == 0} then { return "" } @@ -463,21 +464,38 @@ # # NOTE: Build the HTTP request URI using the specified query parameter # values, escaping them as necessary. Also, include the standard # query parameters with constant values for this request type. # + set anonymousApiKey "" + if {[isEagle]} then { - return [appendArgs \ - $baseUri ?raw=1&method=lookup&apiKey= [uri escape uri $apiKey] \ - &package= [uri escape uri $package] &version= [uri escape uri \ - $version]] + if {[llength $apiKeys] > 0} then { + return [appendArgs \ + $baseUri ?raw=1&method=lookup&apiKeys= [uri escape uri \ + [join $apiKeys ,]] &package= [uri escape uri $package] \ + &version= [uri escape uri $version]] + } else { + return [appendArgs \ + $baseUri ?raw=1&method=lookup&apiKey= [uri escape uri \ + $anonymousApiKey] &package= [uri escape uri $package] \ + &version= [uri escape uri $version]] + } } else { package require http 2.0 - return [appendArgs \ - $baseUri ? [::http::formatQuery raw 1 method lookup \ - apiKey $apiKey package $package version $version]] + if {[llength $apiKeys] > 0} then { + return [appendArgs \ + $baseUri ? [::http::formatQuery raw 1 method lookup \ + apiKeys [join $apiKeys ,] package $package version \ + $version]] + } else { + return [appendArgs \ + $baseUri ? [::http::formatQuery raw 1 method lookup \ + apiKey $anonymousApiKey package $package version \ + $version]] + } } } # # NOTE: This procedure returns the version of the package that should be @@ -524,22 +542,22 @@ } # # NOTE: This procedure issues an HTTP request that should return metadata # that can be used to load and/or provide the specified package. - # The apiKey argument is the API key to use -OR- an empty string if - # a public package is being looked up. The package argument is the - # name of the package, it cannot be an empty string. The version - # argument is the specific version being looked up -OR- an empty - # string for any available version. This procedure may raise script - # errors. All line-endings are normalized to Unix-style; therefore, - # all script signatures must assume this. - # - proc getLookupData { apiKey package version } { + # The apiKeys argument is the list of API keys to use -OR- an empty + # list if a public package is being looked up. The package argument + # is the name of the package, it cannot be an empty string. The + # version argument is the specific version being looked up -OR- an + # empty string for any available version. This procedure may raise + # script errors. All line-endings are normalized to Unix-style; + # therefore, all script signatures must assume this. + # + proc getLookupData { apiKeys package version } { variable verboseUriDownload - set uri [getLookupUri $apiKey $package $version] + set uri [getLookupUri $apiKeys $package $version] if {[string length $uri] == 0} then { return "" } @@ -1636,30 +1654,39 @@ proc getPackageFromRepository { package version caller } { # # NOTE: Get the list of API keys and try each one, in order, until # the package is found. # - set apiKeys [getApiKeys]; lappend apiKeys "" - - foreach apiKey $apiKeys { - # - # NOTE: Issue the lookup request to the remote package repository. - # - set data [getLookupData $apiKey $package $version] - - # - # NOTE: Attempt to grab the lookup code from the response data. - # - set code [getLookupCodeFromData $data] - - # - # NOTE: Did the lookup operation succeed? If so, stop trying - # other API keys. - # - if {[isLookupCodeOk $code]} then { - break - } + set apiKeys [getApiKeys] + + # + # NOTE: Issue the non-anonymous lookup request to the remote + # package repository. + # + set data [getLookupData $apiKeys $package $version] + + # + # NOTE: Attempt to grab the lookup code from the non-anonymous + # response data. + # + set code [getLookupCodeFromData $data] + + # + # NOTE: If necessary, fallback with to an anonymous request. + # + if {![isLookupCodeOk $code]} then { + # + # NOTE: Issue the anonymous lookup request to the remote + # package repository. + # + set data [getLookupData [list] $package $version] + + # + # NOTE: Attempt to grab the lookup code from the anonymous + # response data. + # + set code [getLookupCodeFromData $data] } # # NOTE: Attempt to grab the lookup data from the response data. # Upon failure, this should contain the error message. Index: client/1.0/pkgr.eagle.asc ================================================================== --- client/1.0/pkgr.eagle.asc +++ client/1.0/pkgr.eagle.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJX7A78AAoJEFAslq9JXcLZk3kP/3kmLvp+dcnZSqskyXduQAGo -ZCpzS6W2wM/xaweqUppHWaYvkhvDM6wmKSLFG5W0bWNnTDqaqXTnonQQnTq9dOHg -2GW5Xlhekvl1S+nHT5ymF8saQSLuyoTuhR2qmPFwgSdYVfiTTaf+KmlwmEgEUxTC -1nT8m0fDtcaizTnYExddMUizu8xwf0i2g6l8VTOkabGdekdXSM6YaFPI+uj8MxI2 -ZtgE6FEFDGK1JaFcRhGnmnj5qQ8/eitGROoLHd5IIYOkoT9C/QmWg4Slenp0a48x -sIPh7kH82f2DDR0h6uSjLnT92ivxQtkN4ypI8vbLhoY8t/AqzUIXJHvJwg24wpCK -1JticeHO5ai3+ELHToDOBmP3VUXv9wzdmyJT5cxngYsbMddH2H+wVH8oEYsemrsA -a4Bjv1nOkDPTkndDWvwmlSjyV8eQwv+1uxLFxD6mzTm0XVfEZjPo03Vr0XsnplKR -5XK/HeoR/idDN0hytogN1c+Y0UwHU1LBY6WgiYVOy7Qtmk8XRg8kqUlscERjrlUN -y28UiMk2feZDWcufdeW0zFomCZUg66yYE+8p+s0k/0ZhUY/dhbr+szdt9zmpH900 -mShLyLfMECKknK+maUYcy99CZx44UO3rU2Xw1FaXrBn4bf6+MSWMX4n3aTI42k2J -iRQmgtxXiHWTGdZ1Lm37 -=uaXk +iQIcBAABCAAGBQJYBT/8AAoJEFAslq9JXcLZWGoQAIA/IPYRK0t30qWVe2eQIR1M +vbXGy5XyQaQQHmTHDY61y5kFbnlJoSrwJRX46uTttkp3u0FnfxtLEYQSvIVBWkYx +IonkPHcgRQpfJXSDqV/z6bdMApTwkoU9iOAtK9rH4qq1CfYoi4WGpG2n/KPqfXtm +4Cs6WUVywhNu4ZKZABDqpIDezxWsR6SujBGRKZwfbTLGdnpXJKT5BZS+GGKwp7ep +noWRpOctG2PBhs4YWnD9awcsb8+QYI8GvAbQNVL4NqFqtOUMGLcJof6Lp+/F+KQc +J4gMnrbN+u/k/Sy4oOHryz19m9+Qrnc3WzYh+NpYQeDUmmP1bSUNNZ/x5UAKjpyb +45ndI/Jjtq6VcQt/j16VmBN89ybVe3SE5xuyFoLi6tgpjdO2DO59WxU3lIQ1NQoT +CKz5H/RrYX1is2BqcB1NY2D3XvPI5tuf2bylOufCsuad9B7WQOt4hwyJmLqG+57+ +eoX2nZVFfdiZEAvQv0x644C96pC3pTAdeHq3YS+M1JpOKoi1vVx2Vxj+XJMo9dR7 +IW+K1Q1fM9RBJOiw7M5k9ZSQ6JCJaWXb76EY4FA4YKb8VqwapvoUpu5+ff67O0px +66qbVL5oUxLW2hU9SkYPN0eM/wBj8+aFWPcc2QgoUUP/M2TlXPJgdT6kv4WRcrL3 +vO6v4yswIT4zc1eq4Tvx +=crRO -----END PGP SIGNATURE----- Index: client/1.0/pkgr.eagle.harpy ================================================================== --- client/1.0/pkgr.eagle.harpy +++ client/1.0/pkgr.eagle.harpy @@ -19,50 +19,50 @@ None Mistachkin Systems - 538013fa-7c77-40b5-bf50-6fd1db454a75 + 30bda9cc-69bd-4688-8b96-96e4e82a982b SHA512 Script - 2016-09-28T18:41:13.4453125Z + 2016-10-17T21:17:25.9542266Z -1.00:00:00 0x9559f6017247e3e2 - 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 Index: client/1.0/pkgr.eagle.harpy.asc ================================================================== --- client/1.0/pkgr.eagle.harpy.asc +++ client/1.0/pkgr.eagle.harpy.asc @@ -1,18 +1,18 @@ -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 Comment: Eagle Package Repository -iQIcBAABCAAGBQJX7A79AAoJEFAslq9JXcLZ+aMQAI+yYLpA/0pRKbZHOCAWAShb -dlJrNcMOoI9+OWXYP86SPLzx5LzW/XGiq0JclR0jiZOVSsLEr3utW+9LWg15erC9 -2DUf8mmlwEm7nUjc6pteJtg1DzliIn2+L44xZpxSqmPkCb27Lnw7hZ9c3bvnbp9M -ygMvyHdy70suepuxJIgnwaGGC2GYPCxFOAqiCf8xWxcMUbNsHVkS79PBnRGvNQvl -ybJoHLQGBGVB7zahSDItqgwt8wsqiB0W1WJQtjQ8wJQgKajgO6G3f56fo1YBB8zD -1DoFJT+cWp5uyCEeGubb952ZYgBNypkzrTLYPrtm4WpWjXdOJFhDih4MmEWypEDM -3Gye8TOSMlQ5ecjuy/NQcQiyTeTw61OYVt8cvaeYng5FB7Xl0pUdxYyNYWvZPJzw -IKpvX7gWPg42H6iZegKRALfKLeSuwTcudi0AYylELEdwIvbhOdri5ShOyJrzlRvy -uAnSn+iUHDVxUkkB+3NukRu6/IZRRdXDeZM4/LFTPfQMwCGgCmlDpMqDrqiV8fcJ -CzjruOjsUxmKynT7bR4SGWiYGardcrNcmnHueBh5mx7w8P+EUGlvmQS9DLf5kfhK -+NVgjEJ7DkVVc5Ymmo8d9+55tfKPx6QN4fykj5IHBk/z3fj1yup3GnG/W1T89AcD -erf7/lONa+FNcXte7E/c -=nhxk +iQIcBAABCAAGBQJYBT/+AAoJEFAslq9JXcLZr3EQAK21y4o0OA6UEZNVnkE0lMRH +HIycdG/mXLuL8ulshgP7U7nKHBu3kbglDvd9+uQDyzryVBIBKxXoeNZJ15jB0lPi +ZjTLuMtKk7nnwwMu280Kmo2d7iVNl2GX1BhjloGvsNelb/Hzcc6YEt4aqlGU0qVB +dQAeI5KKnDKGbT/aede4qO80kcY1MPGWeE0sc6m/pJNWzPgt4bhlKqqhE/FxjgQ+ +Ius/Bc1OM2NFFFoBQ3Xb6zg48UtOCJfqBvTG18p73Q0mUlfwLZBv3PW56jYa6c7/ +PViAPUddridOrs4D5iR4CpnUtGgNxiXLiH91ucfhC+Cc3IIduXn8I2Kuwd7DZ8R5 +M6QzwrPxpHs7eBfL3Nw4a3hQKnNQX2ljXCdOyQTYu5Ijcx9tua/HgAn/bwuYpfJc +EJAUYYs42u71AYdRl+99CG++OQ2730vauQUwpQxHwymKssQOz5IawTKa2L06O1dh +QQAc+3YM8j5HD5x3BjoQa0mMq2AJzR6AmgHoWEOWWiks4DS4DM8Hb6wEulGX5Sba +H4f2LJuNVIrYOllUd0TZDIoDPyTpzsvOnkwkTsX4X7JApXp9p8tiSfYjl+1hqNfH +fXMEvBdnBxSwn0/d6tOejK7n/NiqCcLz1Wpny2QFqJ4IlEs10p+5xAJm/9h1Hm76 +Ao/TX4b8851HTKKS7n7d +=MsgF -----END PGP SIGNATURE-----