summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/auth/github/GitHubLogin.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/gitblit/auth/github/GitHubLogin.java')
-rw-r--r--src/main/java/com/gitblit/auth/github/GitHubLogin.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/auth/github/GitHubLogin.java b/src/main/java/com/gitblit/auth/github/GitHubLogin.java
new file mode 100644
index 00000000..0776494d
--- /dev/null
+++ b/src/main/java/com/gitblit/auth/github/GitHubLogin.java
@@ -0,0 +1,100 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.gitblit.auth.github;
+
+import com.google.inject.Inject;
+import com.google.inject.servlet.SessionScoped;
+
+import org.apache.http.HttpStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@SessionScoped
+class GitHubLogin {
+ private static final Logger log = LoggerFactory.getLogger(GitHubLogin.class);
+
+ private final OAuthProtocol oauth;
+ private String token;
+ private String user;
+
+ @Inject
+ GitHubLogin(final OAuthProtocol oauth) {
+ this.oauth = oauth;
+ }
+
+ boolean isLoggedIn() {
+ return token != null && user != null;
+ }
+
+ boolean login(HttpServletRequest request, HttpServletResponse response)
+ throws IOException {
+ if (isLoggedIn()) {
+ return true;
+ }
+
+ log.debug("Login " + this);
+
+ if (OAuthProtocol.isOAuthFinal(request)) {
+ String redirectUrl = oauth.getTargetUrl(request);
+ if (redirectUrl == null) {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ return false;
+ }
+
+ log.debug("Login-Retrieve-User " + this);
+ retrieveUser(oauth.loginPhase2(request, response));
+ if (isLoggedIn()) {
+ log.debug("Login-SUCCESS " + this);
+ response.sendRedirect(redirectUrl);
+ return true;
+ } else {
+ response.sendError(HttpStatus.SC_UNAUTHORIZED);
+ return false;
+ }
+ } else {
+ log.debug("Login-PHASE1 " + this);
+ oauth.loginPhase1(request, response);
+ return false;
+ }
+ }
+
+ void logout() {
+ token = null;
+ user = null;
+ }
+
+ boolean isLoginRequest(HttpServletRequest httpRequest) {
+ return oauth.isOAuthRequest(httpRequest);
+ }
+
+ String getUsername() {
+ return user;
+ }
+
+ @Override
+ public String toString() {
+ return "GitHubLogin [token=" + token + ", user=" + user + "]";
+ }
+
+ private void retrieveUser(String authToken) throws IOException {
+ this.token = authToken;
+ this.user = oauth.retrieveUser(authToken);
+ }
+}