Git Product home page Git Product logo

Comments (29)

snj07 avatar snj07 commented on September 24, 2024

Try following solutions:

  1. Check if EC2 instance is configured with proper hostname in /etc/hosts file
  2. Try to run script again by updating build.sh as following:
    export HOSTNAME=PUBLIC_IP_OF_AWS_EC2
    If you still face issues then please share docker container logs.

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

I tried both options.
Still I am facing same issue.
Should I share logs of all container or any specific one?

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@arjunsreepad There can be multiple reasons for this failure. One of which is system not fast enough to start the services in specified timeout. There can be various reasons for slow start like low specs for system or slow network (as docker images are pulled for first time).

One thing you can try in that case is, bump up the value of "retries_allowed" in "health_check" file to higher value and retry.
https://github.com/Infosys/openIDP/blob/master/health_check.sh

Also share the logs of following commands with us:

docker service ls

docker service logs -f IDP_config

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

root@ip-172-31-4-33:~/idap/openIDP# docker service ls ID NAME MODE REPLICAS IMAGE PORTS mlri5vhjzjfp IDP_app replicated 1/1 idp/idpapp:latest *:8080->8080/tcp 02c9pesoo0hh IDP_config replicated 1/1 idp/idpconfig:latest *:8888->8888/tcp fcm7okshq8i6 IDP_dashboard replicated 1/1 idp/idpdashboard:latest *:8184->8184/tcp vinefwvkzouu IDP_eureka replicated 1/1 idp/idpeureka:latest *:8761->8761/tcp xx1oos4oywpu IDP_grafana replicated 1/1 grafana/grafana:5.2.1 *:3000->3000/tcp oz0k7valno7r IDP_jenkins replicated 1/1 idp/jenkins:latest *:8085->8080/tcp, *:50000->50000/tcp e31tcp2pxql6 IDP_kafka replicated 1/1 wurstmeister/kafka:0.11.0.1 w5yfoidkggch IDP_keycloak replicated 1/1 jboss/keycloak:4.0.0.Beta1 *:8989->8080/tcp zi8gfruuknao IDP_oauth replicated 1/1 idp/idpoauth:latest *:8181->8181/tcp 7fiwhce1ap58 IDP_postgres replicated 1/1 postgres:9.6.1 *:5432->5432/tcp p13ljrk16oj1 IDP_scheduler replicated 1/1 idp/idpscheduler:latest *:8222->8222/tcp ocra00azkwsd IDP_services replicated 1/1 idp/idpservices:latest *:8889->8889/tcp mlsbeq31bh5b IDP_subscription replicated 1/1 idp/idpsubscription:latest *:8090->8090/tcp a5z7byjoigpp IDP_zookeeper replicated 1/1 zookeeper:3.5 *:2181->2181/tcp

`
let 'dispatcherServlet': initialization completed in 85 ms
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.607 INFO 10 --- [nio-8888-exec-5] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@79225e77: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.619 INFO 10 --- [nio-8888-exec-7] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@54c58b72: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.626 INFO 10 --- [nio-8888-exec-2] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@162a7e93: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.667 INFO 10 --- [nio-8888-exec-6] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5194cce1: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.726 INFO 10 --- [nio-8888-exec-9] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6f93f2b8: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.791 INFO 10 --- [nio-8888-exec-5] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/subscription/subscription-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.791 INFO 10 --- [nio-8888-exec-6] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpschedule/idpschedule-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.791 INFO 10 --- [nio-8888-exec-7] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpdashboard/idpdashboard-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.792 INFO 10 --- [nio-8888-exec-7] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@54c58b72: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.792 INFO 10 --- [nio-8888-exec-6] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@5194cce1: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.792 INFO 10 --- [nio-8888-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpoauth/idpoauth-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.792 INFO 10 --- [nio-8888-exec-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@162a7e93: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.803 INFO 10 --- [nio-8888-exec-5] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@79225e77: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.825 INFO 10 --- [nio-8888-exec-9] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpui/idpui-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:26.825 INFO 10 --- [nio-8888-exec-9] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6f93f2b8: startup date [Mon Nov 12 14:27:26 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:27.700 INFO 10 --- [nio-8888-exec-8] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7bccd369: startup date [Mon Nov 12 14:27:27 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:27.728 INFO 10 --- [nio-8888-exec-8] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idprest/idprest-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:27.728 INFO 10 --- [nio-8888-exec-8] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@7bccd369: startup date [Mon Nov 12 14:27:27 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:33.871 INFO 10 --- [nio-8888-exec-6] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@44dee4d5: startup date [Mon Nov 12 14:27:33 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:33.955 INFO 10 --- [nio-8888-exec-6] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpui/idpui-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:33.955 INFO 10 --- [nio-8888-exec-6] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@44dee4d5: startup date [Mon Nov 12 14:27:33 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:46.897 INFO 10 --- [nio-8888-exec-2] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@4da02d91: startup date [Mon Nov 12 14:27:46 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.032 INFO 10 --- [nio-8888-exec-2] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpdashboard/idpdashboard-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.032 INFO 10 --- [nio-8888-exec-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@4da02d91: startup date [Mon Nov 12 14:27:46 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.341 INFO 10 --- [nio-8888-exec-1] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@7ab5478d: startup date [Mon Nov 12 14:27:47 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.433 INFO 10 --- [nio-8888-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idprest/idprest-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.440 INFO 10 --- [nio-8888-exec-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@7ab5478d: startup date [Mon Nov 12 14:27:47 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.884 INFO 10 --- [nio-8888-exec-5] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@63ab921a: startup date [Mon Nov 12 14:27:47 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.937 INFO 10 --- [nio-8888-exec-5] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/idpschedule/idpschedule-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:47.940 INFO 10 --- [nio-8888-exec-5] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@63ab921a: startup date [Mon Nov 12 14:27:47 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:48.612 INFO 10 --- [nio-8888-exec-4] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@738d49fc: startup date [Mon Nov 12 14:27:48 IST 2018]; root of context hierarchy
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:48.680 INFO 10 --- [nio-8888-exec-4] o.s.c.c.s.e.NativeEnvironmentRepository : Adding property source: classpath:/config/subscription/subscription-paas.properties
IDP_config.1.u8zmq247pjgq@ip-172-31-4-33 | 2018-11-12 14:27:48.681 INFO 10 --- [nio-8888-exec-4] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@738d49fc: startup date [Mon Nov 12 14:27:48 IST 2018]; root of context hierarchy

`

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@arjunsreepad Thats great, as per logs all your services are up and config is also running. You can go ahead and try access IDP at :

http://:8080/idpapp

Health check would have failed only due to slow startup.
If you still want to run only health check, following are steps:

in "build.sh" set
REMOVE_OLDER=false
SKIP_BUILD=true
SKIP_TOOLS_CONFIG=true

this will skip all stages except deployment and health check.

Share your finding for above suggestions.

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

I went ahead with launching. But getting unauthorised error
I have used idpadmin & idpadmin@123

image

from openidp.

snj07 avatar snj07 commented on September 24, 2024

I went ahead with launching. But getting unauthorised error
I have used idpadmin & idpadmin@123

image

Can you share IDP oauth container logs ? You can use docker logs idp_oauth_container_id command

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

Error: No such container: idp_oauth_container_id

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

build.sh.txt

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

root@ip-172-31-4-33:~/idap/openIDP# hostname
3.16.103.133

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@arjunsreepad So services have started. Seems like its a handshake issue with auth.
Can you share logs from following command ?

docker logs $(docker ps | grep oauth | awk '{ print $1 }')

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

root@ip-172-31-4-33:~/idap/openIDP# docker logs $(docker ps | grep oauth | awk '{ print $1 }')
Waiting for Config Server to start. Sleeping for 5 sec .....
Waiting for Config Server to start. Sleeping for 5 sec .....
Waiting for Config Server to start. Sleeping for 5 sec .....
Waiting for Config Server to start. Sleeping for 5 sec .....
{"name":"idpoauth","profiles":["paas"],"label":null,"version":null,"state":null,"propertySources":[{"name":"classpath:/config/idpoauth/idpoauth-paas.properties","source":{"driverClassName":"org.postgresql.Driver","appversion":"1.3","postgresqlschemaname":"idpoauth","refreshTokenValidity":"2592000","ldapurl":"ldap://your.domain.com:389","authProvider":"keycloak","server.contextPath":"/idp-oauth","spring.jmx.default-domain":"idp-oauth","batchSize":"5","clientid":"idpclient","accessTokenValidity":"3600","postgresqlinitialsize":"5","logging.level.root":"info","keyCloakRealm":"master","skipAuthentication":"N","release.version":"3.0","eureka.client.enabled":"false","appsecret":"secret"}}]}Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

Keycloak server is causing trouble in your case .
Lets look at logs from

docker logs -f $(docker ps | grep keycloak | awk '{ print $1 }')

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

keycloak.txt

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@arjunsreepad Any chance you AWS machine is not having port 8989 forwarded ?

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

how to check this one

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

image

from openidp.

arjunsreepad avatar arjunsreepad commented on September 24, 2024

this is my aws setting

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

okay got your issue. In your build.sh you have defined hostname as "public_ip_of_aws_ec2" replace that with actual public IP address of your machine and re-run "build.sh"

from openidp.

rikameajay1 avatar rikameajay1 commented on September 24, 2024

Still having username or password incorrect issue. Running this service on local ubuntu machine. docker logs idp_oauth_container_id result is same as @arjunsreepad.
PS. using 8 gb machine.

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@rikameajay1 Please read full thread first. Correct command for logs is mentioned in #12 (comment)

from openidp.

rikameajay1 avatar rikameajay1 commented on September 24, 2024

yes @jaskirat8 I used the correct command. Got this in the output -
Waiting for Config Server to start. Sleeping for 5 sec .....
Waiting for Config Server to start. Sleeping for 5 sec .....
Waiting for Config Server to start. Sleeping for 5 sec .....
Waiting for Config Server to start. Sleeping for 5 sec .....
{"name":"idpoauth","profiles":["paas"],"label":null,"version":null,"state":null,"propertySources":[{"name":"classpath:/config/idpoauth/idpoauth-paas.properties","source":{"driverClassName":"org.postgresql.Driver","appversion":"1.3","postgresqlschemaname":"idpoauth","refreshTokenValidity":"2592000","ldapurl":"ldap://your.domain.com:389","authProvider":"keycloak","server.contextPath":"/idp-oauth","spring.jmx.default-domain":"idp-oauth","batchSize":"5","clientid":"idpclient","accessTokenValidity":"3600","postgresqlinitialsize":"5","logging.level.root":"info","keyCloakRealm":"master","skipAuthentication":"N","release.version":"3.0","eureka.client.enabled":"false","appsecret":"secret"}}]}Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....
Waiting for Keycloak Server to start. Sleeping for 5 sec .....

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@rikameajay1 can you share output for following commands

docker service inspect IDP_oauth

docker logs -f $(docker ps | grep keycloak | awk '{ print $1 }')

from openidp.

rikameajay1 avatar rikameajay1 commented on September 24, 2024

docker service inspect IDP_oauth:
docker_service_inspect_IDP_oauth.txt

docker logs -f $(docker ps | grep keycloak | awk '{ print $1 }'):
no container with keycloak word in it

from openidp.

rikameajay1 avatar rikameajay1 commented on September 24, 2024

@jaskirat8
Performing Health Checks ..........
Checking Config Server: Passed
Checking Eurkea Server: Passed
Checking Keycloak Server: Failed

from openidp.

jaskirat8 avatar jaskirat8 commented on September 24, 2024

@rikameajay1 Due to some reason your keycloak server container not able to start.
Share logs with us from following commands

docker service ps IDP_keycloak --no-trunc

docker service logs IDP_keycloak

from openidp.

rikameajay1 avatar rikameajay1 commented on September 24, 2024

@jaskirat8 docker service logs IDP_keycloak returns nothing.
docker_service_ps_IDP_keycloak.txt

from openidp.

ahteshama avatar ahteshama commented on September 24, 2024

@rikameajay1 make sure your hostname is properly configured. I configured it inside build.sh "export HOSTNAME=1.2.3.4".. Also make sure "hostname" command returns your host IP..After that rerun build.sh...If oauth failed or cloak failed rerun it again. I ran it twice and everything passed in second time.

from openidp.

manishbansal8843 avatar manishbansal8843 commented on September 24, 2024

@rikameajay1 I was also facing this issue on 8gb ram. I resized my machine to 16 gb and it started to work fine. This app needs minimum of 11 gb of ram. Below is the snapshot of free command on my 16 gb machine.

              total        used        free      shared  buff/cache   available
Mem:       16426480    11792300     2907284       30032     1726896     4196476
Swap:             0           0           0

from openidp.

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.