Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FW][FIX] payment_sips: prevent clearing the session cookie #72464

Conversation

fw-bot
Copy link
Contributor

@fw-bot fw-bot commented Jun 21, 2021

When buying a product on website shop, after the payment with SIPS, the
page is redirected to an Error message: "We are not able to find your
payment, but don't worry. You should receive an email confirming your
payment in a few minutes. If the payment hasn't been confirmed you can
contact us."

To reproduce the error:

  1. In Payment Acquirers, enable Sips
  2. Go on website shop
  3. Add a product to the cart, Checkout
  4. Pay with Sips
    • Visa card number: 4100000000000000
  5. Back to Web-shop, if the payment has been successfully processed,
    repeat steps 2 -> 4

Error: The message "Your payment has been successfully processed. Thank
you!" is not displayed. Instead, the message "We are not able [...] you
can contact us." is displayed.

This message is displayed when:

if not payment_transaction_ids:
return {
'success': False,
'error': 'no_tx_found',
}

i.e., when the transactions list is empty. Here is how to get the list:
def get_payment_transaction_ids():
# return the ids and not the recordset, since we might need to
# sudo the browse to access all the record
# I prefer to let the controller chose when to access to payment.transaction using sudo
return request.session.get("__payment_tx_ids__", [])

It uses the session of the request. The cookie session_id is used to
identify the current session. However, after the payment on SIPS, the
page is redirected to /payment/sips/dpn with a POST request. Since the
session cookie has the attribute SameSite=Lax and the HTTP request is
a POST, the cookie will be filtered out:
https://drive.google.com/file/d/1xfx3YWkfonO3nK-8Rew45uSoR4lkpjpY/view?usp=sharing
(Browser information: This cookie didn't specify a "SameSite" attribute
when it was stored and was defaulted to "SameSite=Lax," and was blocked
because the request was made from a different site and was not initiated
by a top-level navigation. The cookie had to have been set with
"SameSite=None" to enable cross-site usage)
As a result, the server creates a new one. This is the reason why the
transactions list is empty: the list is based on a new session.

Adding the attribute save_session = False to the route will prevent
the server from creating a new session cookie and adding it in the POST
response.

OPW-2518377

Forward-Port-Of: #72434
Forward-Port-Of: #72267

@robodoo robodoo added conflict There was an error while creating this forward-port PR forwardport This PR was created by @fw-bot labels Jun 21, 2021
@robodoo
Copy link
Contributor

robodoo commented Jun 21, 2021

@fw-bot
Copy link
Contributor Author

fw-bot commented Jun 21, 2021

Ping @adwid, @AntoineVDV
Cherrypicking ecf5a4a of source #72267 failed

stderr:

17:59:37.132681 git.c:344               trace: built-in: git cherry-pick ecf5a4a69c850b829509834cac7555ab21de700d
error: could not apply ecf5a4a69c8... [FIX] payment_sips: prevent clearing the session cookie
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
----------
status:

Either perform the forward-port manually (and push to this branch, proceeding as usual) or close this PR (maybe?).

In the former case, you may want to edit this PR message as well.

@C3POdoo C3POdoo added the OE the report is linked to a support ticket (opw-...) label Jun 21, 2021
When buying a product on website shop, after the payment with SIPS, the
page is redirected to an Error message: "We are not able to find your
payment, but don't worry. You should receive an email confirming your
payment in a few minutes. If the payment hasn't been confirmed you can
contact us."

To reproduce the error:
1. In Payment Acquirers, enable Sips
2. Go on website shop
3. Add a product to the cart, Checkout
4. Pay with Sips
    - Visa card number: 4100000000000000
5. Back to Web-shop, if the payment has been successfully processed,
repeat steps 2 -> 4

Error: The message "Your payment has been successfully processed. Thank
you!" is not displayed. Instead, the message "We are not able [...] you
can contact us." is displayed.

This message is displayed when:
https://github.com/odoo/odoo/blob/5945806c151b13d9d4cc13aa0a6c96a6b1bbad5f/addons/payment/controllers/portal.py#L65-L69
i.e., when the transactions list is empty. Here is how to get the list:
https://github.com/odoo/odoo/blob/5945806c151b13d9d4cc13aa0a6c96a6b1bbad5f/addons/payment/controllers/portal.py#L38-L42
It uses the session of the request. The cookie `session_id` is used to
identify the current session. However, after the payment on SIPS, the
page is redirected to `/payment/sips/dpn` with a POST request. Since the
session cookie has the attribute `SameSite=Lax` and the HTTP request is
a POST, the cookie will be filtered out:
https://drive.google.com/file/d/1xfx3YWkfonO3nK-8Rew45uSoR4lkpjpY/view?usp=sharing
(Browser information: This cookie didn't specify a "SameSite" attribute
when it was stored and was defaulted to "SameSite=Lax," and was blocked
because the request was made from a different site and was not initiated
by a top-level navigation. The cookie had to have been set with
"SameSite=None" to enable cross-site usage)
As a result, the server creates a new one. This is the reason why the
transactions list is empty: the list is based on a new session.

Adding the attribute `save_session = False` to the route will prevent
the server from creating a new session cookie and add it in the POST
response.

OPW-2518377

X-original-commit: 58c4d6f
@adwid adwid force-pushed the 14.0-12.0-OPW-2518377-payment_sips_sessions_cookie-awt-BG9v-fw branch from c525495 to a56d487 Compare June 22, 2021 06:59
@adwid
Copy link
Contributor

adwid commented Jun 22, 2021

@robodoo r+

@robodoo robodoo closed this in f7800a0 Jun 22, 2021
@robodoo robodoo temporarily deployed to merge June 22, 2021 08:38 Inactive
@adwid adwid deleted the 14.0-12.0-OPW-2518377-payment_sips_sessions_cookie-awt-BG9v-fw branch June 23, 2021 13:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
conflict There was an error while creating this forward-port PR forwardport This PR was created by @fw-bot OE the report is linked to a support ticket (opw-...)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants