// Path: src/main/java/uk/ac/ic/wlgitbridge/application/config/Oauth2.java
// public class Oauth2 {
// 
//     private final String oauth2ClientID;
//     private final String oauth2ClientSecret;
//     private final String oauth2Server;
// 
//     public Oauth2(
//             String oauth2ClientID,
//             String oauth2ClientSecret,
//             String oauth2Server
//     ) {
//         this.oauth2ClientID = oauth2ClientID;
//         this.oauth2ClientSecret = oauth2ClientSecret;
//         this.oauth2Server = oauth2Server;
//     }
// 
//     public String getOauth2ClientID() {
//         return oauth2ClientID;
//     }
// 
//     public String getOauth2ClientSecret() {
//         return oauth2ClientSecret;
//     }
// 
//     public String getOauth2Server() {
//         return oauth2Server;
//     }
// 
//     public static Oauth2 asSanitised(Oauth2 oauth2) {
//         return new Oauth2(
//                 "<oauth2ClientID>",
//                 "<oauth2ClientSecret>",
//                 oauth2.oauth2Server
//         );
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApi.java
// public interface SnapshotApi {
// 
//     CompletableFuture<GetDocResult> getDoc(
//             Optional<Credential> oath2, String projectName);
// 
//     CompletableFuture<GetForVersionResult> getForVersion(
//             Optional<Credential> oauth2, String projectName, int versionId);
// 
//     CompletableFuture<GetSavedVersResult> getSavedVers(
//             Optional<Credential> oauth2, String projectName);
// 
//     CompletableFuture<PushResult> push(
//             Optional<Credential> oauth2,
//             CandidateSnapshot candidateSnapshot,
//             String postbackKey);
// 
//     static <T> T getResult(CompletableFuture<T> result)
//             throws FailedConnectionException, ForbiddenException {
//         try {
//             return result.join();
//         } catch (CompletionException e) {
//             try {
//                 throw e.getCause();
//             } catch (FailedConnectionException
//                     | ForbiddenException
//                     | RuntimeException r) {
//                 throw r;
//             } catch (Throwable __) {
//                 throw e;
//             }
//         }
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/ForbiddenException.java
// public class ForbiddenException extends SnapshotAPIException {
// 
//     @Override
//     public void fromJSON(JsonElement json) {}
// 
//     @Override
//     public String getMessage() {
//         return "forbidden";
//     }
// 
//     @Override
//     public List<String> getDescriptionLines() {
//         return Arrays.asList(getMessage());
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/util/Log.java
// public class Log {
// 
//     private static Logger logger = LoggerFactory.getLogger(GitBridgeApp.class);
// 
//     public static void trace(String msg) {
//         logger.trace(msg);
//     }
// 
//     public static void trace(String msg, Throwable t) {
//         logger.trace(msg, t);
//     }
// 
//     public static void debug(String msg) {
//         logger.debug(msg);
//     }
// 
//     public static void debug(String msg, Throwable t) {
//         logger.debug(msg, t);
//     }
// 
//     public static void info(String msg) {
//         logger.info(msg);
//     }
// 
//     public static void info(String format, Object arg) {
//         logger.info(format, arg);
//     }
// 
//     public static void info(String format, Object arg1, Object arg2) {
//         logger.info(format, arg1, arg2);
//     }
// 
//     public static void info(String format, Object... args) {
//         logger.info(format, args);
//     }
// 
//     public static void info(String msg, Throwable t) {
//         logger.info(msg, t);
//     }
// 
//     public static void warn(String msg) {
//         logger.warn(msg);
//     }
// 
//     public static void warn(String msg, Object arg) {
//         logger.warn(msg, arg);
//     }
// 
//     public static void warn(String msg, Object arg1, Object arg2) {
//         logger.warn(msg, arg1, arg2);
//     }
// 
//     public static void warn(String msg, Object... args) {
//         logger.warn(msg, args);
//     }
// 
//     public static void warn(String msg, Throwable t) {
//         logger.warn(msg, t);
//     }
// 
//     public static void error(String msg) {
//         logger.error(msg);
//     }
// 
//     public static void error(String msg, Object... args) {
//         logger.error(msg, args);
//     }
// 
//     public static void error(String msg, Throwable t) {
//         logger.error(msg, t);
//     }
// 
// }


import com.google.api.client.auth.oauth2.*;
import com.google.api.client.http.GenericUrl;
import org.apache.commons.codec.binary.Base64;
import org.eclipse.jetty.server.Request;
import uk.ac.ic.wlgitbridge.application.config.Oauth2;
import uk.ac.ic.wlgitbridge.bridge.snapshot.SnapshotApi;
import uk.ac.ic.wlgitbridge.snapshot.base.ForbiddenException;
import uk.ac.ic.wlgitbridge.snapshot.getdoc.GetDocRequest;
import uk.ac.ic.wlgitbridge.util.Instance;
import uk.ac.ic.wlgitbridge.util.Log;
import uk.ac.ic.wlgitbridge.util.Util;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Optional;
import java.util.StringTokenizer;
package uk.ac.ic.wlgitbridge.server;



/**
 * Created by winston on 25/10/15.
 */
public class Oauth2Filter implements Filter {

    public static final String ATTRIBUTE_KEY = "oauth2";

    private final SnapshotApi snapshotApi;

// Path: src/main/java/uk/ac/ic/wlgitbridge/application/config/Oauth2.java
// public class Oauth2 {
// 
//     private final String oauth2ClientID;
//     private final String oauth2ClientSecret;
//     private final String oauth2Server;
// 
//     public Oauth2(
//             String oauth2ClientID,
//             String oauth2ClientSecret,
//             String oauth2Server
//     ) {
//         this.oauth2ClientID = oauth2ClientID;
//         this.oauth2ClientSecret = oauth2ClientSecret;
//         this.oauth2Server = oauth2Server;
//     }
// 
//     public String getOauth2ClientID() {
//         return oauth2ClientID;
//     }
// 
//     public String getOauth2ClientSecret() {
//         return oauth2ClientSecret;
//     }
// 
//     public String getOauth2Server() {
//         return oauth2Server;
//     }
// 
//     public static Oauth2 asSanitised(Oauth2 oauth2) {
//         return new Oauth2(
//                 "<oauth2ClientID>",
//                 "<oauth2ClientSecret>",
//                 oauth2.oauth2Server
//         );
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/bridge/snapshot/SnapshotApi.java
// public interface SnapshotApi {
// 
//     CompletableFuture<GetDocResult> getDoc(
//             Optional<Credential> oath2, String projectName);
// 
//     CompletableFuture<GetForVersionResult> getForVersion(
//             Optional<Credential> oauth2, String projectName, int versionId);
// 
//     CompletableFuture<GetSavedVersResult> getSavedVers(
//             Optional<Credential> oauth2, String projectName);
// 
//     CompletableFuture<PushResult> push(
//             Optional<Credential> oauth2,
//             CandidateSnapshot candidateSnapshot,
//             String postbackKey);
// 
//     static <T> T getResult(CompletableFuture<T> result)
//             throws FailedConnectionException, ForbiddenException {
//         try {
//             return result.join();
//         } catch (CompletionException e) {
//             try {
//                 throw e.getCause();
//             } catch (FailedConnectionException
//                     | ForbiddenException
//                     | RuntimeException r) {
//                 throw r;
//             } catch (Throwable __) {
//                 throw e;
//             }
//         }
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/snapshot/base/ForbiddenException.java
// public class ForbiddenException extends SnapshotAPIException {
// 
//     @Override
//     public void fromJSON(JsonElement json) {}
// 
//     @Override
//     public String getMessage() {
//         return "forbidden";
//     }
// 
//     @Override
//     public List<String> getDescriptionLines() {
//         return Arrays.asList(getMessage());
//     }
// 
// }
// 
// Path: src/main/java/uk/ac/ic/wlgitbridge/util/Log.java
// public class Log {
// 
//     private static Logger logger = LoggerFactory.getLogger(GitBridgeApp.class);
// 
//     public static void trace(String msg) {
//         logger.trace(msg);
//     }
// 
//     public static void trace(String msg, Throwable t) {
//         logger.trace(msg, t);
//     }
// 
//     public static void debug(String msg) {
//         logger.debug(msg);
//     }
// 
//     public static void debug(String msg, Throwable t) {
//         logger.debug(msg, t);
//     }
// 
//     public static void info(String msg) {
//         logger.info(msg);
//     }
// 
//     public static void info(String format, Object arg) {
//         logger.info(format, arg);
//     }
// 
//     public static void info(String format, Object arg1, Object arg2) {
//         logger.info(format, arg1, arg2);
//     }
// 
//     public static void info(String format, Object... args) {
//         logger.info(format, args);
//     }
// 
//     public static void info(String msg, Throwable t) {
//         logger.info(msg, t);
//     }
// 
//     public static void warn(String msg) {
//         logger.warn(msg);
//     }
// 
//     public static void warn(String msg, Object arg) {
//         logger.warn(msg, arg);
//     }
// 
//     public static void warn(String msg, Object arg1, Object arg2) {
//         logger.warn(msg, arg1, arg2);
//     }
// 
//     public static void warn(String msg, Object... args) {
//         logger.warn(msg, args);
//     }
// 
//     public static void warn(String msg, Throwable t) {
//         logger.warn(msg, t);
//     }
// 
//     public static void error(String msg) {
//         logger.error(msg);
//     }
// 
//     public static void error(String msg, Object... args) {
//         logger.error(msg, args);
//     }
// 
//     public static void error(String msg, Throwable t) {
//         logger.error(msg, t);
//     }
// 
// }


// Path: src/main/java/uk/ac/ic/wlgitbridge/server/Oauth2Filter.java
import com.google.api.client.auth.oauth2.*;
import com.google.api.client.http.GenericUrl;
import org.apache.commons.codec.binary.Base64;
import org.eclipse.jetty.server.Request;
import uk.ac.ic.wlgitbridge.application.config.Oauth2;
import uk.ac.ic.wlgitbridge.bridge.snapshot.SnapshotApi;
import uk.ac.ic.wlgitbridge.snapshot.base.ForbiddenException;
import uk.ac.ic.wlgitbridge.snapshot.getdoc.GetDocRequest;
import uk.ac.ic.wlgitbridge.util.Instance;
import uk.ac.ic.wlgitbridge.util.Log;
import uk.ac.ic.wlgitbridge.util.Util;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Optional;
import java.util.StringTokenizer;

package uk.ac.ic.wlgitbridge.server;



/**
 * Created by winston on 25/10/15.
 */
public class Oauth2Filter implements Filter {

    public static final String ATTRIBUTE_KEY = "oauth2";

    private final SnapshotApi snapshotApi;

    private final Oauth2 oauth2;