dopstar / requests-ntlm2 Goto Github PK
View Code? Open in Web Editor NEWdeep-copied from https://github.com/requests/requests-ntlm and then modified
License: Other
deep-copied from https://github.com/requests/requests-ntlm and then modified
License: Other
Traceback
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/requests/sessions.py', line 587, in request
resp = self.send(prep, **send_kwargs)
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/requests/sessions.py', line 701, in send
r = adapter.send(request, **kwargs)
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/requests/adapters.py', line 499, in send
timeout=timeout,
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/urllib3/connectionpool.py', line 700, in urlopen
self._prepare_proxy(conn)
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/urllib3/connectionpool.py', line 996, in _prepare_proxy
conn.connect()
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/urllib3/connection.py', line 369, in connect
self._tunnel()
File '/usr/local/cape/farshot/venv/lib/python3.7/site-packages/requests_ntlm2/connection.py', line 218, in _tunnel
body_length += len(line)
TypeError: object of type 'NoneType' has no len()
Please add python 3.10 support.
Is there a way to put an md5 (password) or similar, to be able to save the key safely
File "/data/miniconda3/lib/python3.7/site-packages/requests_ntlm2/connection.py", line 45, in _get_header_bytes
http_connect_string = b"CONNECT {}:{} HTTP/1.0\r\n".format(host, port)
AttributeError: 'bytes' object has no attribute 'format'
I'm stumbled on this and it looks promising. However, I'm encountering an issue causing a traceback.
pip install requests-ntlm2
pip freeze
certifi==2019.11.28
cffi==1.13.2
chardet==3.0.4
cryptography==2.8
idna==2.8
ntlm-auth==1.4.0
pycparser==2.19
requests==2.22.0
requests-ntlm2==6.0.10
six==1.14.0
urllib3==1.25.8
test.py
import urllib3
import requests
from requests_ntlm2 import HttpNtlmAdapter, HttpNtlmAuth
proxy = {
'proxies': {
'http': 'http://proxy.domain.com:8080',
'https': 'http://proxy.domain.com:8080',
},
'auth': {
'method': 'ntlm',
'user': r'domain\user',
'pass': 'ntlm_password'
}
}
# random https site that doesn't need any auth
test_site = 'https://'
proxy_credential = proxy['auth']
proxy_user = proxy_credential['user']
proxy_password = proxy_credential['pass']
proxy_auth = HttpNtlmAuth(proxy_user, proxy_password)
proxy_adapter = HttpNtlmAdapter(proxy_user, proxy_password)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
session = requests.Session()
session.proxies = proxy['proxies']
session.mount('https://', proxy_adapter)
session.mount('http://', proxy_adapter)
session.auth = proxy_auth
get_website = session.get(
test_site,
verify=False,
timeout=(15, 30),
)
print(get_website)
$ python test.py Traceback (most recent call last): File "test.py", line 50, in <module> timeout=(15, 30), File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/requests/sessions.py", line 546, in get return self.request('GET', url, **kwargs) File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/requests/sessions.py", line 533, in request resp = self.send(prep, **send_kwargs) File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/requests/sessions.py", line 646, in send r = adapter.send(request, **kwargs) File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/requests/adapters.py", line 449, in send timeout=timeout File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/urllib3/connectionpool.py", line 662, in urlopen self._prepare_proxy(conn) File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/urllib3/connectionpool.py", line 948, in _prepare_proxy conn.connect() File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/urllib3/connection.py", line 308, in connect self._tunnel() File "/projects/code/python/test-ntlm-proxy/lib/python3.7/site-packages/requests_ntlm2/connection.py", line 145, in _tunnel if line.lower().startswith("{}:".format(header)): TypeError: startswith first arg must be bytes or a tuple of bytes, not str
Any help you can provide is greatly appreciated
Hello there. I'm trying to test the HTTP CONNECT Usage example in the Readme section and it's failing with a BadStatusLine
exception.
I believe this particular error might arise only when using Squid with NTLM Auth, because of how this proxy crafts the responses.
This might be related to #14 but no way to know because the proxy used for testing is not specified there.
Python 3.8 virtualenv with the following
certifi==2020.6.20
cffi==1.14.3
chardet==3.0.4
cryptography==3.1.1
idna==2.10
ntlm-auth==1.5.0
pycparser==2.20
requests==2.24.0
requests-ntlm2==6.2.7
six==1.15.0
urllib3==1.25.11
Going through a Squid 3.5.20 proxy with NTLMv2 auth.
ntlm_proxy.py
file.get
call.python ntlm_proxy.py
using the python3.8 virtualenv.The script should not fail. We should be able to see the response from the requested page with it's content.
A BadStatusLine
exception is raised when trying to interpret the status of the second response of the Squid Proxy.
Traceback (most recent call last):
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 667, in urlopen
self._prepare_proxy(conn)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 932, in _prepare_proxy
conn.connect()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connection.py", line 317, in connect
self._tunnel()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests_ntlm2/connection.py", line 166, in _tunnel
version, code, message, response = self._get_response()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests_ntlm2/connection.py", line 85, in _get_response
version, code, message = response._read_status()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/http/client.py", line 289, in _read_status
raise BadStatusLine(line)
http.client.BadStatusLine: icense
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 726, in urlopen
retries = retries.increment(
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/util/retry.py", line 410, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/packages/six.py", line 734, in reraise
raise value.with_traceback(tb)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 667, in urlopen
self._prepare_proxy(conn)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connectionpool.py", line 932, in _prepare_proxy
conn.connect()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/urllib3/connection.py", line 317, in connect
self._tunnel()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests_ntlm2/connection.py", line 166, in _tunnel
version, code, message, response = self._get_response()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests_ntlm2/connection.py", line 85, in _get_response
version, code, message = response._read_status()
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/http/client.py", line 289, in _read_status
raise BadStatusLine(line)
urllib3.exceptions.ProtocolError: ('Connection aborted.', BadStatusLine('icense\n'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "python_ntlm_auth.py", line 51, in <module>
response = ntlm_request()
File "python_ntlm_auth.py", line 46, in ntlm_request
response = session.get('https://github.com', proxies=proxies)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests/sessions.py", line 543, in get
return self.request('GET', url, **kwargs)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "/opt/miniconda3/envs/ntlmproxy3.8/lib/python3.8/site-packages/requests/adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine('icense\n'))
Using wireshark and debugging I realized the issue was related to Squid sending an HTML page in the 407 Proxy Authentication Required which splitted the request into multiple tcp packages. In addition, before this HTML page Squid is sending a blank line (\r\n
) which is interpreted as the end of the request here.
This two things (multiple TCP packages over the same socket and the blank line mid request) lead to the failure here because a header line is expected but garbage from the previous request is read instead.
I was able to fix this issue interpreting two consecutive new lines or empty lines as the requests actually finishing. I will create a PR with that so We can work from there.
Thanks!
requests-ntlm2 relies on an embedded copy of six.py being in urllib3. However, Debian/Ubuntu (and maybe others) remove this package, and modify urllib3 to use the system six installation. This causes an error when trying to use requests-ntlm2:
$ python3 -c 'from requests_ntlm2 import HttpNtlmAuth'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python3.8/dist-packages/requests_ntlm2/__init__.py", line 1, in <module>
from .adapters import HttpNtlmAdapter, HttpProxyAdapter
File "/usr/local/lib/python3.8/dist-packages/requests_ntlm2/adapters.py", line 10, in <module>
from .connection import HTTPConnection as _HTTPConnection
File "/usr/local/lib/python3.8/dist-packages/requests_ntlm2/connection.py", line 9, in <module>
from requests.packages.urllib3.packages.six.moves.http_client import (
ModuleNotFoundError: No module named 'requests.packages.urllib3.packages.six'
Instead, I propose adding six
to the requirements in setup.py, and import that instead.
Openssl3 breaks the md4 hashing, is there a way to specify using md5?
Hello, I am trying to connect to a https url via a squid proxy which is enabled for NTLM authentication. But it is throwing error.
from requests_ntlm2 import HttpNtlmAuth, NtlmCompatibility, HttpNtlmAdapter
import requests
import logging
logging.basicConfig(level=logging.DEBUG)
session = requests.Session()
proxi = {"https": 'http://{}:{}'.format('ip', 8080)}
ntlm_compatibility = NtlmCompatibility.NTLMv2_DEFAULT
session.mount(
'https://',
HttpNtlmAdapter(
"domain\\Administrator",
"pwd",
ntlm_compatibility=ntlm_compatibility
)
)
session.auth = HttpNtlmAuth(
"domain\\Administrator",
"pwd",
ntlm_compatibility=ntlm_compatibility
)
session.proxies = proxi
response = session.get('https://github.com')
print(response)
Output:
DEBUG:requests_ntlm2.adapters:proxy headers: {}
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): github.com:443
DEBUG:requests_ntlm2.connection:attempting to open tunnel using HTTP CONNECT
DEBUG:requests_ntlm2.connection:username: Administrator, domain: domain
DEBUG:requests_ntlm2.connection:workstation: workstation
DEBUG:requests_ntlm2.connection:> 'CONNECT github.com:443 HTTP/1.0\r\n'
DEBUG:requests_ntlm2.connection:> 'Host: github.com:443\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Authorization: NTLM TlRMTVNTUAABAAAAMbCI4g4ADgAoAAAADwAPADYAAAAGAbEdAAAAD2F1dGhtaW5kLmxvY2FsRUMyQU1BWi1BMkJLNjBH\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Connection: Keep-Alive\r\n'
DEBUG:requests_ntlm2.connection:< 'HTTP/1.1 407 Proxy Authentication Required\r\n'
INFO:requests_ntlm2.connection:< b'Content-Type: text/html; charset=utf-8\r\n'
INFO:requests_ntlm2.connection:< b'Content-Length: 6585\r\n'
INFO:requests_ntlm2.connection:< b'Connection: close\r\n'
INFO:requests_ntlm2.connection:< b'Proxy-Authenticate: Negotiate\r\n'
DEBUG:requests_ntlm2.connection:> 'CONNECT github.com:443 HTTP/1.0\r\n'
DEBUG:requests_ntlm2.connection:> 'Host: github.com:443\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Authorization: NTLM TlRMTVNTUAABAAAAMbCI4g4ADgAoAAAADwAPADYAAAAGAbEdAAAAD2F1dGhtaW5kLmxvY2FsRUMyQU1BWi1BMkJLNjBH\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Connection: Keep-Alive\r\n'
Traceback (most recent call last):
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 700, in urlopen
self._prepare_proxy(conn)
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 994, in _prepare_proxy
conn.connect()
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connection.py", line 369, in connect
self._tunnel()
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests_ntlm2\connection.py", line 226, in _tunnel
version, code, message, response = self._get_response()
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests_ntlm2\connection.py", line 129, in _get_response
version, code, message = response._read_status()
File "\AppData\Local\Programs\Python\Python38\lib\http\client.py", line 268, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "\AppData\Local\Programs\Python\Python38\lib\socket.py", line 669, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\adapters.py", line 439, in send
resp = conn.urlopen(
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 785, in urlopen
retries = retries.increment(
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\util\retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "ntlm_https.py", line 30, in <module>
response = session.get('https://github.com')
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\sessions.py", line 555, in get
return self.request('GET', url, **kwargs)
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\adapters.py", line 510, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)))
what am I missing. I am able to work with http urls.
At the moment only the source tarball is published to PyPI but it would be nice if a wheel was also published.
Hi, i have the following code:
from requests_ntlm2 import HttpNtlmAuth, NtlmCompatibility, HttpNtlmAdapter
import requests
import logging
logging.basicConfig(level=logging.DEBUG)
session = requests.Session()
proxi = {"https": 'http://{}:{}'.format('10.10.11.25', 8080)}
ntlm_compatibility = NtlmCompatibility.NTLMv2_DEFAULT
session.mount(
'https://',
HttpNtlmAdapter(
"WINGATE\\usr",
"pwd",
ntlm_compatibility=ntlm_compatibility
)
)
session.auth = HttpNtlmAuth(
"WINGATE\\usr",
"pwd",
ntlm_compatibility=ntlm_compatibility
)
session.proxies = proxi
session.post("https://site.url")
when i try this code with our internal WINGATE with ntml v1 and v2 enabled with ntlm compatibility version "NtlmCompatibility.LM_AND_NTLMv1_WITH_ESS" all work very good,
but when i use ntlm compatibility "NtlmCompatibility.NTLMv2_DEFAULT" or above nothing work and i receive the following errors:
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): webhook.site:443
DEBUG:requests_ntlm2.connection:attempting to open tunnel using HTTP CONNECT
DEBUG:requests_ntlm2.connection:username: usr, domain: WINGATE
DEBUG:requests_ntlm2.connection:> 'CONNECT webhook.site:443 HTTP/1.0\r\n'
DEBUG:requests_ntlm2.connection:> 'Host: webhook.site:443\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Authorization: NTLM TlRMTVNTUAABAAAAMpCI4gcABwAoAAAAAAAAAC8AAAAGAbEdAAAAD1dJTkdBVEU=\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Connection: Keep-Alive\r\n'
DEBUG:requests_ntlm2.connection:< 'HTTP/1.1 407 Proxy authorization required\r\n'
INFO:requests_ntlm2.connection:< b'Proxy-Authenticate: NTLM\r\n'
INFO:requests_ntlm2.connection:< b'Proxy-Support: session-based-authentication\r\n'
INFO:requests_ntlm2.connection:< b'Cache-control: no-store, no-cache\r\n'
INFO:requests_ntlm2.connection:< b'Content-Type: text/html; charset=utf-8\r\n'
INFO:requests_ntlm2.connection:< b'Content-Length: 855\r\n'
INFO:requests_ntlm2.connection:< b'Date: Thu, 23 Apr 2020 08:25:53 GMT\r\n'
INFO:requests_ntlm2.connection:< b'Server: WinGate Engine\r\n'
INFO:requests_ntlm2.connection:< b'Proxy-Connection: Keep-Alive\r\n'
DEBUG:requests_ntlm2.connection:> 'CONNECT webhook.site:443 HTTP/1.0\r\n'
DEBUG:requests_ntlm2.connection:> 'Host: webhook.site:443\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Authorization: NTLM TlRMTVNTUAABAAAAMpCI4gcABwAoAAAAAAAAAC8AAAAGAbEdAAAAD1dJTkdBVEU=\r\n'
DEBUG:requests_ntlm2.connection:> 'Proxy-Connection: Keep-Alive\r\n'
DEBUG:requests_ntlm2.connection:< 'HTTP/1.1 407 Proxy authorization required\r\n'
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 662, in urlopen
self._prepare_proxy(conn)
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 948, in _prepare_proxy
conn.connect()
File "/usr/local/lib/python3.6/site-packages/urllib3/connection.py", line 308, in connect
self._tunnel()
File "/usr/local/lib/python3.6/site-packages/requests_ntlm2/connection.py", line 172, in _tunnel
"Tunnel connection failed: %d %s" % (code, message.strip())
OSError: Tunnel connection failed: 407 Proxy authorization required
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/local/lib/python3.6/site-packages/urllib3/connectionpool.py", line 720, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "/usr/local/lib/python3.6/site-packages/urllib3/util/retry.py", line 436, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='site.url', port=443): Max retries exceeded with url: /3d235031-9605-4710-b891-95e099057008 (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407 Proxy authorization required',)))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "2.py", line 38, in <module>
session.post("https://webhook.site/3d235031-9605-4710-b891-95e099057008")
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 578, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.6/site-packages/requests/adapters.py", line 510, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='site.url', port=443): Max retries exceeded with url: /3d235031-9605-4710-b891-95e099057008 (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 407 Proxy authorization required',)))
could you please suggest me on what this error can depends ?
ntlm-auth has been deprecated in favour of using pyspnego (same author, newer library), which has actually had updates in the last month (as opposed to the last commit being 3 years ago in ntlm-auth). I'd rather not start a new project that uses a deprecated library for security in an enterprise context. Any chance this library will be updated to use it?
Getting this issue when trying to do a Windows authentication on the windows machine which has openssl in the custom miniconda environment(not in base miniconda environement )
"DLL load failed while importing _openssl: The specific module could not be found"
is there a way to bundle pyopenssl alongwith requests-ntlm2 ?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.