Skip to content

Commit c1c7f8f

Browse files
authored
feat: allows users to skip of verifying SSL certificate (influxdata#136)
1 parent 11f0c35 commit c1c7f8f

File tree

5 files changed

+146
-7
lines changed

5 files changed

+146
-7
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## 1.10.0 [unreleased]
22

3+
### Features
4+
1. [#136](https://github.com/influxdata/influxdb-client-python/pull/136): Allows users to skip of verifying SSL certificate
5+
36
## 1.9.0 [2020-07-17]
47

58
### Features

influxdb_client/client/influxdb_client.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class InfluxDBClient(object):
2121
"""InfluxDBClient is client for InfluxDB v2."""
2222

2323
def __init__(self, url, token, debug=None, timeout=10000, enable_gzip=False, org: str = None,
24-
default_tags: dict = None) -> None:
24+
default_tags: dict = None, **kwargs) -> None:
2525
"""
2626
Initialize defaults.
2727
@@ -32,6 +32,7 @@ def __init__(self, url, token, debug=None, timeout=10000, enable_gzip=False, org
3232
:param enable_gzip: Enable Gzip compression for http requests. Currently only the "Write" and "Query" endpoints
3333
supports the Gzip compression.
3434
:param org: organization name (used as a default in query and write API)
35+
:key verify_ssl: Set this to false to skip verifying SSL certificate when calling API from https server.
3536
3637
"""
3738
self.url = url
@@ -48,6 +49,7 @@ def __init__(self, url, token, debug=None, timeout=10000, enable_gzip=False, org
4849
conf.host = self.url
4950
conf.enable_gzip = enable_gzip
5051
conf.debug = debug
52+
conf.verify_ssl = kwargs.get('verify_ssl', True)
5153

5254
auth_token = self.token
5355
auth_header_name = "Authorization"

influxdb_client/client/write_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,8 @@ def write(self, bucket: str, org: str = None,
204204
the body line-protocol. The precision specified on a Point has precedes
205205
and is use for write.
206206
:param record: Points, line protocol, Pandas DataFrame, RxPY Observable to write
207-
:param data_frame_measurement_name: name of measurement for writing Pandas DataFrame
208-
:param data_frame_tag_columns: list of DataFrame columns which are tags, rest columns will be fields
207+
:key data_frame_measurement_name: name of measurement for writing Pandas DataFrame
208+
:key data_frame_tag_columns: list of DataFrame columns which are tags, rest columns will be fields
209209
"""
210210
if org is None:
211211
org = self._influxdb_client.org

tests/server.pem

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFZjCCA04CCQCMEn5e+4xmLTANBgkqhkiG9w0BAQsFADB1MQswCQYDVQQGEwJV
3+
UzEQMA4GA1UECAwHTmV3WW9yazEQMA4GA1UEBwwHTmV3WW9yazEdMBsGA1UECgwU
4+
SW5mbHV4REJQeXRob25DbGllbnQxDzANBgNVBAsMBkNsaWVudDESMBAGA1UEAwwJ
5+
bG9jYWxob3N0MB4XDTIwMDcyMDA2MzA0OVoXDTQ3MTIwNjA2MzA0OVowdTELMAkG
6+
A1UEBhMCVVMxEDAOBgNVBAgMB05ld1lvcmsxEDAOBgNVBAcMB05ld1lvcmsxHTAb
7+
BgNVBAoMFEluZmx1eERCUHl0aG9uQ2xpZW50MQ8wDQYDVQQLDAZDbGllbnQxEjAQ
8+
BgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
9+
AMoqURng8JwLYe4IHyIAGlI80utBLq6XbDETY93Pr6ZdHePr2jM+UIfFtdkpqdJw
10+
56ZxnJPtM1kDQJTsGfkf0/ePKZpnunNk+lkz9l5uQPVcujydplhJgJeHEj49s3Yy
11+
mWYetcR1Oejnqxgh+9Ev79r1Napu3s80SACPgvTP45CLp1hOGFySRaW7jcG3i+V4
12+
ljQWVAEse9Vy3e7E1EY2p6z/Zvj2UVOMqdHsivR1XLy5hts5ubIqOqvOCPocJ+0/
13+
m0AjwCXO4QPy7pLAAa7DA9rWDpzx8jpdfe54NOHuj4SVP45+PPsWvvkN2ZOkC/vb
14+
zz4DcYVwIqtqej8mvO2kkPIFLdRSKUc5N3xmdvF5awBGfHhb4l/KIDlhRle+L9kF
15+
LxRgkmBb2FFfL0/GtQlpH0bHHwPij4jPcOY+ueLKmAMgwWdqYae0HS01F7nYeZuP
16+
StDG+YuCjglOH8xugcV9GBXrRTijyjuml4st3Wl4tPpQClmdoZ2LXp5h/6Zq1aoc
17+
QlraKjwuTuzQBBHIFh9KXLZANLtMLpGGepFSMqE6YIWl17gi/2NruP8MGXNk+7GM
18+
ylczKu/Ny67qQ8JCnRLSNUXPg18LjU2voLuzgXWtuTUgRnQBdir6ZB5Bwc2zi0vx
19+
DNl0yzDhGNFdR5Rng5lAcmclA4QWi7Oc4h/OLN0ma0UzAgMBAAEwDQYJKoZIhvcN
20+
AQELBQADggIBADsWOWIMvynE2Iwtpv471kROYdqrj6Zj5P8Ye5/0lqedRxIYWDsc
21+
XDii+ePem+cMhnty8tAqCeHIdBUN86ibP+oqlwySbvdvW121RfedsWpa+TPC+Rnj
22+
8n5w0urVNpnYuep2f8SOpQ1WdXFMLIsKqcnV5KK3/rxOAUY9cNVumA55/terQMOZ
23+
RSGfjtoKVkMSOxNlaj4frLNy+I7nyWYrZ9UmUirvGLce5LJ1nrmo2I46FA0XDwu8
24+
xJqe4mB3GT/t9kFujd3Q/MtgD4J/MjWBfSYV0vlzI+VuoRctikw2SWQckQWNlIhs
25+
LPafo6D+lOxJtH58WksCxdb8C8sBbRl+irv/ZAlvIiOkmcpHcOQ7AbLTtosZs6nX
26+
p0ptWENlTM3lkt/Xma8txWXfe29tlf/9oheqXKdYunRyvFPL/gBjjR/VWzIS5sT5
27+
T6z0Vdk7uW9/wzv45vzjES8a8AAFvEkaRS4JBoTCW69mc8RFR89Vp9axRHY/3ohQ
28+
8pS9K00FLMTObb8qlW31LfKpCUSxHmU00BhGPduMYQF28Xj02zQ5UaeGOnSO5EjU
29+
pG0N7yqaVwGv9jYQfmnnD7M5LYVweEZ3OzCbfZuNJ4+EHNdZKcJiu2TaOsyxK25q
30+
AJvDAFTSr5A9GSjJ3OyIeKoI8Q6xuaQBitpZR90P/Ah/Ymg490rpXavk
31+
-----END CERTIFICATE-----
32+
-----BEGIN PRIVATE KEY-----
33+
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
82+
EyqjJVOYUopmtejzqNMx6o2AA2jSc/oI
83+
-----END PRIVATE KEY-----

tests/test_InfluxDBClient.py

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,64 @@
1+
import http.server
2+
import json
3+
import threading
14
import unittest
25

36
from influxdb_client import InfluxDBClient
47

58

69
class InfluxDBClientTest(unittest.TestCase):
710

11+
def tearDown(self) -> None:
12+
if self.client:
13+
self.client.close()
14+
if hasattr(self, 'httpd'):
15+
self.httpd.shutdown()
16+
if hasattr(self, 'httpd_thread'):
17+
self.httpd_thread.join()
18+
819
def test_TrailingSlashInUrl(self):
9-
client = InfluxDBClient(url="http://localhost:9999", token="my-token", org="my-org")
10-
self.assertEqual('http://localhost:9999', client.api_client.configuration.host)
20+
self.client = InfluxDBClient(url="http://localhost:9999", token="my-token", org="my-org")
21+
self.assertEqual('http://localhost:9999', self.client.api_client.configuration.host)
22+
23+
self.client = InfluxDBClient(url="http://localhost:9999/", token="my-token", org="my-org")
24+
self.assertEqual('http://localhost:9999', self.client.api_client.configuration.host)
25+
26+
def test_ConnectToSelfSignedServer(self):
27+
import http.server
28+
import ssl
29+
import os
30+
31+
# Disable unverified HTTPS requests
32+
import urllib3
33+
urllib3.disable_warnings()
34+
35+
# Configure HTTP server
36+
self.httpd = http.server.HTTPServer(('localhost', 0), ServerWithSelfSingedSSL)
37+
self.httpd.socket = ssl.wrap_socket(self.httpd.socket, certfile=f'{os.path.dirname(__file__)}/server.pem',
38+
server_side=True)
39+
40+
# Start server at background
41+
self.httpd_thread = threading.Thread(target=self.httpd.serve_forever)
42+
self.httpd_thread.start()
43+
44+
self.client = InfluxDBClient(f"https://localhost:{self.httpd.server_address[1]}",
45+
token="my-token", verify_ssl=False)
46+
health = self.client.health()
47+
48+
self.assertEqual(health.message, 'ready for queries and writes')
49+
self.assertEqual(health.status, "pass")
50+
self.assertEqual(health.name, "influxdb")
51+
52+
53+
class ServerWithSelfSingedSSL(http.server.SimpleHTTPRequestHandler):
54+
def _set_headers(self):
55+
self.send_response(200)
56+
self.send_header('Content-type', 'application/json')
57+
self.end_headers()
1158

12-
client = InfluxDBClient(url="http://localhost:9999/", token="my-token", org="my-org")
13-
self.assertEqual('http://localhost:9999', client.api_client.configuration.host)
59+
def do_GET(self):
60+
self._set_headers()
61+
response = json.dumps(
62+
dict(name="influxdb", message="ready for queries and writes", status="pass", checks=[], version="2.0.0",
63+
commit="abcdefgh")).encode('utf-8')
64+
self.wfile.write(response)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy