Search in sources :

Example 1 with OAuthServiceProvider

use of com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider in project gerrit by GerritCodeReview.

the class OAuthWebFilter method selectProvider.

private void selectProvider(HttpServletRequest req, HttpServletResponse res, @Nullable String errorMessage) throws IOException {
    String self = req.getRequestURI();
    String cancel = MoreObjects.firstNonNull(urlProvider != null ? urlProvider.get() : "/", "/");
    cancel += LoginUrlToken.getToken(req);
    Document doc = header.parse(OAuthWebFilter.class, "LoginForm.html");
    HtmlDomUtil.find(doc, "hostName").setTextContent(req.getServerName());
    HtmlDomUtil.find(doc, "login_form").setAttribute("action", self);
    HtmlDomUtil.find(doc, "cancel_link").setAttribute("href", cancel);
    Element emsg = HtmlDomUtil.find(doc, "error_message");
    if (Strings.isNullOrEmpty(errorMessage)) {
        emsg.getParentNode().removeChild(emsg);
    } else {
        emsg.setTextContent(errorMessage);
    }
    Element providers = HtmlDomUtil.find(doc, "providers");
    Set<String> plugins = oauthServiceProviders.plugins();
    for (String pluginName : plugins) {
        Map<String, Provider<OAuthServiceProvider>> m = oauthServiceProviders.byPlugin(pluginName);
        for (Map.Entry<String, Provider<OAuthServiceProvider>> e : m.entrySet()) {
            addProvider(providers, pluginName, e.getKey(), e.getValue().get().getName());
        }
    }
    sendHtml(res, doc);
}
Also used : Element(org.w3c.dom.Element) Document(org.w3c.dom.Document) Map(java.util.Map) DynamicMap(com.google.gerrit.extensions.registration.DynamicMap) SortedMap(java.util.SortedMap) OAuthServiceProvider(com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider) Provider(com.google.inject.Provider)

Example 2 with OAuthServiceProvider

use of com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider in project gerrit by GerritCodeReview.

the class OAuthWebFilterOverOpenID method doFilter.

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    OAuthSessionOverOpenID oauthSession = oauthSessionProvider.get();
    OAuthServiceProvider service = ssoProvider == null ? oauthSession.getServiceProvider() : ssoProvider;
    if (isGerritLogin(httpRequest) || oauthSession.isOAuthFinal(httpRequest)) {
        if (service == null) {
            throw new IllegalStateException("service is unknown");
        }
        oauthSession.setServiceProvider(service);
        oauthSession.login(httpRequest, httpResponse, service);
    } else {
        chain.doFilter(httpRequest, response);
    }
}
Also used : HttpServletRequest(javax.servlet.http.HttpServletRequest) OAuthServiceProvider(com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider) HttpServletResponse(javax.servlet.http.HttpServletResponse)

Example 3 with OAuthServiceProvider

use of com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider in project gerrit by GerritCodeReview.

the class OAuthWebFilter method doFilter.

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    OAuthSession oauthSession = oauthSessionProvider.get();
    if (request.getParameter("link") != null) {
        oauthSession.setLinkMode(true);
        oauthSession.setServiceProvider(null);
    }
    String provider = httpRequest.getParameter("provider");
    OAuthServiceProvider service = ssoProvider == null ? oauthSession.getServiceProvider() : ssoProvider;
    if (isGerritLogin(httpRequest) || oauthSession.isOAuthFinal(httpRequest)) {
        if (service == null && Strings.isNullOrEmpty(provider)) {
            selectProvider(httpRequest, httpResponse, null);
            return;
        }
        if (service == null) {
            service = findService(provider);
        }
        oauthSession.setServiceProvider(service);
        oauthSession.login(httpRequest, httpResponse, service);
    } else {
        chain.doFilter(httpRequest, response);
    }
}
Also used : HttpServletRequest(javax.servlet.http.HttpServletRequest) OAuthServiceProvider(com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider) HttpServletResponse(javax.servlet.http.HttpServletResponse)

Example 4 with OAuthServiceProvider

use of com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider in project gerrit by GerritCodeReview.

the class LoginForm method doPost.

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException {
    boolean link = req.getParameter("link") != null;
    String id = Strings.nullToEmpty(req.getParameter("id")).trim();
    if (id.isEmpty()) {
        sendForm(req, res, link, null);
        return;
    }
    if (!id.startsWith("http://") && !id.startsWith("https://")) {
        id = "http://" + id;
    }
    if ((ssoUrl != null && !ssoUrl.equals(id)) || !impl.isAllowedOpenID(id)) {
        sendForm(req, res, link, "OpenID provider not permitted by site policy.");
        return;
    }
    boolean remember = "1".equals(req.getParameter("rememberme"));
    String token = LoginUrlToken.getToken(req);
    SignInMode mode;
    if (link) {
        mode = SignInMode.LINK_IDENTIY;
    } else if (PageLinks.REGISTER.equals(token)) {
        mode = SignInMode.REGISTER;
        token = PageLinks.MINE;
    } else {
        mode = SignInMode.SIGN_IN;
    }
    log.debug("mode \"{}\"", mode);
    OAuthServiceProvider oauthProvider = lookupOAuthServiceProvider(id);
    if (oauthProvider == null) {
        log.debug("OpenId provider \"{}\"", id);
        discover(req, res, link, id, remember, token, mode);
    } else {
        log.debug("OAuth provider \"{}\"", id);
        OAuthSessionOverOpenID oauthSession = oauthSessionProvider.get();
        if (!currentUserProvider.get().isIdentifiedUser() && oauthSession.isLoggedIn()) {
            oauthSession.logout();
        }
        if ((isGerritLogin(req) || oauthSession.isOAuthFinal(req))) {
            oauthSession.setServiceProvider(oauthProvider);
            oauthSession.setLinkMode(link);
            oauthSession.login(req, res, oauthProvider);
        }
    }
}
Also used : OAuthServiceProvider(com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider)

Example 5 with OAuthServiceProvider

use of com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider in project gerrit by GerritCodeReview.

the class LoginForm method sendForm.

private void sendForm(HttpServletRequest req, HttpServletResponse res, boolean link, @Nullable String errorMessage) throws IOException {
    String self = req.getRequestURI();
    String cancel = MoreObjects.firstNonNull(urlProvider != null ? urlProvider.get() : "/", "/");
    cancel += LoginUrlToken.getToken(req);
    Document doc = header.parse(LoginForm.class, "LoginForm.html");
    HtmlDomUtil.find(doc, "hostName").setTextContent(req.getServerName());
    HtmlDomUtil.find(doc, "login_form").setAttribute("action", self);
    HtmlDomUtil.find(doc, "cancel_link").setAttribute("href", cancel);
    if (!link || ssoUrl != null) {
        Element input = HtmlDomUtil.find(doc, "f_link");
        input.getParentNode().removeChild(input);
    }
    String last = getLastId(req);
    if (last != null) {
        HtmlDomUtil.find(doc, "f_openid").setAttribute("value", last);
    }
    Element emsg = HtmlDomUtil.find(doc, "error_message");
    if (Strings.isNullOrEmpty(errorMessage)) {
        emsg.getParentNode().removeChild(emsg);
    } else {
        emsg.setTextContent(errorMessage);
    }
    for (String name : ALL_PROVIDERS.keySet()) {
        Element div = HtmlDomUtil.find(doc, "provider_" + name);
        if (div == null) {
            continue;
        }
        if (!suggestProviders.contains(name)) {
            div.getParentNode().removeChild(div);
            continue;
        }
        Element a = HtmlDomUtil.find(div, "id_" + name);
        if (a == null) {
            div.getParentNode().removeChild(div);
            continue;
        }
        StringBuilder u = new StringBuilder();
        u.append(self).append(a.getAttribute("href"));
        if (link) {
            u.append("&link");
        }
        a.setAttribute("href", u.toString());
    }
    // OAuth: Add plugin based providers
    Element providers = HtmlDomUtil.find(doc, "providers");
    Set<String> plugins = oauthServiceProviders.plugins();
    for (String pluginName : plugins) {
        Map<String, Provider<OAuthServiceProvider>> m = oauthServiceProviders.byPlugin(pluginName);
        for (Map.Entry<String, Provider<OAuthServiceProvider>> e : m.entrySet()) {
            addProvider(providers, link, pluginName, e.getKey(), e.getValue().get().getName());
        }
    }
    sendHtml(res, doc);
}
Also used : Element(org.w3c.dom.Element) Document(org.w3c.dom.Document) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) DynamicMap(com.google.gerrit.extensions.registration.DynamicMap) OAuthServiceProvider(com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider) Provider(com.google.inject.Provider)

Aggregations

OAuthServiceProvider (com.google.gerrit.extensions.auth.oauth.OAuthServiceProvider)5 DynamicMap (com.google.gerrit.extensions.registration.DynamicMap)2 Provider (com.google.inject.Provider)2 Map (java.util.Map)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 HttpServletResponse (javax.servlet.http.HttpServletResponse)2 Document (org.w3c.dom.Document)2 Element (org.w3c.dom.Element)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 SortedMap (java.util.SortedMap)1