All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.committed.invest.plugin.server.services.UserAccountDetailsRepositoryService Maven / Gradle / Ivy

The newest version!
package io.committed.invest.plugin.server.services;

import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;

import reactor.core.publisher.Mono;

import io.committed.invest.plugin.server.auth.dao.UserAccount;
import io.committed.invest.plugin.server.auth.utils.AuthUtils;
import io.committed.invest.plugin.server.repo.UserAccountRepository;

/** Implementation of Springs's ReactiveUserDetailsService, backed by a UserAccountRepository. */
public class UserAccountDetailsRepositoryService implements ReactiveUserDetailsService {

  private final UserAccountRepository repository;

  public UserAccountDetailsRepositoryService(final UserAccountRepository repository) {
    this.repository = repository;
  }

  private UserDetails toUser(final UserAccount account) {
    return new User(
        account.getUsername(),
        account.getPassword(),
        account.isEnabled(),
        !account.isExpired(),
        !account.isPasswordExpired(),
        !account.isLocked(),
        AuthUtils.toGrantAuthorities(account.getAuthorities()));
  }

  @Override
  public Mono findByUsername(final String username) {

    // Javadoc says that we should do the password check in addititonalAuthenticationChecks, rather
    // than using here in the find by

    return repository.findByUsername(username).map(this::toUser);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy