maksbotan

maksbotan

Member Since 11 years ago

@biocad, Saint Petersburg, Russia

Experience Points
32
follower
Lessons Completed
4
follow
Lessons Completed
18
stars
Best Reply Awards
66
repos

208 contributions in the last year

Pinned
⚡ git import of http://www.ullrich-online.cc/fingerprint/index.php
⚡ Content, maps and templates for using with gimn-gen
⚡ A simple solar system model
⚡ Simple overlay for my ebuilds
⚡ Logo interpreter written in Python
⚡ Simple application using RPC to distribute mandelbrot fractal generation over network
Activity
Dec
4
2 days ago
Activity icon
issue

maksbotan issue comment dependabot/dependabot-core

maksbotan
maksbotan

pip & poetry backend does not honor poetry's "secondary" repo setting

Package ecosystem pip + poetry Package manager version Poetry version 1.1.11 Language version Python 3.8 Manifest location and content prior to update https://github.com/maksbotan/dependabot-poetry-demo/blob/master/pyproject.toml https://github.com/maksbotan/dependabot-poetry-demo/blob/master/poetry.lock dependabot.yml content https://github.com/maksbotan/dependabot-poetry-demo/blob/master/.github/dependabot.yml Updated dependency Bump docxtpl from 0.14.1 to 0.14.2 What you expected to see, versus what you actually saw

I have a private registry with secondary = true in my pyproject.toml, i.e. I intend to use it only for my private packages, not overriding the global pypi. poetry correctly locks only private package to this repo (see https://github.com/maksbotan/dependabot-poetry-demo/blob/7c539a42a3e2ff108140827142be6bd19e8c5767/poetry.lock#L299-L302).

But dependabot's update locks all packages to use this private repo, including global pypi's ones. See this diff: https://github.com/maksbotan/dependabot-poetry-demo/pull/7/files#diff-f53a023eedfa3fbf2925ec7dc76eecdc954ea94b7e47065393dbad519613dc89

Note that all packages got a [[package.source]] section, with a bogus reference at that. And the one with correct reference got rewritten:

https://github.com/maksbotan/dependabot-poetry-demo/pull/7/files#diff-f53a023eedfa3fbf2925ec7dc76eecdc954ea94b7e47065393dbad519613dc89L302

Native package manager behavior

poetry will not try to get a dependency from a private repo with secondary = true unless explicitly told so.

By the way, this exact bug was present in poetry 1.1.4 and was only fixed in 1.1.10. See the relevant issue: https://github.com/python-poetry/poetry/issues/3306. Maybe it would be enough to update poetry version used by dependabot?

Images of the diff or a link to the PR, issue or logs

https://github.com/maksbotan/dependabot-poetry-demo/pull/7/files

updater | INFO <job_231638073> Checking if boto3 1.20.0 needs updating
  proxy | 2021/11/10 20:25:06 [164] GET https://pypi.org:443/simple/boto3/
  proxy | 2021/11/10 20:25:06 [164] 200 https://pypi.org:443/simple/boto3/
  proxy | 2021/11/10 20:25:08 [166] GET https://gitlab.math.bio:443/api/v4/groups/biocad/-/packages/pypi/simple/boto3/
  proxy | 2021/11/10 20:25:08 [166] * authenticating python index request (host: gitlab.math.bio)
  proxy | 2021/11/10 20:25:09 [166] 302 https://gitlab.math.bio:443/api/v4/groups/biocad/-/packages/pypi/simple/boto3/
  proxy | 2021/11/10 20:25:09 [168] GET https://pypi.org:443/simple/boto3/
  proxy | 2021/11/10 20:25:09 [168] 200 https://pypi.org:443/simple/boto3/
updater | INFO <job_231638073> Latest version is 1.20.3

Here it can be seen that dependabot tries to check this package in private repo (even though lock files states that it should not happen) and finds it there (since the repo redirects unknown packages to global pypi).

🕹 Bonus points: Smallest manifest that reproduces the issue

https://github.com/maksbotan/dependabot-poetry-demo/

maksbotan
maksbotan

Hi! Is there a timeline for reaction to this? I would like to see the issue resolved.

I've tried disabling proxying to global PyPI on our private registry and it almost fixed the problem, however dependabot still messes up reference fields in packages from secondary repos. See here:

https://github.com/maksbotan/dependabot-poetry-demo/blob/52c3f301f0c59f339e088c0e494316e6aad0fc95/poetry.lock#L302

image

This is plain wrong :(

Activity icon
issue

maksbotan issue comment maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump oneq from 2.0.2 to 2.1.0

Bumps oneq from 2.0.2 to 2.1.0.

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Nov
24
1 week ago
push

maksbotan push biocad/xls

maksbotan
maksbotan

Change "gcc -E" to "cpp", otherwise it breaks

commit sha: 66280af5ceb0d12fd3c52b4aa486ba87a9b379da

push time in 1 week ago
Nov
17
2 weeks ago
Nov
13
3 weeks ago
Nov
10
3 weeks ago
Activity icon
issue

maksbotan issue dependabot/dependabot-core

maksbotan
maksbotan

pip & poetry backend does not honor poetry's "secondary" repo setting

Package ecosystem pip + poetry Package manager version Poetry version 1.1.11 Language version Python 3.8 Manifest location and content prior to update https://github.com/maksbotan/dependabot-poetry-demo/blob/master/pyproject.toml https://github.com/maksbotan/dependabot-poetry-demo/blob/master/poetry.lock dependabot.yml content https://github.com/maksbotan/dependabot-poetry-demo/blob/master/.github/dependabot.yml Updated dependency Bump docxtpl from 0.14.1 to 0.14.2 What you expected to see, versus what you actually saw

I have a private registry with secondary = true in my pyproject.toml, i.e. I intend to use it only for my private packages, not overriding the global pypi. poetry correctly locks only private package to this repo (see https://github.com/maksbotan/dependabot-poetry-demo/blob/7c539a42a3e2ff108140827142be6bd19e8c5767/poetry.lock#L299-L302).

But dependabot's update locks all packages to use this private repo, including global pypi's ones. See this diff: https://github.com/maksbotan/dependabot-poetry-demo/pull/7/files#diff-f53a023eedfa3fbf2925ec7dc76eecdc954ea94b7e47065393dbad519613dc89

Note that all packages got a [[package.source]] section, with a bogus reference at that. And the one with correct reference got rewritten:

https://github.com/maksbotan/dependabot-poetry-demo/pull/7/files#diff-f53a023eedfa3fbf2925ec7dc76eecdc954ea94b7e47065393dbad519613dc89L302

Native package manager behavior

poetry will not try to get a dependency from a private repo with secondary = true unless explicitly told so.

By the way, this exact bug was present in poetry 1.1.4 and was only fixed in 1.1.10. See the relevant issue: https://github.com/python-poetry/poetry/issues/3306. Maybe it would be enough to update poetry version used by dependabot?

Images of the diff or a link to the PR, issue or logs

https://github.com/maksbotan/dependabot-poetry-demo/pull/7/files

updater | INFO <job_231638073> Checking if boto3 1.20.0 needs updating
  proxy | 2021/11/10 20:25:06 [164] GET https://pypi.org:443/simple/boto3/
  proxy | 2021/11/10 20:25:06 [164] 200 https://pypi.org:443/simple/boto3/
  proxy | 2021/11/10 20:25:08 [166] GET https://gitlab.math.bio:443/api/v4/groups/biocad/-/packages/pypi/simple/boto3/
  proxy | 2021/11/10 20:25:08 [166] * authenticating python index request (host: gitlab.math.bio)
  proxy | 2021/11/10 20:25:09 [166] 302 https://gitlab.math.bio:443/api/v4/groups/biocad/-/packages/pypi/simple/boto3/
  proxy | 2021/11/10 20:25:09 [168] GET https://pypi.org:443/simple/boto3/
  proxy | 2021/11/10 20:25:09 [168] 200 https://pypi.org:443/simple/boto3/
updater | INFO <job_231638073> Latest version is 1.20.3

Here it can be seen that dependabot tries to check this package in private repo (even though lock files states that it should not happen) and finds it there (since the repo redirects unknown packages to global pypi).

🕹 Bonus points: Smallest manifest that reproduces the issue

https://github.com/maksbotan/dependabot-poetry-demo/

Nov
9
3 weeks ago
Activity icon
issue

maksbotan issue comment maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump jinja2 from 3.0.2 to 3.0.3

Bumps jinja2 from 3.0.2 to 3.0.3.

Release notes

Sourced from jinja2's releases.

3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/pallets/jinja/compare/3.0.2...3.0.3

Changelog

Sourced from jinja2's changelog.

Version 3.0.3

Released 2021-11-09

  • Fix traceback rewriting internals for Python 3.10 and 3.11. :issue:1535
  • Fix how the native environment treats leading and trailing spaces when parsing values on Python 3.10. :pr:1537
  • Improve async performance by avoiding checks for common types. :issue:1514
  • Revert change to hash(Node) behavior. Nodes are hashed by id again :issue:1521
  • PackageLoader works when the package is a single module file. :issue:1512
Commits
  • 2a48dd8 Merge pull request #1543 from pallets/release-3.0.3
  • ce1a539 release version 3.0.3
  • 199b6d5 Merge pull request #1542 from pallets/package-loader-file
  • eec0db8 PackageLoader works with single module file
  • 46f3a68 Merge pull request #1541 from pallets/docs-pow-order
  • 0d19990 document chained pow order
  • 99daa2a Merge pull request #1540 from pallets/docs-macro-defaults
  • a6162da rewrite docs about extending template objects
  • cab5545 Merge pull request #1539 from pallets/docs-macro-defaults
  • 369ff03 remove reference to macro.defaults
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Activity icon
issue

maksbotan issue comment maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump jinja2 from 3.0.2 to 3.0.3

Bumps jinja2 from 3.0.2 to 3.0.3.

Release notes

Sourced from jinja2's releases.

3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/pallets/jinja/compare/3.0.2...3.0.3

Changelog

Sourced from jinja2's changelog.

Version 3.0.3

Released 2021-11-09

  • Fix traceback rewriting internals for Python 3.10 and 3.11. :issue:1535
  • Fix how the native environment treats leading and trailing spaces when parsing values on Python 3.10. :pr:1537
  • Improve async performance by avoiding checks for common types. :issue:1514
  • Revert change to hash(Node) behavior. Nodes are hashed by id again :issue:1521
  • PackageLoader works when the package is a single module file. :issue:1512
Commits
  • 2a48dd8 Merge pull request #1543 from pallets/release-3.0.3
  • ce1a539 release version 3.0.3
  • 199b6d5 Merge pull request #1542 from pallets/package-loader-file
  • eec0db8 PackageLoader works with single module file
  • 46f3a68 Merge pull request #1541 from pallets/docs-pow-order
  • 0d19990 document chained pow order
  • 99daa2a Merge pull request #1540 from pallets/docs-macro-defaults
  • a6162da rewrite docs about extending template objects
  • cab5545 Merge pull request #1539 from pallets/docs-macro-defaults
  • 369ff03 remove reference to macro.defaults
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Activity icon
issue

maksbotan issue comment maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump jinja2 from 3.0.2 to 3.0.3

Bumps jinja2 from 3.0.2 to 3.0.3.

Release notes

Sourced from jinja2's releases.

3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/pallets/jinja/compare/3.0.2...3.0.3

Changelog

Sourced from jinja2's changelog.

Version 3.0.3

Released 2021-11-09

  • Fix traceback rewriting internals for Python 3.10 and 3.11. :issue:1535
  • Fix how the native environment treats leading and trailing spaces when parsing values on Python 3.10. :pr:1537
  • Improve async performance by avoiding checks for common types. :issue:1514
  • Revert change to hash(Node) behavior. Nodes are hashed by id again :issue:1521
  • PackageLoader works when the package is a single module file. :issue:1512
Commits
  • 2a48dd8 Merge pull request #1543 from pallets/release-3.0.3
  • ce1a539 release version 3.0.3
  • 199b6d5 Merge pull request #1542 from pallets/package-loader-file
  • eec0db8 PackageLoader works with single module file
  • 46f3a68 Merge pull request #1541 from pallets/docs-pow-order
  • 0d19990 document chained pow order
  • 99daa2a Merge pull request #1540 from pallets/docs-macro-defaults
  • a6162da rewrite docs about extending template objects
  • cab5545 Merge pull request #1539 from pallets/docs-macro-defaults
  • 369ff03 remove reference to macro.defaults
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Activity icon
issue

maksbotan issue comment maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump jinja2 from 3.0.2 to 3.0.3

Bumps jinja2 from 3.0.2 to 3.0.3.

Release notes

Sourced from jinja2's releases.

3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/pallets/jinja/compare/3.0.2...3.0.3

Changelog

Sourced from jinja2's changelog.

Version 3.0.3

Released 2021-11-09

  • Fix traceback rewriting internals for Python 3.10 and 3.11. :issue:1535
  • Fix how the native environment treats leading and trailing spaces when parsing values on Python 3.10. :pr:1537
  • Improve async performance by avoiding checks for common types. :issue:1514
  • Revert change to hash(Node) behavior. Nodes are hashed by id again :issue:1521
  • PackageLoader works when the package is a single module file. :issue:1512
Commits
  • 2a48dd8 Merge pull request #1543 from pallets/release-3.0.3
  • ce1a539 release version 3.0.3
  • 199b6d5 Merge pull request #1542 from pallets/package-loader-file
  • eec0db8 PackageLoader works with single module file
  • 46f3a68 Merge pull request #1541 from pallets/docs-pow-order
  • 0d19990 document chained pow order
  • 99daa2a Merge pull request #1540 from pallets/docs-macro-defaults
  • a6162da rewrite docs about extending template objects
  • cab5545 Merge pull request #1539 from pallets/docs-macro-defaults
  • 369ff03 remove reference to macro.defaults
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
pull request

maksbotan pull request maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump jinja2 from 3.0.2 to 3.0.3

⚠️ Dependabot is rebasing this PR ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


Bumps jinja2 from 3.0.2 to 3.0.3.

Release notes

Sourced from jinja2's releases.

3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/pallets/jinja/compare/3.0.2...3.0.3

Changelog

Sourced from jinja2's changelog.

Version 3.0.3

Released 2021-11-09

  • Fix traceback rewriting internals for Python 3.10 and 3.11. :issue:1535
  • Fix how the native environment treats leading and trailing spaces when parsing values on Python 3.10. :pr:1537
  • Improve async performance by avoiding checks for common types. :issue:1514
  • Revert change to hash(Node) behavior. Nodes are hashed by id again :issue:1521
  • PackageLoader works when the package is a single module file. :issue:1512
Commits
  • 2a48dd8 Merge pull request #1543 from pallets/release-3.0.3
  • ce1a539 release version 3.0.3
  • 199b6d5 Merge pull request #1542 from pallets/package-loader-file
  • eec0db8 PackageLoader works with single module file
  • 46f3a68 Merge pull request #1541 from pallets/docs-pow-order
  • 0d19990 document chained pow order
  • 99daa2a Merge pull request #1540 from pallets/docs-macro-defaults
  • a6162da rewrite docs about extending template objects
  • cab5545 Merge pull request #1539 from pallets/docs-macro-defaults
  • 369ff03 remove reference to macro.defaults
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Activity icon
issue

maksbotan issue comment maksbotan/dependabot-poetry-demo

maksbotan
maksbotan

Bump jinja2 from 3.0.2 to 3.0.3

⚠️ Dependabot is rebasing this PR ⚠️

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


Bumps jinja2 from 3.0.2 to 3.0.3.

Release notes

Sourced from jinja2's releases.

3.0.3

What's Changed

New Contributors

Full Changelog: https://github.com/pallets/jinja/compare/3.0.2...3.0.3

Changelog

Sourced from jinja2's changelog.

Version 3.0.3

Released 2021-11-09

  • Fix traceback rewriting internals for Python 3.10 and 3.11. :issue:1535
  • Fix how the native environment treats leading and trailing spaces when parsing values on Python 3.10. :pr:1537
  • Improve async performance by avoiding checks for common types. :issue:1514
  • Revert change to hash(Node) behavior. Nodes are hashed by id again :issue:1521
  • PackageLoader works when the package is a single module file. :issue:1512
Commits
  • 2a48dd8 Merge pull request #1543 from pallets/release-3.0.3
  • ce1a539 release version 3.0.3
  • 199b6d5 Merge pull request #1542 from pallets/package-loader-file
  • eec0db8 PackageLoader works with single module file
  • 46f3a68 Merge pull request #1541 from pallets/docs-pow-order
  • 0d19990 document chained pow order
  • 99daa2a Merge pull request #1540 from pallets/docs-macro-defaults
  • a6162da rewrite docs about extending template objects
  • cab5545 Merge pull request #1539 from pallets/docs-macro-defaults
  • 369ff03 remove reference to macro.defaults
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Activity icon
created branch
createdAt 3 weeks ago
Nov
3
1 month ago
Activity icon
issue

maksbotan issue comment biocad/openapi3

maksbotan
maksbotan

What's the point of `SecurityDefinitions`?

This type is defined in Data.OpenApi.Internal and is not part of any other types. There are some instance defined for it and it's re-exported from Data.OpenApi. Also it's used in tests.

Is this type useful on its own (since it's not part of any other type)? How is it supposed to be used?

I see that in swagger2 there is Swagger data type with _swaggerSecurityDefinitions :: SecurityDefinitions, but apparently it was thrown away in openapi3. Is it intentional (maybe there actually was a change in the specification, i. e. maybe that's the difference between version 2 and version 3)?

Nov
2
1 month ago
Activity icon
issue

maksbotan issue comment biocad/openapi3

maksbotan
maksbotan

What's the point of `SecurityDefinitions`?

This type is defined in Data.OpenApi.Internal and is not part of any other types. There are some instance defined for it and it's re-exported from Data.OpenApi. Also it's used in tests.

Is this type useful on its own (since it's not part of any other type)? How is it supposed to be used?

I see that in swagger2 there is Swagger data type with _swaggerSecurityDefinitions :: SecurityDefinitions, but apparently it was thrown away in openapi3. Is it intentional (maybe there actually was a change in the specification, i. e. maybe that's the difference between version 2 and version 3)?

maksbotan
maksbotan

Hi!

apparently I should use _componentsSecuritySchemes :: Definitions SecurityScheme field (in the Components type) to provide all security definitions

Yes. See an example here: https://github.com/biocad/web-template/blob/master/src/Web/Template/Servant/Auth.hs#L295

So apparently _swaggerSecurityDefinitions :: SecurityDefinitions was changed to _componentsSecuritySchemes :: Definitions SecurityScheme in 821654c which made SecurityDefinitions type useless (? still not sure)

Looks like so. However, there is one difference, namely in Semigroup instance for SecurityDefinitions: it uses unionWith (<>), while Definitions SecuritySchem would use the plain union which discards the second version of the conflicting key.

https://github.com/biocad/openapi3/blob/ea20d096f2c47132dd0f75cc4c7038daa42b6e63/src/Data/OpenApi/Internal.hs#L1100-L1102

It would only matter for SecuritySchemeOAuth2 type:

https://github.com/biocad/openapi3/blob/ea20d096f2c47132dd0f75cc4c7038daa42b6e63/src/Data/OpenApi/Internal.hs#L1094-L1097

Semigroup for this type merges two objects, in case they have different filled flow types. I think this is actually a correct behavior and dropping the newtype was a mistake.

Would you make a PR to fix this?

BTW, the newtype is still used in tests.

Oct
31
1 month ago
Activity icon
delete

maksbotan in haskell-servant/servant delete branch maksbotan/fix-servant-auth-tests

deleted time in 1 month ago
push

maksbotan push haskell-servant/servant

maksbotan
maksbotan

Fix tests for some servant-auth pkgs on GHC 9

Turns out the tests broke because of base64-bytestring issue specific to GHC-9 that was fixed in 1.2.1.0.

Fixes #1474

maksbotan
maksbotan

Enable tests for servant-auth-client

Fixes #1474

maksbotan
maksbotan

Enable servant-auth cookbook

maksbotan
maksbotan

Update servant-auth cookbook deps

maksbotan
maksbotan

Merge pull request #1476 from haskell-servant/maksbotan/fix-servant-auth-tests

Fix tests for some servant-auth pkgs on GHC 9

commit sha: 043d5a0e90b76142e71f2bae3e17e1a46e46b518

push time in 1 month ago
pull request

maksbotan pull request haskell-servant/servant

maksbotan
maksbotan

Fix tests for some servant-auth pkgs on GHC 9

Turns out the tests broke because of base64-bytestring issue specific to GHC-9 that was fixed in 1.2.1.0.

Fixes #1473 Fixes #1474

Activity icon
issue

maksbotan issue haskell-servant/servant

maksbotan
maksbotan

servant-auth-server: Cookbook doesn't compile against GHC 9

Following #1471

Test suite spec: RUNNING...

Servant.Auth.Server
  The Auth combinator
    returns a 401 if all authentications are Indefinite
    succeeds if one authentication suceeds FAILED [1]
    fails (403) if one authentication fails
      # PENDING: Authentications don't yet fail, only are Indefinite
    doesn't clobber pre-existing response headers FAILED [2]
    Raw
      gets the response body FAILED [3]
      doesn't clobber pre-existing reponse headers FAILED [4]
    Setting cookies
      sets cookies that it itself accepts FAILED [5]
      uses the Expiry from the configuration FAILED [6]
      sets the token cookie as HttpOnly FAILED [7]
  The Auth combinator
    With XSRF check
      fails if XSRF header and cookie don't match
        +++ OK, passed 100 tests.
      fails with no XSRF header or cookie
        +++ OK, passed 100 tests.
      succeeds if XSRF header and cookie match, and JWT is valid FAILED [8]
      sets and clears the right cookies FAILED [9]
    With no XSRF check for GET requests
      succeeds with no XSRF header or cookie for GET FAILED [10]
      fails with no XSRF header or cookie for POST
        +++ OK, passed 100 tests.
    With no XSRF check at all
      succeeds with no XSRF header or cookie for GET FAILED [11]
      succeeds with no XSRF header or cookie for POST FAILED [12]
      sets and clears the right cookies FAILED [13]
  The JWT combinator
    fails if 'aud' does not match predicate
      +++ OK, passed 100 tests.
    succeeds if 'aud' does match predicate FAILED [14]
    fails if 'nbf' is set to a future date
      +++ OK, passed 100 tests.
    fails if 'exp' is set to a past date
      +++ OK, passed 100 tests.
    succeeds if 'exp' is set to a future date FAILED [15]
    fails if JWT is not signed
      +++ OK, passed 100 tests.
    fails if JWT does not use expected algorithm
      # PENDING: Need https://github.com/frasertweedale/hs-jose/issues/19
    fails if data is not valid JSON
    suceeds as wreq's oauth2Bearer FAILED [16]
  throwAll
    works for plain values
    works for function types
      +++ OK, passed 100 tests.
  The BasicAuth combinator
    succeeds with the correct password and username
    fails with non-existent user
    fails with incorrect password
    fails with no auth header

Failures:

  test/Servant/Auth/ServerSpec.hs:85:3: 
  1) Servant.Auth.Server, The Auth combinator, succeeds if one authentication suceeds
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 40595
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:44 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 40595
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/succeeds if one authentication suceeds/"

  test/Servant/Auth/ServerSpec.hs:95:3: 
  2) Servant.Auth.Server, The Auth combinator, doesn't clobber pre-existing response headers
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 34203
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/header"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:45 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 34203
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/header"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/doesn't clobber pre-existing response headers/"

  test/Servant/Auth/ServerSpec.hs:105:5: 
  3) Servant.Auth.Server, The Auth combinator, Raw, gets the response body
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 45951
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/raw"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:45 GMT"),("Server","Warp/3.3.17"),("Set-Cookie","TheyDinedOnMince=1CHpH6w1WlIa3gRO1y0hAqkSVvkWLf0RqOX0Iz+Be7k=; Path=/; Expires=Wed, 01-Jan-2070 00:00:00 GMT")], responseBody = (), responseCookieJar = CJ {expose = [Cookie {cookie_name = "TheyDinedOnMince", cookie_value = "1CHpH6w1WlIa3gRO1y0hAqkSVvkWLf0RqOX0Iz+Be7k=", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:45.925017574 UTC, cookie_last_access_time = 2021-10-26 16:17:45.925017574 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = False}]}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 45951
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/raw"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/Raw/gets the response body/"

  test/Servant/Auth/ServerSpec.hs:111:5: 
  4) Servant.Auth.Server, The Auth combinator, Raw, doesn't clobber pre-existing reponse headers
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 45495
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/raw"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:46 GMT"),("Server","Warp/3.3.17"),("Set-Cookie","TheyDinedOnMince=jO8aPhSJwD9OOmNpa66wgEQnAdNlBC5rW8LCNR2rnk8=; Path=/; Expires=Wed, 01-Jan-2070 00:00:00 GMT")], responseBody = (), responseCookieJar = CJ {expose = [Cookie {cookie_name = "TheyDinedOnMince", cookie_value = "jO8aPhSJwD9OOmNpa66wgEQnAdNlBC5rW8LCNR2rnk8=", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:46.340224498 UTC, cookie_last_access_time = 2021-10-26 16:17:46.340224498 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = False}]}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 45495
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/raw"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/Raw/doesn't clobber pre-existing reponse headers/"

  test/Servant/Auth/ServerSpec.hs:122:5: 
  5) Servant.Auth.Server, The Auth combinator, Setting cookies, sets cookies that it itself accepts
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 45723
         secure               = False
         requestHeaders       = [("Cookie","RuncibleSpoon=eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA;TheyDinedOnMince=lJOggbyb1ZSPFLP5U2JsooN9zm1Lo9/AQQ6Wi494Wa0="),("AndSlicesOfQuince","lJOggbyb1ZSPFLP5U2JsooN9zm1Lo9/AQQ6Wi494Wa0="),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:46 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = [Cookie {cookie_name = "TheyDinedOnMince", cookie_value = "lJOggbyb1ZSPFLP5U2JsooN9zm1Lo9/AQQ6Wi494Wa0=", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:46.709512041 UTC, cookie_last_access_time = 2021-10-26 16:17:46.713588773 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = False},Cookie {cookie_name = "RuncibleSpoon", cookie_value = "eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:46.709512041 UTC, cookie_last_access_time = 2021-10-26 16:17:46.713588773 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = True}]}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 45723
         secure               = False
         requestHeaders       = [("Cookie","RuncibleSpoon=eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA;TheyDinedOnMince=lJOggbyb1ZSPFLP5U2JsooN9zm1Lo9/AQQ6Wi494Wa0="),("AndSlicesOfQuince","lJOggbyb1ZSPFLP5U2JsooN9zm1Lo9/AQQ6Wi494Wa0="),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 33 tests)
         User {name = "\ESC=P\24653XZ^\94625\NUL\133214ft\131737:", _id = ":8\1026473\ETX\f\143146\"!,&\[email protected],`F&L.\SYN\ENQ\SI\153566Gz\1064280"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/Setting cookies/sets cookies that it itself accepts/"

  test/Servant/Auth/ServerSpec.hs:138:5: 
  6) Servant.Auth.Server, The Auth combinator, Setting cookies, uses the Expiry from the configuration
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 34237
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=blah; RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("AndSlicesOfQuince","blah"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:46 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 34237
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=blah; RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("AndSlicesOfQuince","blah"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/Setting cookies/uses the Expiry from the configuration/"

  test/Servant/Auth/ServerSpec.hs:150:5: 
  7) Servant.Auth.Server, The Auth combinator, Setting cookies, sets the token cookie as HttpOnly
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 41767
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=blah; RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("AndSlicesOfQuince","blah"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:47 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 41767
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=blah; RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("AndSlicesOfQuince","blah"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/Setting cookies/sets the token cookie as HttpOnly/"

  test/Servant/Auth/ServerSpec.hs:188:9: 
  8) Servant.Auth.Server, The Auth combinator, With XSRF check, succeeds if XSRF header and cookie match, and JWT is valid
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 37401
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=blah; RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("AndSlicesOfQuince","blah"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:48 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 37401
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=blah; RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("AndSlicesOfQuince","blah"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/With XSRF check/succeeds if XSRF header and cookie match, and JWT is valid/"

  test/Servant/Auth/ServerSpec.hs:197:9: 
  9) Servant.Auth.Server, The Auth combinator, With XSRF check, sets and clears the right cookies
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 36373
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=lwAk78e5tUxSwFZE/EeJ5hV4gL70DXWC8Qd+JRl/5Dw=;RuncibleSpoon=eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA"),("AndSlicesOfQuince","lwAk78e5tUxSwFZE/EeJ5hV4gL70DXWC8Qd+JRl/5Dw="),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:48 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = [Cookie {cookie_name = "RuncibleSpoon", cookie_value = "eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:48.789075727 UTC, cookie_last_access_time = 2021-10-26 16:17:48.791391393 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = True},Cookie {cookie_name = "TheyDinedOnMince", cookie_value = "lwAk78e5tUxSwFZE/EeJ5hV4gL70DXWC8Qd+JRl/5Dw=", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:48.789075727 UTC, cookie_last_access_time = 2021-10-26 16:17:48.791391393 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = False}]}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 36373
         secure               = False
         requestHeaders       = [("Cookie","TheyDinedOnMince=lwAk78e5tUxSwFZE/EeJ5hV4gL70DXWC8Qd+JRl/5Dw=;RuncibleSpoon=eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA"),("AndSlicesOfQuince","lwAk78e5tUxSwFZE/EeJ5hV4gL70DXWC8Qd+JRl/5Dw="),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 33 tests)
         User {name = "\ESC=P\24653XZ^\94625\NUL\133214ft\131737:", _id = ":8\1026473\ETX\f\143146\"!,&\[email protected],`F&L.\SYN\ENQ\SI\153566Gz\1064280"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/With XSRF check/sets and clears the right cookies/"

  test/Servant/Auth/ServerSpec.hs:232:9: 
  10) Servant.Auth.Server, The Auth combinator, With no XSRF check for GET requests, succeeds with no XSRF header or cookie for GET
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 38095
         secure               = False
         requestHeaders       = [("Cookie","RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:49 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 38095
         secure               = False
         requestHeaders       = [("Cookie","RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/With no XSRF check for GET requests/succeeds with no XSRF header or cookie for GET/"

  test/Servant/Auth/ServerSpec.hs:249:9: 
  11) Servant.Auth.Server, The Auth combinator, With no XSRF check at all, succeeds with no XSRF header or cookie for GET
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 43697
         secure               = False
         requestHeaders       = [("Cookie","RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:49 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 43697
         secure               = False
         requestHeaders       = [("Cookie","RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IvCilYXourtGO1x1MDAxMl4l9IicgVlcdTAwMDY287iDtvCkvoRGdX5cdTAwMGZg6JSq4bWXXHUwMDE087OmtzMiLCJfaWQiOiJcdTAwMDZ1XHUwMDEyZVx1MDAxZVkifX0.v8QI83mUhOHIC-S4y7FSBjDpEOc9m5m9SdGyJ8f_FuE"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/With no XSRF check at all/succeeds with no XSRF header or cookie for GET/"

  test/Servant/Auth/ServerSpec.hs:256:9: 
  12) Servant.Auth.Server, The Auth combinator, With no XSRF check at all, succeeds with no XSRF header or cookie for POST
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 45245
         secure               = False
         requestHeaders       = [("Content-Type","application/json"),("Cookie","RuncibleSpoon=eyJhbGciOiJIUzI1NiJ9.eyJkYXQiOnsibmFtZSI6IkxieVVcdTAwMWR_75OeWlx1MDAwYyB5X_Cjrb00RFx1MDAxNCIsIl9pZCI6Ilx1MDAwN383PFx1MDAxM1x1MDAwZjBdSm5QXHUwMDFjYUUj8768rFx1MDAwY_O_sawifX0.Gl1lCgjuuq-SZfTe8QHFK_QHSv6qDdyxLA-i_DJA8nc"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "POST"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (ConnectionFailure Network.Socket.connect: <socket: 8>: does not exist (Connection refused))
       (after 40 tests and 1 shrink)
         User {name = "LbyU\GS\DEL\62686Z\f y_\146301\&4D\DC4", _id = "\a\DEL7<\DC3\SI0]JnP\FSaE#\1044268\f\1047660"}
         0

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/With no XSRF check at all/succeeds with no XSRF header or cookie for POST/"

  test/Servant/Auth/ServerSpec.hs:263:9: 
  13) Servant.Auth.Server, The Auth combinator, With no XSRF check at all, sets and clears the right cookies
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 41817
         secure               = False
         requestHeaders       = [("Cookie","NO-XSRF-TOKEN=;RuncibleSpoon=eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:50 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = [Cookie {cookie_name = "RuncibleSpoon", cookie_value = "eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:50.314533188 UTC, cookie_last_access_time = 2021-10-26 16:17:50.316397741 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = True},Cookie {cookie_name = "NO-XSRF-TOKEN", cookie_value = "", cookie_expiry_time = 2070-01-01 00:00:00 UTC, cookie_domain = "localhost", cookie_path = "/", cookie_creation_time = 2021-10-26 16:17:50.314533188 UTC, cookie_last_access_time = 2021-10-26 16:17:50.316397741 UTC, cookie_persistent = True, cookie_host_only = True, cookie_secure_only = False, cookie_http_only = False}]}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 41817
         secure               = False
         requestHeaders       = [("Cookie","NO-XSRF-TOKEN=;RuncibleSpoon=eyJhbGciOiJIUzUxMiJ9.eyJkYXQiOnsibmFtZSI6Ilx1MDAxYj1Q5oGNWFpe8JeGoVx1MDAwMPCgoZ5mdPCgipk6IiwiX2lkIjoiOjjzuqapXHUwMDAzXHUwMDBj8KK8qlwiISwm9IGFlUAsYEYmTC5cdTAwMTZcdTAwMDVcdTAwMGbwpZ-eR3r0g7WYIn0sImV4cCI6MzE1NTc2MDAwMH0.p_26K9JVMH_QCyi7WC-OWTW8fFPTuheGohR1XZiAtN6socf4atliKProg2gZxku4FqZY-T8u7wmpWPmFvFNEmA"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 33 tests)
         User {name = "\ESC=P\24653XZ^\94625\NUL\133214ft\131737:", _id = ":8\1026473\ETX\f\143146\"!,&\[email protected],`F&L.\SYN\ENQ\SI\153566Gz\1064280"}

  To rerun use: --match "/Servant.Auth.Server/The Auth combinator/With no XSRF check at all/sets and clears the right cookies/"

  test/Servant/Auth/ServerSpec.hs:309:3: 
  14) Servant.Auth.Server, The JWT combinator, succeeds if 'aud' does match predicate
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 35041
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:50 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 35041
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 1 test)
         User {name = "", _id = ""}

  To rerun use: --match "/Servant.Auth.Server/The JWT combinator/succeeds if 'aud' does match predicate/"

  test/Servant/Auth/ServerSpec.hs:330:3: 
  15) Servant.Auth.Server, The JWT combinator, succeeds if 'exp' is set to a future date
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 41189
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:51 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 41189
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 33 tests)
         User {name = "\ESC=P\24653XZ^\94625\NUL\133214ft\131737:", _id = ":8\1026473\ETX\f\143146\"!,&\[email protected],`F&L.\SYN\ENQ\SI\153566Gz\1064280"}

  To rerun use: --match "/Servant.Auth.Server/The JWT combinator/succeeds if 'exp' is set to a future date/"

  test/Servant/Auth/ServerSpec.hs:351:3: 
  16) Servant.Auth.Server, The JWT combinator, suceeds as wreq's oauth2Bearer
       uncaught exception: HttpException
       HttpExceptionRequest Request {
         host                 = "localhost"
         port                 = 43019
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
        (StatusCodeException (Response {responseStatus = Status {statusCode = 401, statusMessage = "Unauthorized"}, responseVersion = HTTP/1.1, responseHeaders = [("Transfer-Encoding","chunked"),("Date","Tue, 26 Oct 2021 16:17:52 GMT"),("Server","Warp/3.3.17")], responseBody = (), responseCookieJar = CJ {expose = []}, responseClose' = ResponseClose, responseOriginalRequest = Request {
         host                 = "localhost"
         port                 = 43019
         secure               = False
         requestHeaders       = [("Authorization","<REDACTED>"),("User-Agent","haskell wreq-0.5.3.3")]
         path                 = "/"
         queryString          = ""
         method               = "GET"
         proxy                = Nothing
         rawBody              = False
         redirectCount        = 10
         responseTimeout      = ResponseTimeoutDefault
         requestVersion       = HTTP/1.1
         proxySecureMode      = ProxySecureWithConnect
       }
       }) "")
       (after 53 tests)
         User {name = "\140613\36539F;\DC2^%\1083137Y\ACK6\1016054\151428Fu~\SI`\34090\7511\DC4\997815\&3", _id = "\ACKu\DC2e\RSY"}

  To rerun use: --match "/Servant.Auth.Server/The JWT combinator/suceeds as wreq's oauth2Bearer/"

Randomized with seed 2015530381

Finished in 8.2452 seconds
33 examples, 16 failures, 2 pending
Test suite spec: FAIL
Previous