Package com.jetdrone.vertx.oauth2

Source Code of com.jetdrone.vertx.oauth2.Oauth2

package com.jetdrone.vertx.oauth2;

import com.jetdrone.vertx.yoke.Middleware;
import com.jetdrone.vertx.yoke.Yoke;
import com.jetdrone.vertx.yoke.extras.middleware.OAuth2Provider;
import com.jetdrone.vertx.yoke.middleware.*;
import com.jetdrone.vertx.yoke.util.Utils;
import org.vertx.java.core.Handler;
import org.vertx.java.core.json.JsonObject;
import org.vertx.java.platform.Verticle;

import javax.crypto.Mac;

public class Oauth2 extends Verticle {

    @Override
    public void start() {

        Mac mac = Utils.newHmacSHA256("abracadabra");
        OAuth2Provider oauthProvider = new OAuth2Provider("signing-secret");

//oauthProvider.on('authorizeParamMissing', function(req, res, callback) {
//  res.writeHead(400);
//  res.end("missing param");
//});
//
//oauthProvider.on('enforceLogin', function(req, res, authorizeUrl, callback) {
//  if(req.session.user) {
//    callback(req.session.user);
//  } else {
//    res.writeHead(303, {Location: '/login?next=' + encodeURIComponent(authorizeUrl)});
//    res.end();
//  }
//});
//
//oauthProvider.on('shouldSkipAllow', function(userId, clientId, callback){
//  callback();
//});
//
//oauthProvider.on('validateClientIdAndRedirectUri', function(clientId, redirectUri, req, res, callback) {
//  callback();
//});
//
//oauthProvider.on('authorizeForm', function(req, res, clientId, authorizeUrl) {
//  res.end('<html>this app wants to access your account... <form method="post" action="' + authorizeUrl + '"><button name="allow" value="true">Allow</button></form>');
//});
//
//oauthProvider.on('invalidResponseType', function(req, res, callback) {
//  res.writeHead(400);
//  res.end("invalid response type");
//});
//
//oauthProvider.on('accessDenied', function(req, res, callback) {
//  res.json(401, {error:"access denied"});
//});
//
//oauthProvider.on('createAccessToken', function(userId, clientId, callback) {
//  callback("test-tooken");
//});
//
//oauthProvider.on('createGrant', function(req, clientId, callback) {
//  callback("ABC123");
//});
//
//oauthProvider.on('lookupGrant', function(clientId, clientSecret, code, res, callback) {
//  callback("userId");
//});

        final Yoke app = new Yoke(this);

        app.use(new ErrorHandler(true));

        app.use(new Logger());
        app.use(new BodyParser());
        app.use(new CookieParser());
        app.use(new Session(mac));
        app.use(oauthProvider);
        app.use(new Router() {{
            get("/", new Middleware() {
                @Override
                public void handle(final YokeRequest request, final Handler<Object> next) {
                    request.loadSessionData(new Handler<JsonObject>() {
                        @Override
                        public void handle(JsonObject session) {
                            if (session == null) {
                                request.response().end("home, logged in? false");
                            } else {
                                System.out.println(session.encodePrettily());
                                request.response().end("home, logged in? " + (session.getString("user") != null));
                            }
                        }
                    });
                }
            });

            get("/login", new Middleware() {
                @Override
                public void handle(final YokeRequest request, Handler<Object> next) {
                    request.loadSessionData(new Handler<JsonObject>() {
                        @Override
                        public void handle(JsonObject session) {
                            if (session != null && session.getString("user") != null) {
                                request.response().redirect(303, "/");
                                return;
                            }

                            String next_url = request.getParameter("next", "/");
                            request.response().end("<html><form method=\"post\" action=\"/login\"><input type=\"hidden\" name=\"next\" value=\"" + next_url + "\"><input type=\"text\" placeholder=\"username\" name=\"username\"><input type=\"password\" placeholder=\"password\" name=\"password\"><button type=\"submit\">Login</button></form>");
                        }
                    });
                }
            });

            post("/login", new Middleware() {
                @Override
                public void handle(final YokeRequest request, final Handler<Object> next) {
                    JsonObject session = new JsonObject();
                    session.putString("user", request.getFormParameter("username"));

                    request.saveSessionData(session, new Handler<String>() {
                        @Override
                        public void handle(String status) {
                            if (!"ok".equals(status)) {
                                next.handle(status);
                                return;
                            }
                            request.response().redirect(303, request.getFormParameter("next", "/"));
                        }
                    });
                }
            });

            get("/logout", new Middleware() {
                @Override
                public void handle(YokeRequest request, Handler<Object> next) {
                    request.destroySession();
                    request.response().redirect(303, "/");
                }
            });

            get("/protected_resource", new Middleware() {
                @Override
                public void handle(YokeRequest request, Handler<Object> next) {
                        if (request.getParameter("access_token") != null) {
                            String accessToken = request.getParameter("access_token");
                            request.response().end(new JsonObject().putString("access_token", accessToken));
                        } else {
                            // no token found
                            next.handle(403);
                        }
                }
            });
        }});

        app.listen(8081);
    }
}
TOP

Related Classes of com.jetdrone.vertx.oauth2.Oauth2

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.