@Autowired public AuthenticationSourceServiceImpl(Collection<? extends AuthenticationSourceProvider> providers) { this.providers = Maps.uniqueIndex( providers, p -> p.getSource().getId() ); }
@Override public Optional<Account> findUserByNameAndSource(String username, AuthenticationSourceProvider sourceProvider) { return Optional.ofNullable( getFirstItem( "SELECT * FROM ACCOUNTS WHERE MODE = :mode AND NAME = :name", params("name", username).addValue("mode", sourceProvider.getSource().getId()), (rs, rowNum) -> toAccount(rs, mode -> sourceProvider.getSource()) ) ); }
@Override public Account newAccount(Account account) { try { int id = dbCreate( "INSERT INTO ACCOUNTS (NAME, FULLNAME, EMAIL, MODE, PASSWORD, ROLE) " + "VALUES (:name, :fullName, :email, :mode, :password, :role)", params("name", account.getName()) .addValue("fullName", account.getFullName()) .addValue("email", account.getEmail()) .addValue("mode", account.getAuthenticationSource().getId()) .addValue("password", "") .addValue("role", account.getRole().name()) ); return account.withId(ID.of(id)); } catch (DuplicateKeyException ex) { throw new AccountNameAlreadyDefinedException(account.getName()); } }
.description("Source of authentication (builtin, ldap, etc.)") .type(GraphQLString) .dataFetcher(environment -> ((Account) environment.getSource()).getAuthenticationSource().getId()) .build()