Check-in [af1f559982]
Not logged in
Overview
Comment:More refactoring of the native Tcl 'getFileViaHttp' helper procedure.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: af1f55998294f86412e6c6c5bf9574bd721a4e2b
User & Date: mistachkin on 2016-09-18 03:32:44
Other Links: manifest | tags
Context
2016-09-18
04:03
Add the HTTP status code 300 as 'unsupported' instead of 'unrecognized'. check-in: 36c123618c user: mistachkin tags: trunk
03:32
More refactoring of the native Tcl 'getFileViaHttp' helper procedure. check-in: af1f559982 user: mistachkin tags: trunk
2016-09-17
23:58
Re-sign the 'client/1.0/pkgIndex.eagle.harpy.asc' file with GPG. check-in: da23537a44 user: mistachkin tags: trunk
Changes

Modified client/1.0/pkgr.eagle from [2617b2dd5b] to [383b0cc171].

1470
1471
1472
1473
1474
1475
1476
1477

1478
1479
1480


1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492

1493
1494
1495













1496
1497
1498
1499
1500
1501
1502
1470
1471
1472
1473
1474
1475
1476

1477
1478


1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491

1492
1493


1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513







-
+

-
-
+
+











-
+

-
-
+
+
+
+
+
+
+
+
+
+
+
+
+







  #
  proc setupPackageUnknownVars {} {
    #
    # NOTE: Should the HTTP request processor attempt to force the use of
    #       HTTPS for URIs that were originally HTTP?  This setting is only
    #       applicable to native Tcl.
    #
    variable forceSecureHttps; # DEFAULT: true
    variable forceSecureUri; # DEFAULT: true

    if {![info exists forceSecureHttps]} then {
      set forceSecureHttps true
    if {![info exists forceSecureUri]} then {
      set forceSecureUri true
    }

    #
    # NOTE: Is this HTTP request processor allowed to use plain HTTP if/when
    #       the "tls" package is not available?  This should only be changed
    #       if the "tls" package cannot be easily installed for use with the
    #       native Tcl interpreter in use.  It should be noted here that the
    #       official package repository server reserves the right to refuse
    #       plain HTTP connections, which means that changing this setting
    #       may be totally pointless.
    #
    variable allowInsecureHttp; # DEFAULT: false
    variable allowInsecureUri; # DEFAULT: false

    if {![info exists allowInsecureHttp]} then {
      set allowInsecureHttp false
    if {![info exists allowInsecureUri]} then {
      set allowInsecureUri false
    }

    #
    # NOTE: Is this HTTP request processor allowed to use plain HTTP if/when
    #       the server responds with an HTTP redirect location to an original
    #       URI that was HTTPS?  Otherwise, a script error will result.
    #
    variable allowInsecureRedirect; # DEFAULT: false

    if {![info exists allowInsecureRedirect]} then {
      set allowInsecureRedirect false
    }

    #
    # NOTE: What is the default set of API keys if none were set explicitly?
    #       This list is subject to change at any time -AND- may be empty or
    #       may contain non-working API keys, please do not rely on it.
    #
1708
1709
1710
1711
1712
1713
1714
1715

1716
1717
1718
1719
1720
1721
1722
1723
1724

1725
1726
1727
1728
1729







1730

1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751

1752
1753
1754
1755

1756
1757
1758




1759
1760
1761
1762
1763
1764
1765
1719
1720
1721
1722
1723
1724
1725

1726

1727
1728
1729
1730
1731
1732
1733

1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746

1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767

1768
1769
1770
1771
1772
1773



1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784







-
+
-







-
+





+
+
+
+
+
+
+
-
+




















-
+




+
-
-
-
+
+
+
+







      }
    }

    #
    # NOTE: This procedure was stolen from the "getEagle.tcl" script.  It is
    #       designed to process a single HTTP request, including any HTTP
    #       3XX redirects (up to the specified limit), and return the raw
    #       HTTP response data.  It does not contain special code to handle
    #       HTTP response data.  It may raise any number of script errors.
    #       HTTP status codes other than 3XX (e.g. 4XX, 5XX, etc).
    #
    # <public>
    proc getFileViaHttp { uri redirectLimit channel quiet args } {
      #
      # NOTE: This variable is used to determine if plain HTTP URIs should be
      #       converted to HTTPS, if the "tls" package is available.
      #
      variable forceSecureHttps
      variable forceSecureUri

      #
      # NOTE: This variable is used to determine if plain HTTP is allowed if
      #       the "tls" package is not available.
      #
      variable allowInsecureUri

      #
      # NOTE: This variable is used to determine if plain HTTP is allowed if
      #       an HTTP redirect response contains an HTTP URI and the original
      #       URI was HTTPS.
      #
      variable allowInsecureHttp
      variable allowInsecureRedirect

      #
      # NOTE: This variable is used to keep track of the currently scheduled
      #       (i.e. pending) [after] event.
      #
      variable afterForPageProgress

      #
      # NOTE: This procedure requires the modern version of the HTTP package,
      #       which is typically included with the Tcl core distribution.
      #
      package require http 2.0

      #
      # NOTE: If the 'tls' package is available, always attempt to use HTTPS;
      #       otherwise, only attempt to use HTTP if explicitly allowed.
      #
      if {[catch {package require tls}] == 0} then {
        ::http::register https 443 [list ::tls::socket -tls1 true]

        if {$forceSecureHttps} then {
        if {$forceSecureUri} then {
          if {[string range $uri 0 6] eq "http://"} then {
            set uri [appendArgs https:// [string range $uri 7 end]]
          }
        }
      } else {
      } elseif {$allowInsecureHttp} then {
        if {[string range $uri 0 7] eq "https://"} then {
          set uri [appendArgs http:// [string range $uri 8 end]]
        if {$allowInsecureUri} then {
          if {[string range $uri 0 7] eq "https://"} then {
            set uri [appendArgs http:// [string range $uri 8 end]]
          }
        }
      }

      #
      # NOTE: Unless the caller forbids it, display progress messages during
      #       the download.
      #
1776
1777
1778
1779
1780
1781
1782






1783
1784
1785
1786
1787
























1788
1789
1790
1791


1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807

1808
1809
1810
1811

1812
1813
1814
1815


1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835



1836

1837

1838
1839
1840

1841
1842
1843
1844



1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860

1861
1862
1863
1864
1865
















1866





1867
1868
1869
1870
1871
1872
1873
1874



1875
1876
1877
1878
1879
1880
1881
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811

1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838

1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855

1856
1857
1858
1859

1860

1861


1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881


1882
1883
1884
1885
1886

1887
1888
1889

1890

1891


1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909

1910

1911



1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934







1935
1936
1937
1938
1939
1940
1941
1942
1943
1944







+
+
+
+
+
+




-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+



-
+
+















-
+



-
+
-

-
-
+
+


















-
-
+
+
+

+
-
+


-
+
-

-
-
+
+
+















-
+
-

-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+

-
-
-
-
-
-
-
+
+
+








      while {1} {
        #
        # NOTE: Issue the HTTP request now, grabbing the resulting token.
        #
        set token [eval [list ::http::geturl $uri] $args]

        #
        # NOTE: Grab the HTTP response code and data now as they are needed
        #       in almost all cases.
        #
        set code [::http::ncode $token]; set data [::http::data $token]

        #
        # NOTE: Check the HTTP response code, in order to follow any HTTP
        #       redirect responses.
        #
        switch -exact -- [::http::ncode $token] {
        switch -glob -- $code {
          100 -
          101 -
          102 {
            ::http::cleanup $token; error [appendArgs \
                "unsupported informational HTTP response status code " \
                $code ", data: " $data]
          }
          200 -
          201 -
          202 -
          203 -
          204 -
          205 -
          206 -
          207 -
          208 -
          226 {
            #
            # NOTE: Ok, the HTTP response is actual data of some kind (which
            #       may be empty).
            #
            ::http::cleanup $token; break
          }
          301 -
          302 -
          303 -
          307 {
          307 -
          308 {
            #
            # NOTE: Unless the caller forbids it, display progress messages
            #       when an HTTP redirect is returned.
            #
            if {!$quiet} then {
              pageProgress $channel > 0
            }

            #
            # NOTE: We hit another HTTP redirect.  Stop if there are more
            #       than X.
            #
            incr redirectCount

            #
            # TODO: Maybe make this limit configurable?
            # TODO: Maybe make this limit more configurable?
            #
            if {$redirectCount > $redirectLimit} then {
              #
              # NOTE: Just "give up" and return whatever data that we have
              # NOTE: Just "give up" and raise a script error.
              #       now.
              #
              set data [::http::data $token]
              ::http::cleanup $token; break
              ::http::cleanup $token; error [appendArgs \
                  "redirection limit of " $redirectLimit " exceeded"]
            }

            #
            # NOTE: Grab the metadata associated with this HTTP response.
            #
            array set meta [::http::meta $token]

            #
            # NOTE: Is there actually a new URI (location) to use?
            #
            if {[info exist meta(Location)]} then {
              #
              # NOTE: Ok, grab it now.  Later, at the top of the loop,
              #       it will be used in the subsequent HTTP request.
              #
              set location $meta(Location); unset meta

              #
              # NOTE: For security, do NOT follow an HTTP redirect if
              #       it attempts to redirect from HTTPS to HTTP.
              # NOTE: For security, by default, do NOT follow an HTTP
              #       redirect if it attempts to redirect from HTTPS
              #       to HTTP.
              #
              if {!$allowInsecureRedirect && \
              if {[string range $uri 0 7] eq "https://" && \
                  [string range $uri 0 7] eq "https://" && \
                  [string range $location 0 7] ne "https://"} then {
                #
                # NOTE: Just "give up" and return whatever data that
                # NOTE: Just "give up" and raise a script error.
                #       we have now.
                #
                set data [::http::data $token]
                ::http::cleanup $token; break
                ::http::cleanup $token; error [appendArgs \
                    "refused insecure redirect from \"" $uri "\" to \"" \
                    $location \"]
              }

              #
              # NOTE: Replace the original URI with the new one, for
              #       use in the next HTTP request.
              #
              set uri $location

              #
              # NOTE: Cleanup the current HTTP token now beause a new
              #       one will be created for the next request.
              #
              ::http::cleanup $token
            } else {
              #
              # NOTE: Just "give up" and return whatever data that we
              # NOTE: Just "give up" and raise a script error.
              #       have now.
              #
              set data [::http::data $token]
              ::http::cleanup $token; break
            }
              ::http::cleanup $token; error [appendArgs \
                  "redirect from \"" $uri "\" missing location, code " \
                  $code ", data: " $data]
            }
          }
          304 -
          305 -
          306 {
            ::http::cleanup $token; error [appendArgs \
                "unsupported redirection HTTP response status code " $code \
                ", data: " $data]
          }
          4?? {
            ::http::cleanup $token; error [appendArgs \
                "client error HTTP response status code " $code ", data: " \
                $data]
          }
          5?? {
            ::http::cleanup $token; error [appendArgs \
                "server error HTTP response status code " $code ", data: " \
                $data]
          }
          default {
            #
            # NOTE: Ok, the HTTP response is actual data of some kind
            #       (which may be an error); however, it is not any
            #       kind of supported HTTP redirect.
            #
            set data [::http::data $token]
            ::http::cleanup $token; break
            ::http::cleanup $token; error [appendArgs \
                "unrecognized HTTP response status code " $code ", data: " \
                $data]
          }
        }
      }

      #
      # NOTE: If there is a currently scheduled [after] event, cancel it.
      #

Modified client/1.0/pkgr.eagle.asc from [f042d36cae] to [25ea328ced].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJX3YvNAAoJEFAslq9JXcLZcvQP+wdEnKvWgEB2LoaPuDe5DRLL
5XBk3wGY0nBhORXg9xa5TFD/ZQYu/I8ku5Hram6ujP+aU83MKUOzdf+/5S0Zsuuf
dWmsG/wmrgRjFX0wbyIm5NIxCH8scXcFjl0aB8s4skYRpvtXGtssOToI2HY65r++
FbtkA8btny+8q6yIwOGITcRITM5ufdLV4CL2SX+PYYMmiw/xwKnR0sISPu6vuo/v
jLB7Fz/cqcxtGw8Bcw72S21cnYNK21VRxLSIMMZFGMh+jqMHNbrxwh7bwVR9KSGy
Te8moGAV3JVYCBUs1I8T0ptV1VUP8Y3LUJl4e+ovJ8GHdgzstjdjWzbeLt9ogrXq
Itxh3Y5Hdtpon8fbNixhe2gzyWjVnJeBSTwMzMsF5mRpPliPA4ZcBK477MtY35jm
tWiDz9DLptLha9/KLGeQ3kG7t0RHzInnwTIgGBlsIEghi2ZvWkrk+C5HqK8MXaGa
e/yV/4bwMUeGKd05U1FIpvpa/Am1Sjw/ein7efRc54T3Xp85Lt6rawU7foFSoTbr
6AXY4dRoLhHwr3VKzwgpYYP4gOBYzkOIFiVz4eSBNrgzSlONPJEMLgtT/UZ7yarC
bEPddm+rRs0aNoIhwznUVk96JnrmaMU2LPb3Au5tKpldumCrCitsnWhBt2w3VDc5
IY+SHdmhC1mvqXgYOrzn
=Qhta
iQIcBAABCAAGBQJX3gq5AAoJEFAslq9JXcLZ4kYP/i7cwkZGs0fSCnG9hlcHsF1R
2RQLxSxMKvslZC8wG7kjBEl4kEFornaKEvrBcNi4cH62kixU7kaXai40bhTDdRfx
wCovFa3Ie+ES/+uEBSeA7Ju7bn3l8tWaktwSqqwEhCgiW4eXFUWLgqqMZmxVn2Yb
aBk07FKci+vfFm5akZ23pVzz8IUCzh2y6AavFgE/0xkIibFrUQNn8yc4dAqM1VrB
2gZ7rvkrzF10sNGzmK5cb/F6owN9Cq4A7Rr+hsixh3KUF2Smws8tQuOEHlDa17ln
98n35Gbp34JqTaXwyUBgAWtel4SvQc36SXQoG7jH5hLtMnlhyAVnZPiiB8TgfJUU
GpQPxhd4dhLkMeg8u55ZlRbzlAcClBsQyxkzFjk7rKe0Y82ZnAPWioqtMgj0LjNG
EOLPdJG+v7wJD/yfpvkNiBbwq2DTZq5V4uDub95RS+Ck3QxX5MF8LlIX9D6v7f/O
QznTyMChbM6A4E96NLsFEHcqz85GXtSwMqez3rfX+wRlSFKXNxqYUFXFpVOWoTrS
jVrs/xeLBStdGK/a5W8vhEWuyF8SrOIXBxPO1Tn/Yzjp1sY18JCvJYckC2962+7m
ZD0nJS8KE6L5jrTA53iXU+0OVvjdhYzaMVcbKy9l/UUxo2YThdGaqah+42Ezoo56
kDLy5eoJLZ7XfE9kP40B
=tpBZ
-----END PGP SIGNATURE-----

Modified client/1.0/pkgr.eagle.harpy from [dbc42f4ac7] to [a9721b5b62].

17
18
19
20
21
22
23
24

25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66




































67
68
17
18
19
20
21
22
23

24
25
26

27
28
29
30




































31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







-
+


-
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>e4eb97a3-0d46-46e6-a2e8-250907a57841</Id>
  <Id>4eac20d8-450e-4bf5-80ce-3d7e3cdd6bdf</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-09-17T18:29:05.3652343Z</TimeStamp>
  <TimeStamp>2016-09-18T03:31:28.6953125Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x9559f6017247e3e2</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/1.0/pkgr.eagle.harpy.asc from [c099261db1] to [fd1c824126].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJX3YvPAAoJEFAslq9JXcLZtW4QALxApTX8zjqKtETnY32ZgJG3
TJ4riULFHC2hGXynu8IYGEsDx/gpCgJy/nOqlBc4XvlBzs8eyIId6f75sN6eX41d
7cRkPHs4qQMtywoZ0FeSKDuUA47+vMy2lb8PpSdYffJbJCtPLmxaaTwXkt1qG4aK
aPHACZDWJ5DAUZO3TwVKWMPWq6J0gdWjkYLKQsvWDMaH3YFu+CjKb3El0ECUXBbB
f1oEFPfvogbS56Y4ymNgvMMdHmaa5rUE7U3JTt73opvnzO1QbswkxP2dAEgiwuIm
vPo8ngSvIoGFsxNEOZa4fi2aiM+kypuv+dfBLVAV2d6afJJFyxkNH4XvthI7oUSK
J2n1S0o8F+USuSdLctk/uWnfIo7OTy4pJ1xQWezI0HxIA4GYRfPMW2RGbd/d2lCD
eOo69svCsMTiF7o41e3d3kGCPG54HtL7BkGY3wGZDWSy8x01vfqfosy08VbfQebE
PbeJjhm429bTYLlfTgjCdhi/2EZXr1vSP42NEKUu7+CWs+pzgZXCRlmLpx1IKTHh
M/vBrHn7f6FUOAtXPl0mSTWGsLKMkGDPszEaU8c1BV24VaeztsXMstmBczPMaSXY
VGRQNIyvJXjxQEd9kaIJRELAO9x985LDnOkUa3O9xOPXLiIYnxP424cmSLUcsX0r
x14PRi6k4P+8FKrN9Ro6
=0QrJ
iQIcBAABCAAGBQJX3gq8AAoJEFAslq9JXcLZSdAQALgMLzDQtG/AhqDxfMAtG0GL
J76zelZDVOU+WCSERIQYcBmbkNfYqVV9dCGBz/joOBIzsTIFbKpKhShCo0JoJzdo
zcG3vNVEw6BUdanbMUjhPiPwcsyu0qLsaZH1R+GS6g9ASKU2Z4FuDn8e+4awfX3Z
2GJKcpcE5QknNMIpUQnnNpZQvgPAS950GqpfUe8AHyaOc/JFQvBCd8h5wVoolkMZ
TmiTVt12JDbQn5yDFyVy+YYmEstxhw+bPvEYbiXYQnUAl/H+FjKmfNLwyKDsYr3H
1foS2bTFRePOwDT6AOS4LWZ/4oiz4p9iryCPjQxx66pcWx8mOWvQdI3hi3G1C0TH
CUSEoIMpu7LRwo1lgG7Pxe4MrSnHyKL/Yh0yoPsYyLNXMuUNXkpsb6JeWHFd7ItO
kUc59PplzGeX7sCDF6TCOidqzpahFOoetWYEyLWdYXO4+BDUT/UU5ibvELfdrpdX
EQU2sXSyjl/9qe4pAfObCUoY+ybk1UFkRCxnJ+YjzP+Jmg9xThyzVkC4PaGbL4hT
gTh+wh2AGtAqergPMcDacHRCO2NF808kagQhdPfsPWxCYYxN3o4e1OGr7f83xp1f
GoQGWJ5VQWR5hvy3KZyjxPebXVYHtM2/rg6Xk37AA+F0Ofwm323gijl0Lc7lm1kL
1R7gkkyQ1FV2JqNSbLCX
=TNp1
-----END PGP SIGNATURE-----