Skip to content

Commit c555cd0

Browse files
authored
Merge pull request #37 from mattmanley/add_client_certs
Add functionality for client-side certs
2 parents 49bb303 + 5a2a5cc commit c555cd0

5 files changed

Lines changed: 42 additions & 12 deletions

File tree

docs/usage/functionality.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ Module: configuration
2727

2828
.. automodule:: maproulette.api.configuration
2929
:members:
30-
:show-inheritance:
30+
:special-members:

docs/usage/getting_started.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ Import the package:
1414
import maproulette
1515
1616
17-
From there, create a configuration object. Depending on your use case, you may need to pass your API key. Specify
18-
that when you create your configuration. For example:
17+
From there, create a configuration object. When creating the configuration you can specify a number of of parameters
18+
depending on your needs including the hostname, protocol, and client-side certificates. Depending on your use case, you
19+
may need to obtain and pass your API key as well. For example:
1920

2021
.. code-block:: python
2122

maproulette/api/configuration.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,41 @@
11
"""This module contains the basic configuration object that is used to communicate with the MapRoulette API."""
22

3-
DEFAULT_URL = 'maproulette.org'
3+
from typing import Union
4+
5+
DEFAULT_HOSTNAME = 'maproulette.org'
46
DEFAULT_PROTOCOL = 'https'
57
DEFAULT_API_VERSION = '/api/v2'
68

79

810
class Configuration:
911
"""Class for storing the configuration of the MapRoulette server"""
10-
def __init__(self, url=DEFAULT_URL, protocol=DEFAULT_PROTOCOL, api_version=DEFAULT_API_VERSION, api_key=None):
11-
self.url = f"{protocol}://{url}{api_version}"
12-
self.base_url = f"{protocol}://{url}"
12+
def __init__(self, hostname=DEFAULT_HOSTNAME, protocol=DEFAULT_PROTOCOL, api_version=DEFAULT_API_VERSION,
13+
api_key=None, certs=None, verify=True):
14+
"""Create a new configuration object to connect to the MapRoulette server.
15+
16+
:param hostname: Optional parameter to specify the hostname of the MapRoulette instance being addressed. Do
17+
not include the protocol (https, http). Default value is 'maproulette.org'.
18+
:type hostname: str, optional
19+
:param protocol: Optional parameter to specify the protocol to use for the connection to the MapRoulette
20+
instance being addressed such as https or http. Default value is 'https'.
21+
:type protocol: str, optional
22+
:param api_version: Optional parameter to specify the API version to use. The default is '/api/v2'.
23+
:type api_version: str, optional
24+
:param api_key: Optional parameter to pass the user-specific API key. This key is necessary for some actions.
25+
:type api_key: str, optional
26+
:param certs: Optional parameter to pass the client-side certificate and key if necessary to make
27+
connection with the MapRoulette instance being addressed. Can be either a tuple containing the cert and key
28+
file paths (in that order) or a string representing the filepath to both the cert and key stored in a single
29+
file.
30+
:type certs: str or tuple, optional
31+
:param verify: Optional parameter to specify whether to verify SSL certificates for HTTPS requests. Default
32+
is True.
33+
:type verify: bool, optional
34+
"""
35+
self.api_url = f"{protocol}://{hostname}{api_version}"
36+
self.base_url = f"{protocol}://{hostname}"
37+
self.protocol = protocol
1338
self.headers = dict()
1439
self.headers['apikey'] = api_key
15-
self.protocol = protocol
40+
self.certs = certs
41+
self.verify = verify

maproulette/api/maproulette_server.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
class MapRouletteServer:
1111
"""Class that holds the basic requests that can be made to the MapRoulette API."""
1212
def __init__(self, configuration):
13-
self.url = configuration.url
13+
self.url = configuration.api_url
1414
self.base_url = configuration.base_url
1515
self.headers = configuration.headers
16+
self.certs = configuration.certs
17+
self.verify = configuration.verify
1618
if self.__check_health():
1719
self.session = requests.Session()
1820
self.session.headers = self.headers
19-
self.session.verify = False
21+
self.session.verify = self.verify
22+
self.session.cert = self.certs
2023

2124
def __check_health(self, retries=3, delay=5):
2225
"""Checks health of connection to host by pinging the URL set in the configuration
@@ -30,7 +33,8 @@ def __check_health(self, retries=3, delay=5):
3033
response = requests.get(
3134
self.base_url + '/ping',
3235
headers=self.headers,
33-
verify=False
36+
verify=self.verify,
37+
cert=self.certs
3438
)
3539
if not response.ok:
3640
print(f"Unsuccessful connection. Retrying in {str(delay)} seconds")

maproulette/api/project.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"""This module contains the methods that the user will use directly to interact with MapRoulette projects"""
22

3-
import json
43
from maproulette.api.maproulette_server import MapRouletteServer
54
from maproulette.models.project import ProjectModel
65

0 commit comments

Comments
 (0)