Coder Social home page Coder Social logo

Comments (14)

hasinidilanka avatar hasinidilanka commented on August 22, 2024

@rohe Untill this issue is fixed, can you please tell me the condition that is failing, so that we can fix it.

from oidctest.

rohe avatar rohe commented on August 22, 2024

I can see what's gone wrong, don't know why yet.

from oidctest.

hasinidilanka avatar hasinidilanka commented on August 22, 2024

@rohe It is critical to know the exact root cause for this issue since I tried comparing the response with an already certified OP's response but there is no difference as well. And also I could not find any OIDC specification violation.

from oidctest.

rohe avatar rohe commented on August 22, 2024

from oidctest.

zandbelt avatar zandbelt commented on August 22, 2024

Roland has added more debugging logs to get to the bottom of this issue. We'll have to release a new version. deploy it, and reproduce the issue before we can use the new detailed info. That is expected to happen within the next 2 weeks (it is also dependent on a number other things i.e. a new pyoidc release). In the mean time we'll take another look at this.

from oidctest.

hasinidilanka avatar hasinidilanka commented on August 22, 2024

Hi,
Are there any updates on this issue?

from oidctest.

zandbelt avatar zandbelt commented on August 22, 2024

I'm sorry but the new release hasn't happened yet due to some dependencies not yet available. I expect we can move forward this week.

from oidctest.

zandbelt avatar zandbelt commented on August 22, 2024

@rohe: this issue was now reproduced on new-op with the latest codebase that should provide more debug logging info. Can you please review the log below and comment?

2017-09-22 06:15:30,830 otest.aus.tool:INFO <=<=<=<=< OP-scope-All >=>=>=>=>
2017-09-22 06:15:30,830 otest.aus.tool:INFO <--<-- 0 --- Webfinger -->-->
2017-09-22 06:15:30,830 otest.aus.tool:INFO <--<-- 1 --- Discovery -->-->
2017-09-22 06:15:30,831 otest.aus.tool:INFO <--<-- 2 --- Registration -->-->
2017-09-22 06:15:30,831 otest.aus.tool:INFO <--<-- 3 --- AsyncAuthn -->-->
2017-09-22 06:15:30,833 cherrypy.access.140091972167888:INFO 203.94.95.6 - - [22/Sep/2017:06:15:30] "GET /OP-scope-All HTTP/1.1" 303 628 "https://new-op.certification.openid.net:60001/authz_post" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
2017-09-22 06:15:33,113 cherrypy.access.140091972167888:INFO 203.94.95.6 - - [22/Sep/2017:06:15:33] "GET /authz_cb HTTP/1.1" 200 546 "https://oidc.testdomain.wso2.org:9443/authenticationendpoint/oauth2_consent.do?loggedInUser=hasini%40gmail.com&application=oidc_test&scope=address+phone+openid+profile+email&sessionDataKeyConsent=5b818c43-5529-4ffb-b9cb-720c6e38e11e&spQueryParams=redirect_uri%3Dhttps%253A%252F%252Fnew-op.certification.openid.net%253A60001%252Fauthz_cb%26state%3DHwq4rQYnVVrkYlen%26scope%3Dopenid%2Bprofile%2Bemail%2Baddress%2Bphone%26response_type%3Did_token%26client_id%3D8CIMDtidOUCxVgxhQoHSUOEzOV4a%26nonce%3DAgiNt8RPCKwfw0md" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
2017-09-22 06:15:33,383 otest.aus.tool:INFO <--<-- 3 --- <class 'oidctest.op.oper.AsyncAuthn'>
2017-09-22 06:15:33,383 otest.aus.request:INFO Response: id_token=eyJ4NXQiOiJOVEF4Wm1NeE5ETXlaRGczTVRVMVpHTTBNekV6T0RKaFpXSTRORE5sWkRVMU9HRmtOakZpTVEiLCJraWQiOiJOVEF4Wm1NeE5ETXlaRGczTVRVMVpHTTBNekV6T0RKaFpXSTRORE5sWkRVMU9HRmtOakZpTVEiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJoYXNpbmlAZ21haWwuY29tIiwiem9uZWluZm8iOiIyMDE3IiwiYmlydGhkYXRlIjoiMTk5My0xMC0xNSIsImlzcyI6Imh0dHBzOlwvXC9vaWRjLnRlc3Rkb21haW4ud3NvMi5vcmc6OTQ0M1wvb2F1dGgyXC90b2tlbiIsInByZWZlcnJlZF91c2VybmFtZSI6Ikhhc2luaSIsImxvY2FsZSI6ImVuIiwidXBkYXRlZF9hdCI6MjAxNywiYXpwIjoiOENJTUR0aWRPVUN4Vmd4aFFvSFNVT0V6T1Y0YSIsImF1dGhfdGltZSI6MTUwNjA3NTMzMSwibmlja25hbWUiOiJoYXNpIiwiZXhwIjoxNTA2MDc4OTMyLCJpYXQiOjE1MDYwNzUzMzIsImVtYWlsIjoiaGFzaW5pQGdtYWlsLmNvbSIsIndlYnNpdGUiOiJUaXRsZV8xMjM0IiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImFkZHJlc3MiOnt9LCJwcm9maWxlIjoiaHR0cHM6XC9cL21lZGl1bS5jb21cL0BoYXNpbml3aXRoYXJhIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiZ2l2ZW5fbmFtZSI6Ikhhc2luaSIsIm1pZGRsZV9uYW1lIjoiRGlsYW5rYSIsIm5vbmNlIjoiQWdpTnQ4UlBDS3dmdzBtZCIsInBpY3R1cmUiOiJodHRwczpcL1wvbWVkaXVtLmNvbVwvQGhhc2luaXdpdGhhcmEiLCJhdWQiOlsiOENJTUR0aWRPVUN4Vmd4aFFvSFNVT0V6T1Y0YSJdLCJuYW1lIjoiSGFzaW5pIERpbGFua2EgV2l0aGFyYW5hYWFhYWFhIiwicGhvbmVfbnVtYmVyIjoiMDcxMTExMTExMSIsImZhbWlseV9uYW1lIjoiV2l0aGFyYW5hIn0.A5v4WArPpYuuEF1NLtHDa35ny1t7lZWqMC74v0kdhOcBgZjeyCS6GjIg1qgA7cfrYZbbL37JsIddFk_3iH4kskKRBwu8T_QrRN0fdZSPrgxEfUQkQViwq4iTeO-AiRMIhP7H3VkRYqnS_krdSndKMQe8pkQUcXV-7g1xuY0Tp0qoKvQACad69OYONHfx7otPvYVhjgspRbKOmTBNDI8IfCJRV08Co4G8C2kepU3DgL6bixz3yQgTueLXMavd8JGoU1NESAmCUpawSgF6UmbHZ-nCrkRVAb-4_YV4VJhQmwx97JcZyxo08kaGHQ_IJSSsqTP7xYudPlVcyD67uF9R6w&state=Hwq4rQYnVVrkYlen&session_state=06b01d4e4b71e0e2fa2f9acd17fecc1ef92edd410de2b4cfcb95a439c6b477bc.wHzVDkuJU89WxujEq4VmyQ
2017-09-22 06:15:33,384 oic.oauth2:DEBUG Initial response parsing => "{'session_state': '06b01d4e4b71e0e2fa2f9acd17fecc1ef92edd410de2b4cfcb95a439c6b477bc.wHzVDkuJU89WxujEq4VmyQ', 'state': 'Hwq4rQYnVVrkYlen', 'id_token': 'eyJ4NXQiOiJOVEF4Wm1NeE5ETXlaRGczTVRVMVpHTTBNekV6T0RKaFpXSTRORE5sWkRVMU9HRmtOakZpTVEiLCJraWQiOiJOVEF4Wm1NeE5ETXlaRGczTVRVMVpHTTBNekV6T0RKaFpXSTRORE5sWkRVMU9HRmtOakZpTVEiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJoYXNpbmlAZ21haWwuY29tIiwiem9uZWluZm8iOiIyMDE3IiwiYmlydGhkYXRlIjoiMTk5My0xMC0xNSIsImlzcyI6Imh0dHBzOlwvXC9vaWRjLnRlc3Rkb21haW4ud3NvMi5vcmc6OTQ0M1wvb2F1dGgyXC90b2tlbiIsInByZWZlcnJlZF91c2VybmFtZSI6Ikhhc2luaSIsImxvY2FsZSI6ImVuIiwidXBkYXRlZF9hdCI6MjAxNywiYXpwIjoiOENJTUR0aWRPVUN4Vmd4aFFvSFNVT0V6T1Y0YSIsImF1dGhfdGltZSI6MTUwNjA3NTMzMSwibmlja25hbWUiOiJoYXNpIiwiZXhwIjoxNTA2MDc4OTMyLCJpYXQiOjE1MDYwNzUzMzIsImVtYWlsIjoiaGFzaW5pQGdtYWlsLmNvbSIsIndlYnNpdGUiOiJUaXRsZV8xMjM0IiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImFkZHJlc3MiOnt9LCJwcm9maWxlIjoiaHR0cHM6XC9cL21lZGl1bS5jb21cL0BoYXNpbml3aXRoYXJhIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiZ2l2ZW5fbmFtZSI6Ikhhc2luaSIsIm1pZGRsZV9uYW1lIjoiRGlsYW5rYSIsIm5vbmNlIjoiQWdpTnQ4UlBDS3dmdzBtZCIsInBpY3R1cmUiOiJodHRwczpcL1wvbWVkaXVtLmNvbVwvQGhhc2luaXdpdGhhcmEiLCJhdWQiOlsiOENJTUR0aWRPVUN4Vmd4aFFvSFNVT0V6T1Y0YSJdLCJuYW1lIjoiSGFzaW5pIERpbGFua2EgV2l0aGFyYW5hYWFhYWFhIiwicGhvbmVfbnVtYmVyIjoiMDcxMTExMTExMSIsImZhbWlseV9uYW1lIjoiV2l0aGFyYW5hIn0.A5v4WArPpYuuEF1NLtHDa35ny1t7lZWqMC74v0kdhOcBgZjeyCS6GjIg1qgA7cfrYZbbL37JsIddFk_3iH4kskKRBwu8T_QrRN0fdZSPrgxEfUQkQViwq4iTeO-AiRMIhP7H3VkRYqnS_krdSndKMQe8pkQUcXV-7g1xuY0Tp0qoKvQACad69OYONHfx7otPvYVhjgspRbKOmTBNDI8IfCJRV08Co4G8C2kepU3DgL6bixz3yQgTueLXMavd8JGoU1NESAmCUpawSgF6UmbHZ-nCrkRVAb-4_YV4VJhQmwx97JcZyxo08kaGHQ_IJSSsqTP7xYudPlVcyD67uF9R6w'}"
2017-09-22 06:15:33,384 oic.oauth2:DEBUG Verify response with {'keyjar': <KeyJar(issuers=['', 'https://oidc.testdomain.wso2.org:9443/oauth2/token'])>, 'client_id': '8CIMDtidOUCxVgxhQoHSUOEzOV4a', 'iss': 'https://oidc.testdomain.wso2.org:9443/oauth2/token'}
2017-09-22 06:15:33,385 oic.oauth2.message:DEBUG Raw JSON: {'exp': 1506078932, 'given_name': 'Hasini', 'auth_time': 1506075331, 'nickname': 'hasi', 'preferred_username': 'Hasini', 'name': 'Hasini Dilanka Witharanaaaaaaa', 'iat': 1506075332, 'phone_number_verified': False, 'locale': 'en', 'email': '[email protected]', 'middle_name': 'Dilanka', 'birthdate': '1993-10-15', 'nonce': 'AgiNt8RPCKwfw0md', 'website': 'Title_1234', 'aud': ['8CIMDtidOUCxVgxhQoHSUOEzOV4a'], 'picture': 'https://medium.com/@hasiniwithara', 'address': {}, 'azp': '8CIMDtidOUCxVgxhQoHSUOEzOV4a', 'profile': 'https://medium.com/@hasiniwithara', 'zoneinfo': '2017', 'family_name': 'Witharana', 'email_verified': True, 'phone_number': '0711111111', 'updated_at': 2017, 'iss': 'https://oidc.testdomain.wso2.org:9443/oauth2/token', 'sub': '[email protected]'}
2017-09-22 06:15:33,385 oic.oauth2.message:DEBUG JWS header: {'x5t': 'NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ', 'kid': 'NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ', 'alg': 'RS256'}
2017-09-22 06:15:33,385 root:DEBUG KeyBundle fetch keys from: https://oidc.testdomain.wso2.org:9443/oauth2/jwks
2017-09-22 06:15:33,387 requests.packages.urllib3.connectionpool:INFO Starting new HTTPS connection (1): oidc.testdomain.wso2.org
2017-09-22 06:15:34,426 requests.packages.urllib3.connectionpool:DEBUG "GET /oauth2/jwks HTTP/1.1" 200 474
2017-09-22 06:15:34,427 oic.utils.keyio:DEBUG Loaded JWKS: {"keys":[{"kty":"RSA","e":"AQAB","use":"sig","kid":"NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ","alg":"RS256","n":"AJbmRXVtcp4rc7ZFiwusSnoG0VsZMvuT9KeEoWBDpB7N9ECNlQrkekKOAc-a04Cwa5MtN1tRgFa2cbrykRo_Vffj5o3RrWruAk17vaSy3Kp67mnM6EnbwWAN5UvWu84BVNPrOpDJdhIQfq5O4F5bhHqe5SDnp835dn-iKEymtn1YFXd2CokhrMi-Lc7Uu9L5pl9dtaptLEyXSlj-B8V8qivZ3qJVyPX2MhzmCC1TWevc_-9zjlYZIf5r05lmSzOxjOrAKZsi1-jl1KfM9KZGPr0__fs0ccULOxrqwuPwtZyt6yP9MklIBhGnztWrTY2JpRTfjN7WV-pxHAOoPeCGr8k"}]} from https://oidc.testdomain.wso2.org:9443/oauth2/jwks
2017-09-22 06:15:34,427 oic.utils.keyio:DEBUG Loaded JWKS: {"keys":[{"kty":"RSA","e":"AQAB","use":"sig","kid":"NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ","alg":"RS256","n":"AJbmRXVtcp4rc7ZFiwusSnoG0VsZMvuT9KeEoWBDpB7N9ECNlQrkekKOAc-a04Cwa5MtN1tRgFa2cbrykRo_Vffj5o3RrWruAk17vaSy3Kp67mnM6EnbwWAN5UvWu84BVNPrOpDJdhIQfq5O4F5bhHqe5SDnp835dn-iKEymtn1YFXd2CokhrMi-Lc7Uu9L5pl9dtaptLEyXSlj-B8V8qivZ3qJVyPX2MhzmCC1TWevc_-9zjlYZIf5r05lmSzOxjOrAKZsi1-jl1KfM9KZGPr0__fs0ccULOxrqwuPwtZyt6yP9MklIBhGnztWrTY2JpRTfjN7WV-pxHAOoPeCGr8k"}]} from https://oidc.testdomain.wso2.org:9443/oauth2/jwks
2017-09-22 06:15:34,428 oic.oauth2.message:DEBUG Found signing key.
2017-09-22 06:15:34,429 jwkest.jws:DEBUG Picking key by key type=RSA
2017-09-22 06:15:34,429 jwkest.jws:DEBUG Picking key based on alg=RS256, kid=NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ and use=
2017-09-22 06:15:34,429 jwkest.jws:DEBUG Picked: kid:xkiz7RR0HPv8XVi9uN7qY9Va1rTz7EMPiC_6Dfon_44, use:sig, kty:RSA
2017-09-22 06:15:34,429 jwkest.jws:DEBUG Picked: kid:NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ, use:sig, kty:RSA
2017-09-22 06:15:34,431 jwkest.jws:DEBUG Verified message using key with kid=NTAxZmMxNDMyZDg3MTU1ZGM0MzEzODJhZWI4NDNlZDU1OGFkNjFiMQ
2017-09-22 06:15:34,435 otest.aus.request:INFO Parsed response: {'session_state': '06b01d4e4b71e0e2fa2f9acd17fecc1ef92edd410de2b4cfcb95a439c6b477bc.wHzVDkuJU89WxujEq4VmyQ', 'state': 'Hwq4rQYnVVrkYlen', 'id_token': {'exp': 1506078932, 'updated_at': 2017, 'auth_time': 1506075331, 'nickname': 'hasi', 'preferred_username': 'Hasini', 'name': 'Hasini Dilanka Witharanaaaaaaa', 'iat': 1506075332, 'phone_number_verified': False, 'locale': 'en', 'email': '[email protected]', 'middle_name': 'Dilanka', 'birthdate': '1993-10-15', 'nonce': 'AgiNt8RPCKwfw0md', 'website': 'Title_1234', 'aud': ['8CIMDtidOUCxVgxhQoHSUOEzOV4a'], 'picture': 'https://medium.com/@hasiniwithara', 'address': {}, 'sub': '[email protected]', 'azp': '8CIMDtidOUCxVgxhQoHSUOEzOV4a', 'profile': 'https://medium.com/@hasiniwithara', 'zoneinfo': '2017', 'family_name': 'Witharana', 'email_verified': True, 'phone_number': '0711111111', 'given_name': 'Hasini', 'iss': 'https://oidc.testdomain.wso2.org:9443/oauth2/token'}}
2017-09-22 06:15:34,435 otest.aus.tool:INFO <=<=<=<=< OP-scope-All >=>=>=>=>
2017-09-22 06:15:34,435 otest.aus.tool:INFO <--<-- 4 --- AccessToken -->-->
2017-09-22 06:15:34,436 otest.aus.tool:INFO <--<-- 5 --- UserInfo -->-->
2017-09-22 06:15:34,436 otest.aus.tool:INFO <--<-- 6 --- Done -->-->
2017-09-22 06:15:34,436 otest.verify:DEBUG do_check(check-http-response, {})
2017-09-22 06:15:34,438 otest.aus.check:WARNING No HTTP Response ??
2017-09-22 06:15:34,438 otest.verify:ERROR [do_check] ExcList: Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 34, in _last_response
    return conv.events.last_item(typ)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/events.py", line 230, in last_item
    raise NoSuchEvent(typ)
otest.events.NoSuchEvent: http response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/verify.py", line 70, in do_check
    stat = chk(self.conv)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/check.py", line 121, in __call__
    _stat = self._func(conv)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 102, in _func
    _response = last_http_response(conv)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 42, in last_http_response
    return _last_response(conv, EV_HTTP_RESPONSE, 'No HTTP Response ??')
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 37, in _last_response
    logger.warning('\n'.join(conv.events.digest()))
TypeError: can only join an iterable

2017-09-22 06:15:34,438 otest.verify:ERROR [do_check] Exception: can only join an iterable
2017-09-22 06:15:34,439 otest.handling:ERROR [authz_cb] ExcList: Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 34, in _last_response
    return conv.events.last_item(typ)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/events.py", line 230, in last_item
    raise NoSuchEvent(typ)
otest.events.NoSuchEvent: http response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/oidctest-0.7.0-py3.5.egg/oidctest/optt/__init__.py", line 195, in authz_post
    response=kwargs)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/tool.py", line 230, in async_response
    return self.run_flow(self.sh["testid"], index=index)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/tool.py", line 112, in run_flow
    _ver.test_sequence(self.conv.flow["assert"])
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/verify.py", line 96, in test_sequence
    self.do_check(test)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/verify.py", line 70, in do_check
    stat = chk(self.conv)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/check.py", line 121, in __call__
    _stat = self._func(conv)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 102, in _func
    _response = last_http_response(conv)
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 42, in last_http_response
    return _last_response(conv, EV_HTTP_RESPONSE, 'No HTTP Response ??')
  File "/usr/local/lib/python3.5/dist-packages/otest-0.7.0-py3.5.egg/otest/aus/check.py", line 37, in _last_response
    logger.warning('\n'.join(conv.events.digest()))
TypeError: can only join an iterable

2017-09-22 06:15:34,439 otest.handling:ERROR [authz_cb] Exception: can only join an iterable
2017-09-22 06:15:34,442 cherrypy.access.140091972167888:INFO 203.94.95.6 - - [22/Sep/2017:06:15:34] "POST /authz_post HTTP/1.1" 200 14326 "https://new-op.certification.openid.net:60001/authz_cb" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"

from oidctest.

hasinidilanka avatar hasinidilanka commented on August 22, 2024

@rohe Can you please give any feedback for this issue?

from oidctest.

rohe avatar rohe commented on August 22, 2024

from oidctest.

rohe avatar rohe commented on August 22, 2024

from oidctest.

zandbelt avatar zandbelt commented on August 22, 2024

The latest code from rohe/otest is rolled out on new-op now; @hasinidilanka can you re-run the test on new-op please?

from oidctest.

hasinidilanka avatar hasinidilanka commented on August 22, 2024

from oidctest.

zandbelt avatar zandbelt commented on August 22, 2024

this is now deployed on the production OP as part of OP release 2.0.7

from oidctest.

Related Issues (20)

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.