Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vltr/sanic-ipware
Retrieve your client's IP address (or try its best to)
https://github.com/vltr/sanic-ipware
ip request sanic
Last synced: about 1 month ago
JSON representation
Retrieve your client's IP address (or try its best to)
- Host: GitHub
- URL: https://github.com/vltr/sanic-ipware
- Owner: vltr
- License: mit
- Created: 2018-09-28T14:44:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-09-28T15:08:01.000Z (over 6 years ago)
- Last Synced: 2024-11-20T11:11:28.523Z (about 2 months ago)
- Topics: ip, request, sanic
- Language: Python
- Size: 22.5 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- License: LICENSE
Awesome Lists containing this project
README
=================
``sanic-ipware``
=================.. start-badges
.. image:: https://img.shields.io/pypi/status/sanic-ipware.svg
:alt: PyPI - Status
:target: https://pypi.org/project/sanic-ipware/.. image:: https://img.shields.io/pypi/v/sanic-ipware.svg
:alt: PyPI Package latest release
:target: https://pypi.org/project/sanic-ipware/.. image:: https://img.shields.io/pypi/pyversions/sanic-ipware.svg
:alt: Supported versions
:target: https://pypi.org/project/sanic-ipware/.. image:: https://travis-ci.org/vltr/sanic-ipware.svg?branch=master
:alt: Travis-CI Build Status
:target: https://travis-ci.org/vltr/sanic-ipware.. image:: https://codecov.io/github/vltr/sanic-ipware/coverage.svg?branch=master
:alt: Coverage Status
:target: https://codecov.io/github/vltr/sanic-ipware.. end-badges
This is a fork of `django-ipware `_ to work with `Sanic `_.
Overview
--------**Best attempt** to get client's IP address while keeping it **DRY**.
Notice
------There is no real good "out-of-the-box" solution against fake IP addresses, aka "IP Address Spoofing". You are encouraged to read the `Advanced users `_ section of this page and use ``trusted_proxies_ips`` and/or ``proxy_count`` features to match your needs, especially *if* you are planning to include ``sanic-ipware`` in any authentication, security or "anti-fraud" related architecture.
How to install
--------------The best way to install ``sanic-ipware`` would be using ``pip``:
.. code-block::
pip install sanic-ipware
How to use
----------There's basically one method that should be usable from ``sanic_ipware``, called ``get_client_ip``. The result is a ``Tuple[Optional[str], bool]`` of ``(ipaddr, routable)``.
.. code-block:: python
from sanic_ipware import get_client_ip
@app.get("/some/handler")
async def somehandler(request):
ip, routable = get_client_ip(request)
if ip is not None:
if routable:
# we have a (probably) real, public ip address for user
else:
# we have ip address, but it might not be public routable
else:
# we don't have a ip address for the userAdvanced users
--------------.. code-block:: python
# you can provide your own meta precedence order by using the
# request_header_order in the function call:
ip, routable = get_client_ip(
request,
request_header_order=['Forwarded-For', 'X-Forwarded-For'])# if you're going to do this a lot, wrap the function somewhere with
# functools.partial
from functools import partial
my_get_client_ip = partial(
get_client_ip,
request_header_order=['Forwarded-For', 'X-Forwarded-For'])
ip, routable = my_get_client_ip(request)# if you plan to use sanic_ipware in any authentication, security or
# "anti-fraud" related architecture, you should configure it to only
# "trust" one or more "known" proxy server(s)), in the function call:
ip, routable = get_client_ip(request, proxy_trusted_ips=['198.84.193.158'])# you can perform the same functools.partial trick with these trusted IPs
License
-------MIT, the same as ``django-ipware`` `license `_ .