package net.stsmedia.financemanager.security;
import javax.annotation.PostConstruct;
import net.stsmedia.financemanager.domain.Person;
import net.stsmedia.financemanager.service.AuthorityService;
import net.stsmedia.financemanager.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
/**
* A simple data seeder which populates the db with a single
* user with admin priviliges.
*
* @author Stefan Schmidt
* @since 0.4
*
*/
@Component
public class SeedAdminData {
@Autowired private PersonService personService;
@Autowired private AuthorityService authorityService;
@Value("#{adminUser}") private Person admin;
@Value("#{adminAuthority}") private Authorities adminAuthorities;
@PostConstruct
private void seedAdmin() {
// Set a dummy admin account that will create the actual admin
Authentication authRequest = new UsernamePasswordAuthenticationToken("ignored", "ignored", AuthorityUtils.createAuthorityList("ROLE_ADMIN"));
SecurityContextHolder.getContext().setAuthentication(authRequest);
personService.persist(admin);
authorityService.persist(adminAuthorities);
SecurityContextHolder.clearContext();
}
}