Git Product home page Git Product logo

moneroodoo's People

Contributors

serhack avatar t-900-a avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

moneroodoo's Issues

Odoo server crash on unconfigered install

Steps to reproduce:

Create an odoo test environment with demo data.
Install monero-odoo-rpc with all its dependencies.
Activate the monero currency
Set monero payment acquirer to test mode.

Visit the webshop.
(prices are still in usd as it should).
Buy an product in the webshop.
Click Proceed to checkout. and Odoo crashes.


odoo_1                        | 2022-04-23 19:29:36,179 1 CRITICAL devel odoo.addons.monero-rpc-odoo.models.monero_acq: Monero RPC Error 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 158, in _new_conn
odoo_1                        |     conn = connection.create_connection(
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 80, in create_connection
odoo_1                        |     raise err
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 70, in create_connection
odoo_1                        |     sock.connect(sa)
odoo_1                        | ConnectionRefusedError: [Errno 111] Connection refused
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 597, in urlopen
odoo_1                        |     httplib_response = self._make_request(conn, method, url,
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 354, in _make_request
odoo_1                        |     conn.request(method, url, **httplib_request_kw)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1256, in request
odoo_1                        |     self._send_request(method, url, body, headers, encode_chunked)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1302, in _send_request
odoo_1                        |     self.endheaders(body, encode_chunked=encode_chunked)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1251, in endheaders
odoo_1                        |     self._send_output(message_body, encode_chunked=encode_chunked)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1011, in _send_output
odoo_1                        |     self.send(msg)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 951, in send
odoo_1                        |     self.connect()
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 181, in connect
odoo_1                        |     conn = self._new_conn()
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 167, in _new_conn
odoo_1                        |     raise NewConnectionError(
odoo_1                        | urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7faf7731e850>: Failed to establish a new connection: [Errno 111] Connection refused
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
odoo_1                        |     resp = conn.urlopen(
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 637, in urlopen
odoo_1                        |     retries = retries.increment(method, url, error=e, _pool=self,
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/util/retry.py", line 399, in increment
odoo_1                        |     raise MaxRetryError(_pool, url, error or ResponseError(cause))
odoo_1                        | urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=18082): Max retries exceeded with url: /json_rpc (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7faf7731e850>: Failed to establish a new connection: [Errno 111] Connection refused'))
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/opt/odoo/auto/addons/monero-rpc-odoo/models/monero_acq.py", line 33, in get_wallet
odoo_1                        |     wallet = Wallet(rpc_server)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/wallet.py", line 43, in __init__
odoo_1                        |     self.refresh()
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/wallet.py", line 54, in refresh
odoo_1                        |     for _acc in self._backend.accounts():
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/backends/jsonrpc/wallet.py", line 78, in accounts
odoo_1                        |     _accounts = self.raw_request("get_accounts")
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/backends/jsonrpc/wallet.py", line 391, in raw_request
odoo_1                        |     rsp = self.session.post(
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 581, in post
odoo_1                        |     return self.request('POST', url, data=data, json=json, **kwargs)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 533, in request
odoo_1                        |     resp = self.send(prep, **send_kwargs)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 646, in send
odoo_1                        |     r = adapter.send(request, **kwargs)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
odoo_1                        |     raise ConnectionError(e, request=request)
odoo_1                        | requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=18082): Max retries exceeded with url: /json_rpc (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7faf7731e850>: Failed to establish a new connection: [Errno 111] Connection refused'))
odoo_1                        | 2022-04-23 19:29:36,214 1 ERROR devel odoo.addons.monero-rpc-odoo.controllers.website_sale: USER IMPACT: Monero Payment Acquirer experienced an Error with RPC: ConnectionError 
odoo_1                        | 2022-04-23 19:29:36,317 1 INFO devel werkzeug: 192.168.112.13 - - [23/Apr/2022 19:29:36] "GET /shop/payment HTTP/1.1" 500 - 38 0.055 0.170
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 158, in _new_conn
odoo_1                        |     conn = connection.create_connection(
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 80, in create_connection
odoo_1                        |     raise err
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/util/connection.py", line 70, in create_connection
odoo_1                        |     sock.connect(sa)
odoo_1                        | ConnectionRefusedError: [Errno 111] Connection refused
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 597, in urlopen
odoo_1                        |     httplib_response = self._make_request(conn, method, url,
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 354, in _make_request
odoo_1                        |     conn.request(method, url, **httplib_request_kw)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1256, in request
odoo_1                        |     self._send_request(method, url, body, headers, encode_chunked)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1302, in _send_request
odoo_1                        |     self.endheaders(body, encode_chunked=encode_chunked)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1251, in endheaders
odoo_1                        |     self._send_output(message_body, encode_chunked=encode_chunked)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 1011, in _send_output
odoo_1                        |     self.send(msg)
odoo_1                        |   File "/usr/local/lib/python3.8/http/client.py", line 951, in send
odoo_1                        |     self.connect()
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 181, in connect
odoo_1                        |     conn = self._new_conn()
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 167, in _new_conn
odoo_1                        |     raise NewConnectionError(
odoo_1                        | urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7faf7731e850>: Failed to establish a new connection: [Errno 111] Connection refused
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
odoo_1                        |     resp = conn.urlopen(
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 637, in urlopen
odoo_1                        |     retries = retries.increment(method, url, error=e, _pool=self,
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/urllib3/util/retry.py", line 399, in increment
odoo_1                        |     raise MaxRetryError(_pool, url, error or ResponseError(cause))
odoo_1                        | urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=18082): Max retries exceeded with url: /json_rpc (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7faf7731e850>: Failed to establish a new connection: [Errno 111] Connection refused'))
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/opt/odoo/custom/src/private/monero-rpc-odoo/controllers/website_sale.py", line 46, in payment
odoo_1                        |     wallet = acquirer.get_wallet()
odoo_1                        |   File "/opt/odoo/custom/src/private/monero-rpc-odoo/models/monero_acq.py", line 40, in get_wallet
odoo_1                        |     raise e
odoo_1                        |   File "/opt/odoo/custom/src/private/monero-rpc-odoo/models/monero_acq.py", line 33, in get_wallet
odoo_1                        |     wallet = Wallet(rpc_server)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/wallet.py", line 43, in __init__
odoo_1                        |     self.refresh()
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/wallet.py", line 54, in refresh
odoo_1                        |     for _acc in self._backend.accounts():
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/backends/jsonrpc/wallet.py", line 78, in accounts
odoo_1                        |     _accounts = self.raw_request("get_accounts")
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/monero/backends/jsonrpc/wallet.py", line 391, in raw_request
odoo_1                        |     rsp = self.session.post(
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 581, in post
odoo_1                        |     return self.request('POST', url, data=data, json=json, **kwargs)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 533, in request
odoo_1                        |     resp = self.send(prep, **send_kwargs)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 646, in send
odoo_1                        |     r = adapter.send(request, **kwargs)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
odoo_1                        |     raise ConnectionError(e, request=request)
odoo_1                        | requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=18082): Max retries exceeded with url: /json_rpc (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7faf7731e850>: Failed to establish a new connection: [Errno 111] Connection refused'))
odoo_1                        | 
odoo_1                        | During handling of the above exception, another exception occurred:
odoo_1                        | 
odoo_1                        | Traceback (most recent call last):
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/service/wsgi_server.py", line 113, in application
odoo_1                        |     return application_unproxied(environ, start_response)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/service/wsgi_server.py", line 88, in application_unproxied
odoo_1                        |     result = odoo.http.root(environ, start_response)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 1307, in __call__
odoo_1                        |     return self.dispatch(environ, start_response)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 1273, in __call__
odoo_1                        |     return self.app(environ, start_wrapped)
odoo_1                        |   File "/usr/local/lib/python3.8/site-packages/werkzeug/middleware/shared_data.py", line 220, in __call__
odoo_1                        |     return self.app(environ, start_response)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 1497, in dispatch
odoo_1                        |     result = ir_http._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/website_sale/models/ir_http.py", line 15, in _dispatch
odoo_1                        |     return super(IrHttp, cls)._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/website/models/ir_http.py", line 183, in _dispatch
odoo_1                        |     response = super(Http, cls)._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/auth_signup/models/ir_http.py", line 19, in _dispatch
odoo_1                        |     return super(Http, cls)._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/web_editor/models/ir_http.py", line 21, in _dispatch
odoo_1                        |     return super(IrHttp, cls)._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/utm/models/ir_http.py", line 29, in _dispatch
odoo_1                        |     response = super(IrHttp, cls)._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/http_routing/models/ir_http.py", line 508, in _dispatch
odoo_1                        |     result = super(IrHttp, cls)._dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_http.py", line 241, in _dispatch
odoo_1                        |     return cls._handle_exception(e)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/utm/models/ir_http.py", line 34, in _handle_exception
odoo_1                        |     response = super(IrHttp, cls)._handle_exception(exc)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/http_routing/models/ir_http.py", line 609, in _handle_exception
odoo_1                        |     raise e
odoo_1                        |   File "/opt/odoo/custom/src/odoo/addons/http_routing/models/ir_http.py", line 600, in _handle_exception
odoo_1                        |     response = super(IrHttp, cls)._handle_exception(exception)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_http.py", line 206, in _handle_exception
odoo_1                        |     raise exception
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
odoo_1                        |     result = request.dispatch()
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 808, in dispatch
odoo_1                        |     r = self._call_function(**self.params)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 361, in _call_function
odoo_1                        |     return checked_call(self.db, *args, **kwargs)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/service/model.py", line 94, in wrapper
odoo_1                        |     return f(dbname, *args, **kwargs)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 349, in checked_call
odoo_1                        |     result = self.endpoint(*a, **kw)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 914, in __call__
odoo_1                        |     return self.method(*args, **kw)
odoo_1                        |   File "/opt/odoo/custom/src/odoo/odoo/http.py", line 533, in response_wrap
odoo_1                        |     response = f(*args, **kw)
odoo_1                        |   File "/opt/odoo/custom/src/private/monero-rpc-odoo/controllers/website_sale.py", line 73, in payment
odoo_1                        |     raise ValidationError(
odoo_1                        | odoo.exceptions.ValidationError: Current technical issues prevent Monero from being accepted, choose another payment method
odoo_1                        | 2022-04-23 19:29:36,784 1 INFO ? werkzeug: 192.168.112.13 - - [23/Apr/2022 19:29:36] "GET /shop/payment?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 - - - -


Exprected result:
An proper error message and no server crash.

Refactor module structure and naming convention

Currently there are 2 modules in this repo, each of them have a lot of dependencies and data.
Some of the data is double. Proposal is to use common odoo practice and perform a clean up by adding a parent base module.

base_monero

The base module will define XMR currency and symbol.
To fix allow to use enough decimal places and optional integration with accounting let it depend on the oca module account_cryptocurrency
Sets up the monero journals.
also have the following dependencies:
account
queue_job
"external_dependencies": {"python": ["monero"]}
It will not depend on web. So it can be used on systems without website installed.

monero-rpc-odoo

monero-rpc-odoo rename to payment_monero
Depends on the base_monero module.

monero-rpc-odoo-pos

monero-rpc-odoo-pos rename to pos_payment_monero
Depends on the base_monero module.
Remove the field is_cryptocurrency, as it is unused.
(maybe implement a hook to recalulate the exchange rate.)
"category": "Accounting" to 'category': 'Sales/Point of Sale'

account_monero_transfer

Future module to be developed to initiate a monero payment from the odoo backend to a supplier?
Will also depend on base monero.
Depends on the base_monero module.

edit:
since the monero lib is used instead of monero-rpc.
Change the names to prevent confusion.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.