// Path: src/main/java/net/olemartin/domain/User.java
// @NodeEntity
// public class User implements Principal {
// 
//     @GraphId
//     private Long id;
// 
//     @Index(unique=true)
//     private String username;
// 
//     private String password;
//     
//     private String salt;
//     private String name;
// 
//     public User(String username, String password, String salt, String name) {
// 
//         this.username = username;
//         this.password = password;
//         this.salt = salt;
//         this.name = name;
//     }
// 
//     private User(){}
// 
//     public String getSalt() {
//         return salt;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public static class UserSerializer implements JsonSerializer<User> {
// 
//         @Override
//         public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
//             JsonObject root = new JsonObject();
//             root.addProperty("id", src.id);
//             root.addProperty("name", src.name);
//             root.addProperty("username", src.username);
//             return root;
//         }
//     }
// }


import io.dropwizard.auth.AuthenticationException;
import io.dropwizard.auth.Authenticator;
import io.dropwizard.auth.basic.BasicCredentials;
import net.olemartin.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;
package net.olemartin.service.user;




@Service
public class ChessAuthenticator implements Authenticator<BasicCredentials, User> {

    private final UserService userService;

    @Autowired
    public ChessAuthenticator(UserService userService) {
        this.userService = userService;
    }

    @Override
// Path: src/main/java/net/olemartin/domain/User.java
// @NodeEntity
// public class User implements Principal {
// 
//     @GraphId
//     private Long id;
// 
//     @Index(unique=true)
//     private String username;
// 
//     private String password;
//     
//     private String salt;
//     private String name;
// 
//     public User(String username, String password, String salt, String name) {
// 
//         this.username = username;
//         this.password = password;
//         this.salt = salt;
//         this.name = name;
//     }
// 
//     private User(){}
// 
//     public String getSalt() {
//         return salt;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public static class UserSerializer implements JsonSerializer<User> {
// 
//         @Override
//         public JsonElement serialize(User src, Type typeOfSrc, JsonSerializationContext context) {
//             JsonObject root = new JsonObject();
//             root.addProperty("id", src.id);
//             root.addProperty("name", src.name);
//             root.addProperty("username", src.username);
//             return root;
//         }
//     }
// }


// Path: src/main/java/net/olemartin/service/user/ChessAuthenticator.java
import io.dropwizard.auth.AuthenticationException;
import io.dropwizard.auth.Authenticator;
import io.dropwizard.auth.basic.BasicCredentials;
import net.olemartin.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Optional;

package net.olemartin.service.user;




@Service
public class ChessAuthenticator implements Authenticator<BasicCredentials, User> {

    private final UserService userService;

    @Autowired
    public ChessAuthenticator(UserService userService) {
        this.userService = userService;
    }

    @Override
    public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException {