package io.loli.box.dao;
import io.loli.box.entity.PersistentLogins;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.security.web.authentication.rememberme.PersistentRememberMeToken;
import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* @author choco
*/
public interface JpaReMemberMeRepository extends JpaRepository<PersistentLogins, String>, PersistentTokenRepository {
@Modifying
@Transactional
default void createNewToken(PersistentRememberMeToken token) {
PersistentLogins logins = new PersistentLogins();
logins.setLastUsed(token.getDate());
logins.setSeries(token.getSeries());
logins.setToken(token.getTokenValue());
logins.setUsername(token.getUsername());
this.save(logins);
}
@Modifying
@Transactional
default void updateToken(String series, String tokenValue, Date lastUsed) {
updateTokenAndLastUsedBySeries(tokenValue, lastUsed, series);
}
@Query("update PersistentLogins set token=?, lastUsed=? where series=?")
@Modifying
public int updateTokenAndLastUsedBySeries(String token, Date lastUsed, String series);
public List<PersistentLogins> findBySeries(String series);
default PersistentRememberMeToken getTokenForSeries(String seriesId) {
List<PersistentLogins> logins = this.findBySeries(seriesId);
if (logins.isEmpty()) {
return null;
}
PersistentLogins login = logins.get(0);
return new PersistentRememberMeToken(login.getUsername(), login.getSeries(), login.getToken(), login.getLastUsed());
}
@Modifying
public int deleteByUsername(String username);
@Transactional
default void removeUserTokens(String username){
this.deleteByUsername(username);
}
}