+
+(define-public stunnel
+ (package
+ (name "stunnel")
+ (version "5.39")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://www.stunnel.org/downloads/stunnel-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1vjdn32iw11zqsygwxbjmqgs4644dk3ql1h8ap890ls6a1x0i318"))))
+ (build-system gnu-build-system)
+ (inputs `(("openssl" ,openssl)))
+ (arguments
+ `(#:configure-flags
+ (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl")))))
+ (home-page "https://www.stunnel.org")
+ (synopsis "TLS proxy for clients or servers")
+ (description "Stunnel is a proxy designed to add TLS encryption
+functionality to existing clients and servers without any changes in the
+programs' code. Its architecture is optimized for security, portability, and
+scalability (including load-balancing), making it suitable for large
+deployments.")
+ (license l:gpl2+)))
+
+(define-public xinetd
+ (package
+ (name "xinetd")
+ (version "2.3.15")
+ (source
+ (origin
+ (method url-fetch)
+ (uri "https://github.com/xinetd-org/xinetd/archive/xinetd-2-3-15.tar.gz")
+ (patches (search-patches "xinetd-CVE-2013-4342.patch" "xinetd-fix-fd-leak.patch"))
+ (sha256
+ (base32
+ "0k59x52cbzp5fw0n8zn0y54j1ps0x9b72y8k5grzswjdmgs2a2v2"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags '("--with-loadavg")
+ #:tests? #f )) ; no tests
+ (home-page "https://github.com/xinetd-org/xinetd")
+ (synopsis "Internet services daemon")
+ (description "@code{xinetd}, a more secure replacement for @code{inetd},
+listens for incoming requests over a network and launches the appropriate
+service for that request. Requests are made using port numbers as identifiers
+and xinetd usually launches another daemon to handle the request. It can be
+used to start services with both privileged and non-privileged port numbers.")
+ (license (l:fsf-free "file://COPYRIGHT"))))
+
+(define-public tidy-html
+ (package
+ (name "tidy-html")
+ (version "5.4.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/htacg/tidy-html5/archive/"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0yhbgbjl45b4sjxwc394cjra6iy02q1pi66p28zy70lr6jvm9mx2"))))
+ (build-system cmake-build-system)
+ (outputs '("out"
+ "static")) ; 1.0MiB of .a files
+ (arguments
+ `(#:tests? #f ; No tests available
+ #:configure-flags (list "-DCMAKE_BUILD_TYPE=Release")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'move-static-libraries
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; Move static libraries to the "static" output.
+ (let* ((out (assoc-ref outputs "out"))
+ (lib (string-append out "/lib"))
+ (static (assoc-ref outputs "static"))
+ (slib (string-append static "/lib")))
+ (mkdir-p slib)
+ (for-each (lambda (file)
+ (install-file file slib)
+ (delete-file file))
+ (find-files lib "\\.a$"))
+ #t))))))
+ (native-inputs
+ `(("libxslt" ,libxslt)))
+ (home-page "http://www.html-tidy.org/")
+ (synopsis "HTML Tidy with HTML5 support")
+ (description
+ "Tidy is a console application which corrects and cleans up
+HTML and XML documents by fixing markup errors and upgrading
+legacy code to modern standards.
+
+Tidy also provides @code{libtidy}, a C static and dynamic library that
+developers can integrate into their applications to make use of the
+functions of Tidy.")
+ (license l:bsd-3)))
+
+(define-public hiawatha
+ (package
+ (name "hiawatha")
+ (version "10.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://www.hiawatha-webserver.org/files/"
+ "hiawatha-" version ".tar.gz"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; We use our packaged mbedtls, so delete the included copy.
+ '(delete-file-recursively "mbedtls"))
+ (sha256
+ (base32
+ "0m2llzm72s29c32abnj03532m85fawvi8ybjpx6s3mgvx2yvq3p4"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:tests? #f ; No tests included
+ #:configure-flags (list (string-append "-DUSE_SYSTEM_MBEDTLS=on")
+ (string-append "-DENABLE_TOMAHAWK=on")
+ (string-append "-DWEBROOT_DIR="
+ (assoc-ref %outputs "out")
+ "/share/hiawatha/html"))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'remove-empty-dirs
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out")))
+ ;; The directories in "var" are empty, remove them.
+ (delete-file-recursively (string-append out "/var"))
+ #t)))
+ (add-after 'install 'wrap
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Make sure 'hiawatha' finds 'mbedtls'.
+ (let* ((out (assoc-ref outputs "out"))
+ (sbin (string-append out "/sbin"))
+ (mbed (assoc-ref inputs "mbedtls-apache")))
+ (wrap-program (string-append sbin "/hiawatha")
+ `("PATH" ":" prefix (,mbed)))))))))
+ (inputs
+ ;; TODO: package "hiawatha-monitor", an optional dependency of "hiawatha"
+ `(("mbedtls-apache" ,mbedtls-apache) ;Hiawatha includes this version.
+ ("zlib" ,zlib)
+ ("libxslt" ,libxslt)
+ ("libxml2" ,libxml2)))
+ (home-page "https://www.hiawatha-webserver.org")
+ (synopsis "Webserver with focus on security")
+ (description
+ "Hiawatha has been written with security in mind.
+Features include the ability to stop SQL injections, XSS and CSRF attacks and
+exploit attempts.")
+ (license l:gpl2)))
+
+(define-public python-httpbin
+ (package
+ (name "python-httpbin")
+ (version "0.5.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "httpbin" version))
+ (sha256
+ (base32
+ "1dc92lnk846hpilslrqnr63x55cxll4qx88gif8fm521gv9cbyvr"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-decorator" ,python-decorator)
+ ("python-flask" ,python-flask)
+ ("python-itsdangerous" ,python-itsdangerous)
+ ("python-markupsafe" ,python-markupsafe)
+ ("python-six" ,python-six)))
+ (home-page "https://github.com/Runscope/httpbin")
+ (synopsis "HTTP request and response service")
+ (description "Testing an HTTP Library can become difficult sometimes.
+@code{RequestBin} is fantastic for testing POST requests, but doesn't let you control the
+response. This exists to cover all kinds of HTTP scenarios. All endpoint responses are
+JSON-encoded.")
+ (license l:isc)))
+
+(define-public python2-httpbin
+ (package-with-python2 python-httpbin))
+
+(define-public python-pytest-httpbin
+ (package
+ (name "python-pytest-httpbin")
+ (version "0.2.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pytest-httpbin" version))
+ (sha256
+ (base32
+ "1y0v2v7xpzpyd4djwp7ad8ifnlxp8r1y6dfbxg5ckzvllkgridn5"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-six" ,python-six)
+ ("python-httpbin" ,python-httpbin)
+ ("python-pytest" ,python-pytest)))
+ (home-page
+ "https://github.com/kevin1024/pytest-httpbin")
+ (synopsis
+ "Test your HTTP library against a local copy of httpbin")
+ (description
+ "@code{Pytest-httpbin} creates a @code{pytest} fixture that is dependency-injected
+into your tests. It automatically starts up a HTTP server in a separate thread running
+@code{httpbin} and provides your test with the URL in the fixture.")
+ (license l:expat)))
+
+(define-public python2-pytest-httpbin
+ (package-with-python2 python-pytest-httpbin))
+
+(define-public http-parser
+ (package
+ (name "http-parser")
+ (version "2.7.1")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/nodejs/http-parser/"
+ "archive/v" version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1cw6nf8xy4jhib1w0jd2y0gpqjbdasg8b7pkl2k2vpp54k9rlh3h"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:test-target "test"
+ #:make-flags
+ (list (string-append "PREFIX="
+ (assoc-ref %outputs "out"))
+ "CC=gcc" "library")
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure))))
+ (home-page "https://github.com/nodejs/http-parser")
+ (synopsis "HTTP request/response parser for C")
+ (description "This is a parser for HTTP messages written in C. It parses
+both requests and responses. The parser is designed to be used in
+high-performance HTTP applications. It does not make any syscalls nor
+allocations, it does not buffer data, it can be interrupted at anytime.
+Depending on your architecture, it only requires about 40 bytes of data per
+message stream (in a web server that is per connection).")
+ (license l:expat)))
+
+(define-public python2-httpretty
+ (package
+ (name "python2-httpretty")
+ (version "0.8.14")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "httpretty" version))
+ (sha256
+ (base32
+ "0vlp5qkyw3pxwwsg7xmdcfh1csvypvaz4m6abida8s4xmjxpdhc3"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-sphinx-rtd-theme" ,python2-sphinx-rtd-theme)
+ ("python-sphinx" ,python2-sphinx)
+ ("python-coverage" ,python2-coverage)
+ ("python-tornado" ,python2-tornado)
+ ("python-urllib3" ,python2-urllib3)
+ ("python-sure" ,python2-sure)
+ ("python-steadymark" ,python2-steadymark)
+ ("python-requests" ,python2-requests)
+ ("python-rednose" ,python2-rednose)
+ ("python-nose-randomly" ,python2-nose-randomly)
+ ("python-misaka" ,python2-misaka)
+ ("python-pytest-httpbin" ,python2-pytest-httpbin)
+ ("python-nose" ,python2-nose)))
+ (arguments
+ `(#:tests? #f
+ ;; Requires mock>=1.3.0 which requires a more up-to-date
+ ;; python-pbr. After updating these trying to build the
+ ;; package leads to failures in python-flake8 and other
+ ;; packages. The cascade of updates and failures this
+ ;; leads to, seems to not be worth having the test run.
+ #:python ,python-2
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'patch-test-requirements
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Update requirements from dependecy==version
+ ;; to dependency>=version
+ (substitute* "development.txt"
+ (("==") ">="))
+ #t)))))
+ (home-page "http://github.com/gabrielfalcao/httpretty")
+ (synopsis "HTTP client mock for Python")
+ (description "@code{httpretty} is a helper for faking web requests,
+inspired by Ruby's @code{fakeweb}.")
+ (license l:expat)))
+
+(define-public jo
+ (package
+ (name "jo")
+ (version "1.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/jpmens/jo/releases/download/v"
+ version "/jo-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0pysickpxrbl53c122h6swvz8sck68q3j0ql38wvbz70q9k4gvb3"))))
+ (build-system gnu-build-system)
+ (home-page "https://github.com/jpmens/jo")
+ (synopsis "Output JSON from a shell")
+ (description "jo is a command-line utility to create JSON objects or
+arrays. It creates a JSON string on stdout from words provided as
+command-line arguments or read from stdin.")
+ (license (list l:gpl2+
+ l:expat)))) ; json.c, json.h
+
+(define-public python-internetarchive
+ (package
+ (name "python-internetarchive")
+ (version "1.7.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/jjjake/internetarchive/archive/"
+ "v" version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1lj4r0y67mwjns2gcjvw0y7m5x0vqir2iv7s4q2y93492azli1qh"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:tests? #f ; 11 tests of 105 fail to mock "requests".
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'check)
+ (add-after 'install 'check
+ (lambda* (#:key inputs outputs target (tests? (not target)) #:allow-other-keys)
+ (if tests?
+ (begin
+ (add-installed-pythonpath inputs outputs)
+ (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
+ ":" (getenv "PATH")))
+ (zero? (system* "py.test")))
+ (begin
+ (format #t "test suite not run~%")
+ #t)))))))
+ (propagated-inputs
+ `(("python-requests" ,python-requests)
+ ("python-jsonpatch" ,python-jsonpatch-0.4)
+ ("python-docopt" ,python-docopt)
+ ("python-clint" ,python-clint)
+ ("python-six" ,python-six)
+ ("python-schema" ,python-schema-0.5)
+ ("python-backports-csv" ,python-backports-csv)))
+ (native-inputs
+ `(("python-pytest-3.0" ,python-pytest-3.0)
+ ("python-pytest-capturelog" ,python-pytest-capturelog)
+ ("python-responses" ,python-responses)))
+ (home-page "https://github.com/jjjake/internetarchive")
+ (synopsis "Command-line interface to archive.org")
+ (description "@code{ia} is a command-line tool for using
+@url{archive.org} from the command-line. It also emplements the
+internetarchive python module for programatic access to archive.org.")
+ (properties
+ `((python2-variant . ,(delay python2-internetarchive))))
+ (license l:agpl3+)))
+
+(define-public python2-internetarchive
+ (package-with-python2
+ (strip-python2-variant python-internetarchive)))
+
+(define-public r-shiny
+ (package
+ (name "r-shiny")
+ (version "1.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/rstudio/shiny/"
+ "archive/v" version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0z2v2s4hd44mvzjn7r70549kdzkrrch9nxhp27r6x2cy6micizm3"))))
+ (build-system r-build-system)
+ (arguments
+ `(#:modules ((guix build r-build-system)
+ (guix build minify-build-system)
+ (guix build utils)
+ (ice-9 match))
+ #:imported-modules (,@%r-build-system-modules
+ (guix build minify-build-system))
+ #:phases
+ (modify-phases (@ (guix build r-build-system) %standard-phases)
+ (add-after 'unpack 'replace-bundled-minified-JavaScript
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((replace-file (lambda (old new)
+ (format #t "replacing ~a with ~a\n" old new)
+ (delete-file old)
+ (symlink new old))))
+ ;; NOTE: Files in ./inst/www/shared/datepicker/js/locales/
+ ;; contain just data. They are not minified code, so we don't
+ ;; replace them.
+ (with-directory-excursion "inst/www/shared"
+ (replace-file "bootstrap/shim/respond.min.js"
+ (string-append (assoc-ref inputs "js-respond")
+ "/share/javascript/respond.min.js"))
+ (replace-file "bootstrap/shim/html5shiv.min.js"
+ (string-append (assoc-ref inputs "js-html5shiv")
+ "/share/javascript/html5shiv.min.js"))
+ (replace-file "json2-min.js"
+ (string-append (assoc-ref inputs "js-json2")
+ "/share/javascript/json2.min.js"))
+ (replace-file "strftime/strftime-min.js"
+ (string-append (assoc-ref inputs "js-strftime")
+ "/share/javascript/strftime.min.js"))
+ (replace-file "highlight/highlight.pack.js"
+ (string-append (assoc-ref inputs "js-highlight")
+ "/share/javascript/highlight.min.js"))
+ (replace-file "datatables/js/jquery.dataTables.min.js"
+ (string-append (assoc-ref inputs "js-datatables")
+ "/share/javascript/jquery.dataTables.min.js"))
+ (replace-file "selectize/js/selectize.min.js"
+ (string-append (assoc-ref inputs "js-selectize")
+ "/share/javascript/selectize.min.js"))
+ (replace-file "selectize/js/es5-shim.min.js"
+ (string-append (assoc-ref inputs "js-es5-shim")
+ "/share/javascript/es5-shim.min.js"))
+ (for-each (match-lambda
+ ((source . target)
+ (delete-file target)
+ (minify source #:target target)))
+ '(("jqueryui/jquery-ui.js" .
+ "jqueryui/jquery-ui.min.js")
+ ("showdown/src/showdown.js" .
+ "showdown/compressed/showdown.js")
+ ("datepicker/js/bootstrap-datepicker.js" .
+ "datepicker/js/bootstrap-datepicker.min.js")
+ ("ionrangeslider/js/ion.rangeSlider.js" .
+ "ionrangeslider/js/ion.rangeSlider.min.js")
+ ("bootstrap/js/bootstrap.js" .
+ "bootstrap/js/bootstrap.min.js")
+ ("shiny.js" .
+ "shiny.min.js")
+ ("jquery.js" .
+ "jquery.min.js")))))
+ #t)))))
+ (propagated-inputs
+ `(("r-httpuv" ,r-httpuv)
+ ("r-mime" ,r-mime)
+ ("r-jsonlite" ,r-jsonlite)
+ ("r-xtable" ,r-xtable)
+ ("r-digest" ,r-digest)
+ ("r-htmltools" ,r-htmltools)
+ ("r-r6" ,r-r6)
+ ("r-sourcetools" ,r-sourcetools)))
+ (inputs
+ `(("js-datatables" ,js-datatables)
+ ("js-html5shiv" ,js-html5shiv)
+ ("js-json2" ,js-json2)
+ ("js-respond" ,js-respond)
+ ("js-selectize" ,js-selectize)
+ ("js-strftime" ,js-strftime)
+ ("js-highlight" ,js-highlight)
+ ("js-es5-shim" ,js-es5-shim)))
+ (home-page "http://shiny.rstudio.com")
+ (synopsis "Easy interactive web applications with R")
+ (description
+ "Makes it incredibly easy to build interactive web applications
+with R. Automatic \"reactive\" binding between inputs and outputs and
+extensive prebuilt widgets make it possible to build beautiful,
+responsive, and powerful applications with minimal effort.")
+ (license l:artistic2.0)))
+
+(define-public r-crosstalk
+ (package
+ (name "r-crosstalk")
+ (version "1.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (cran-uri "crosstalk" version))
+ (sha256
+ (base32
+ "0lfa89vhrzi7a1rghmygcjr8gzddw35sinb3jx6g49mc9jias7mk"))))
+ (build-system r-build-system)
+ (propagated-inputs
+ `(("r-ggplot2" ,r-ggplot2)
+ ("r-htmltools" ,r-htmltools)
+ ("r-jsonlite" ,r-jsonlite)
+ ("r-lazyeval" ,r-lazyeval)
+ ("r-r6" ,r-r6)
+ ("r-shiny" ,r-shiny)))
+ (home-page "https://rstudio.github.io/crosstalk/")
+ (synopsis "Inter-widget interactivity for HTML widgets")
+ (description
+ "This package provides building blocks for allowing HTML widgets to
+communicate with each other, with Shiny or without (i.e. static @code{.html}
+files). It currently supports linked brushing and filtering.")
+ (license l:expat)))
+
+(define-public r-rook
+ (package
+ (name "r-rook")
+ (version "1.1-1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (cran-uri "Rook" version))
+ (sha256
+ (base32
+ "00s9a0kr9rwxvlq433daxjk4ji8m0w60hjdprf502msw9kxfrx00"))))
+ (properties `((upstream-name . "Rook")))
+ (build-system r-build-system)
+ (propagated-inputs `(("r-brew" ,r-brew)))
+ (home-page "http://cran.r-project.org/web/packages/Rook")
+ (synopsis "Web server interface for R")
+ (description
+ "This package contains the Rook specification and convenience software
+for building and running Rook applications. A Rook application is an R
+reference class object that implements a @code{call} method or an R closure
+that takes exactly one argument, an environment, and returns a list with three
+named elements: the @code{status}, the @code{headers}, and the @code{body}.")
+ (license l:gpl2)))
+
+(define-public rss-bridge
+ (package
+ (name "rss-bridge")
+ (version "2017-08-03")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/RSS-Bridge/rss-bridge/archive/"
+ version ".tar.gz"))
+ (file-name (string-append name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "05s16y552hbyj91s7bnlkx1bi64s6aw0fjy29az8via3i3b21yhl"))))
+ (build-system trivial-build-system)
+ (native-inputs
+ `(("gzip" ,gzip)
+ ("tar" ,tar)))
+ (arguments
+ '(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils)
+ (ice-9 match))
+ (let* ((out (assoc-ref %outputs "out"))
+ (share-rss-bridge (string-append out "/share/rss-bridge")))
+ (set-path-environment-variable
+ "PATH" '("bin") (map (match-lambda ((_ . input) input))
+ %build-inputs))
+ (mkdir-p share-rss-bridge)
+ (system* "tar" "xvf" (assoc-ref %build-inputs "source")
+ "--strip-components" "1" "-C" share-rss-bridge)
+ #t))))
+ (home-page "https://github.com/RSS-Bridge/rss-bridge")
+ (synopsis "Generate Atom feeds for social networking websites")
+ (description "rss-bridge generates Atom feeds for social networking
+websites lacking feeds. Supported websites include Facebook, Twitter,
+Instagram and YouTube.")
+ (license (list l:public-domain
+ l:expat)))) ;; vendor/simplehtmldom/simple_html_dom.php