public void example4(Vertx vertx) {

    // Set the client credentials and the OAuth2 server
    JsonObject credentials =
        new JsonObject()
            .put("clientID", "<client-id>")
            .put("clientSecret", "<client-secret>")
            .put("site", "https://api.oauth.com");

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.CLIENT, credentials);

    JsonObject tokenConfig = new JsonObject();

    // Callbacks
    // Save the access token
    oauth2.getToken(
        tokenConfig,
        res -> {
          if (res.failed()) {
            System.err.println("Access Token Error: " + res.cause().getMessage());
          } else {
            // Get the access token object (the authorization code is given from the previous step).
            AccessToken token = res.result();
          }
        });
  }
  public void example3(Vertx vertx) {

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.PASSWORD);

    JsonObject tokenConfig =
        new JsonObject().put("username", "username").put("password", "password");

    // Callbacks
    // Save the access token
    oauth2.getToken(
        tokenConfig,
        res -> {
          if (res.failed()) {
            System.err.println("Access Token Error: " + res.cause().getMessage());
          } else {
            // Get the access token object (the authorization code is given from the previous step).
            AccessToken token = res.result();

            oauth2.api(
                HttpMethod.GET,
                "/users",
                new JsonObject().put("access_token", token.principal().getString("access_token")),
                res2 -> {
                  // the user object should be returned here...
                });
          }
        });
  }
  public void example1(Vertx vertx) {

    OAuth2Auth oauth2 =
        OAuth2Auth.create(
            vertx,
            OAuth2FlowType.AUTH_CODE,
            new JsonObject()
                .put("clientID", "YOUR_CLIENT_ID")
                .put("clientSecret", "YOUR_CLIENT_SECRET")
                .put("site", "https://github.com/login")
                .put("tokenPath", "/oauth/access_token")
                .put("authorizationPath", "/oauth/authorize"));

    // when there is a need to access a protected resource or call a protected method,
    // call the authZ url for a challenge

    String authorization_uri =
        oauth2.authorizeURL(
            new JsonObject()
                .put("redirect_uri", "http://localhost:8080/callback")
                .put("scope", "notifications")
                .put("state", "3(#0/!~"));

    // when working with web application use the above string as a redirect url

    // in this case GitHub will call you back in the callback uri one should now complete the
    // handshake as:

    String code =
        "xxxxxxxxxxxxxxxxxxxxxxxx"; // the code is provided as a url parameter by github callback
                                    // call

    oauth2.getToken(
        new JsonObject().put("code", code).put("redirect_uri", "http://localhost:8080/callback"),
        res -> {
          if (res.failed()) {
            // error, the code provided is not valid
          } else {
            // save the token and continue...
          }
        });
  }
  public void example2(Vertx vertx, HttpServerResponse response) {

    // Set the client credentials and the OAuth2 server
    JsonObject credentials =
        new JsonObject()
            .put("clientID", "<client-id>")
            .put("clientSecret", "<client-secret>")
            .put("site", "https://api.oauth.com");

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.AUTH_CODE, credentials);

    // Authorization oauth2 URI
    String authorization_uri =
        oauth2.authorizeURL(
            new JsonObject()
                .put("redirect_uri", "http://localhost:8080/callback")
                .put("scope", "<scope>")
                .put("state", "<state>"));

    // Redirect example using Vert.x
    response.putHeader("Location", authorization_uri).setStatusCode(302).end();

    JsonObject tokenConfig =
        new JsonObject()
            .put("code", "<code>")
            .put("redirect_uri", "http://localhost:3000/callback");

    // Callbacks
    // Save the access token
    oauth2.getToken(
        tokenConfig,
        res -> {
          if (res.failed()) {
            System.err.println("Access Token Error: " + res.cause().getMessage());
          } else {
            // Get the access token object (the authorization code is given from the previous step).
            AccessToken token = res.result();
          }
        });
  }
  public void example12(Vertx vertx, String realm) {
    // Set the client credentials and the OAuth2 server
    JsonObject credentials =
        new JsonObject()
            .put("clientID", "CLIENT_ID")
            .put("clientSecret", "CLIENT_SECRET")
            .put("site", "https://www.your-keycloak-server.com")
            .put("authorizationPath", "/realms/" + realm + "/protocol/openid-connect/auth")
            .put("tokenPath", "/realms/" + realm + "/protocol/openid-connect/token");

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.CLIENT, credentials);
  }
  public void example11(Vertx vertx) {
    // Set the client credentials and the OAuth2 server
    JsonObject credentials =
        new JsonObject()
            .put("clientID", "CLIENT_ID")
            .put("clientSecret", "CLIENT_SECRET")
            .put("site", "https://www.facebook.com")
            .put("authorizationPath", "/dialog/oauth")
            .put("tokenPath", "https://graph.facebook.com/oauth/access_token");

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.CLIENT, credentials);
  }
  public void example9(Vertx vertx) {
    // Set the client credentials and the OAuth2 server
    JsonObject credentials =
        new JsonObject()
            .put("clientID", "CLIENT_ID")
            .put("clientSecret", "CLIENT_SECRET")
            .put("site", "https://www.linkedin.com")
            .put("authorizationPath", "/uas/oauth2/authorization")
            .put("tokenPath", "/uas/oauth2/accessToken");

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.CLIENT, credentials);
  }
  public void example7(Vertx vertx) {
    // Set the client credentials and the OAuth2 server
    JsonObject credentials =
        new JsonObject()
            .put("clientID", "CLIENT_ID")
            .put("clientSecret", "CLIENT_SECRET")
            .put("site", "https://accounts.google.com")
            .put("tokenPath", "https://www.googleapis.com/oauth2/v3/token")
            .put("authorizationPath", "/o/oauth2/auth");

    // Initialize the OAuth2 Library
    OAuth2Auth oauth2 = OAuth2Auth.create(vertx, OAuth2FlowType.CLIENT, credentials);
  }