// Path: locate-api-service/src/main/java/uk/gov/gds/locate/api/dao/AuthorizationTokenDao.java
// public class AuthorizationTokenDao {
// 
//     private final JacksonDBCollection<AuthorizationToken, String> authorizationTokens;
// 
//     public AuthorizationTokenDao(JacksonDBCollection<AuthorizationToken, String> authorizationTokens) {
//         this.authorizationTokens = authorizationTokens;
//     }
// 
//     @Timed
//     public AuthorizationToken fetchCredentialsByBearerToken(String token) {
//         return authorizationTokens.findOne(new BasicDBObject("token", token));
//     }
// 
//     @Timed
//     public Boolean create(AuthorizationToken authorizationToken) {
//         return authorizationTokens.insert(authorizationToken).getN() == 1;
//     }
// 
//     @Timed
//     public void applyIndexes() {
//         authorizationTokens.ensureIndex(new BasicDBObject("token", 1), "token_index", true);
//         authorizationTokens.ensureIndex(new BasicDBObject("identifier", 1), "identifier_index", true);
//     }
// }
// 
// Path: locate-api-service/src/main/java/uk/gov/gds/locate/api/model/AuthorizationToken.java
// @JsonIgnoreProperties(ignoreUnknown = true)
// public class AuthorizationToken {
// 
//     @JsonProperty("_id")
//     @ObjectId
//     private String id;
// 
//     @JsonProperty("name")
//     private String name;
// 
//     @JsonProperty("identifier")
//     private String identifier;
// 
//     @JsonProperty("organisation")
//     private String organisation;
// 
//     @JsonProperty("token")
//     private String token;
// 
//     public AuthorizationToken() {
//     }
// 
//     public AuthorizationToken(String id, String name, String identifier, String organisation, String token) {
//         this.id = id;
//         this.name = name;
//         this.identifier = identifier;
//         this.organisation = organisation;
//         this.token = token;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getIdentifier() {
//         return identifier;
//     }
// 
//     public String getOrganisation() {
//         return organisation;
//     }
// 
//     public String getToken() {
//         return token;
//     }
// 
//     @Override
//     public String toString() {
//         return "AuthorizationToken{" +
//                 "id='" + id + '\'' +
//                 ", name='" + name + '\'' +
//                 ", identifier='" + identifier + '\'' +
//                 ", organisation='" + organisation + '\'' +
//                 ", token='" + token + '\'' +
//                 '}';
//     }
// }


import com.google.common.base.Optional;
import com.yammer.dropwizard.auth.AuthenticationException;
import com.yammer.dropwizard.auth.Authenticator;
import uk.gov.gds.locate.api.dao.AuthorizationTokenDao;
import uk.gov.gds.locate.api.model.AuthorizationToken;
package uk.gov.gds.locate.api.authentication;


public class BearerTokenAuthenticator implements Authenticator<String, AuthorizationToken> {

    private final AuthorizationTokenDao authorizationTokenDao;

    public BearerTokenAuthenticator(AuthorizationTokenDao authorizationTokenDao) {
// Path: locate-api-service/src/main/java/uk/gov/gds/locate/api/dao/AuthorizationTokenDao.java
// public class AuthorizationTokenDao {
// 
//     private final JacksonDBCollection<AuthorizationToken, String> authorizationTokens;
// 
//     public AuthorizationTokenDao(JacksonDBCollection<AuthorizationToken, String> authorizationTokens) {
//         this.authorizationTokens = authorizationTokens;
//     }
// 
//     @Timed
//     public AuthorizationToken fetchCredentialsByBearerToken(String token) {
//         return authorizationTokens.findOne(new BasicDBObject("token", token));
//     }
// 
//     @Timed
//     public Boolean create(AuthorizationToken authorizationToken) {
//         return authorizationTokens.insert(authorizationToken).getN() == 1;
//     }
// 
//     @Timed
//     public void applyIndexes() {
//         authorizationTokens.ensureIndex(new BasicDBObject("token", 1), "token_index", true);
//         authorizationTokens.ensureIndex(new BasicDBObject("identifier", 1), "identifier_index", true);
//     }
// }
// 
// Path: locate-api-service/src/main/java/uk/gov/gds/locate/api/model/AuthorizationToken.java
// @JsonIgnoreProperties(ignoreUnknown = true)
// public class AuthorizationToken {
// 
//     @JsonProperty("_id")
//     @ObjectId
//     private String id;
// 
//     @JsonProperty("name")
//     private String name;
// 
//     @JsonProperty("identifier")
//     private String identifier;
// 
//     @JsonProperty("organisation")
//     private String organisation;
// 
//     @JsonProperty("token")
//     private String token;
// 
//     public AuthorizationToken() {
//     }
// 
//     public AuthorizationToken(String id, String name, String identifier, String organisation, String token) {
//         this.id = id;
//         this.name = name;
//         this.identifier = identifier;
//         this.organisation = organisation;
//         this.token = token;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getIdentifier() {
//         return identifier;
//     }
// 
//     public String getOrganisation() {
//         return organisation;
//     }
// 
//     public String getToken() {
//         return token;
//     }
// 
//     @Override
//     public String toString() {
//         return "AuthorizationToken{" +
//                 "id='" + id + '\'' +
//                 ", name='" + name + '\'' +
//                 ", identifier='" + identifier + '\'' +
//                 ", organisation='" + organisation + '\'' +
//                 ", token='" + token + '\'' +
//                 '}';
//     }
// }


// Path: locate-api-service/src/main/java/uk/gov/gds/locate/api/authentication/BearerTokenAuthenticator.java
import com.google.common.base.Optional;
import com.yammer.dropwizard.auth.AuthenticationException;
import com.yammer.dropwizard.auth.Authenticator;
import uk.gov.gds.locate.api.dao.AuthorizationTokenDao;
import uk.gov.gds.locate.api.model.AuthorizationToken;

package uk.gov.gds.locate.api.authentication;


public class BearerTokenAuthenticator implements Authenticator<String, AuthorizationToken> {

    private final AuthorizationTokenDao authorizationTokenDao;

    public BearerTokenAuthenticator(AuthorizationTokenDao authorizationTokenDao) {
        this.authorizationTokenDao = authorizationTokenDao;