/*
* Copyright (C) 2013 Intel Corporation
* All rights reserved.
*/
package test.jdbi;
import com.intel.mtwilson.user.management.rest.v2.model.RolePermission;
import com.intel.mtwilson.user.management.rest.v2.model.User;
import com.intel.mtwilson.user.management.rest.v2.model.Role;
import com.intel.mtwilson.user.management.rest.v2.model.UserLoginPassword;
import com.intel.mtwilson.user.management.rest.v2.model.Status;
import com.intel.dcsg.cpg.crypto.RandomUtil;
import com.intel.dcsg.cpg.i18n.LocaleUtil;
import com.intel.dcsg.cpg.io.UUID;
import com.intel.mtwilson.My;
import com.intel.mtwilson.crypto.password.PasswordUtil;
import com.intel.mtwilson.shiro.jdbi.*;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* If you are setting up a test environment you should run the unit tests
* in this order:
*
* testCreateRole
* testCreateUser
*
*
* References:
* Validation queries: http://stackoverflow.com/questions/3668506/efficient-sql-test-query-or-validation-query-that-will-work-across-all-or-most
*
* @author jbuhacoff
*/
public class RepositoryTest {
private static Logger log = LoggerFactory.getLogger(RepositoryTest.class);
@Test
public void testCreateRole() throws Exception {
try(LoginDAO dao = MyJdbi.authz()) {
//create a new role
Role role = new Role();
role.setId(new UUID());
role.setRoleName("root");
role.setDescription("for testing only");
dao.insertRole(role.getId(), role.getRoleName(), role.getDescription());
log.debug("Created role {} with id {}", role.getRoleName(), role.getId()); // for example: Created role root with id 6a382588-ab03-4973-b751-0ae927e1a639
// add permissions to this role
RolePermission rolePermission = new RolePermission();
rolePermission.setRoleId(role.getId());
rolePermission.setPermitDomain("*");
rolePermission.setPermitAction("*");
rolePermission.setPermitSelection("*");
dao.insertRolePermission(rolePermission.getRoleId(), rolePermission.getPermitDomain(), rolePermission.getPermitAction(), rolePermission.getPermitSelection());
}
}
@Test
public void testCreateUser() throws Exception {
try(LoginDAO dao = MyJdbi.authz()) {
//create a new user
User user = new User();
user.setId(new UUID());
user.setUsername(My.configuration().getKeystoreUsername());
user.setComment("test");
dao.insertUser(user.getId(), user.getUsername(), LocaleUtil.toLanguageTag(Locale.US), user.getComment());
log.debug("Created username {} with id {}", user.getUsername(), user.getId()); // for example: Created username jonathan with id 84ff12f4-6a68-495c-a70d-174cb07e45ce
// set a password for the user
UserLoginPassword userLoginPassword = new UserLoginPassword();
userLoginPassword.setId(new UUID());
userLoginPassword.setUserId(user.getId());
// userLoginPassword.setUserId(UUID.valueOf("84ff12f4-6a68-495c-a70d-174cb07e45ce"));
userLoginPassword.setSalt(RandomUtil.randomByteArray(8));
userLoginPassword.setIterations(1000);
userLoginPassword.setAlgorithm("SHA256");
userLoginPassword.setEnabled(true);
userLoginPassword.setPasswordHash(PasswordUtil.hash(My.configuration().getKeystorePassword().getBytes(), userLoginPassword));
userLoginPassword.setStatus(Status.APPROVED);
userLoginPassword.setComment("Testing");
dao.insertUserLoginPassword(userLoginPassword.getId(), userLoginPassword.getUserId(), userLoginPassword.getPasswordHash(), userLoginPassword.getSalt(), userLoginPassword.getIterations(),
userLoginPassword.getAlgorithm(), userLoginPassword.getExpires(), userLoginPassword.isEnabled(), userLoginPassword.getStatus(), userLoginPassword.getComment());
// add a role for the user
Role root = dao.findRoleByName("root");
dao.insertUserLoginPasswordRole(userLoginPassword.getId(), root.getId());
}
}
/**
* uses mtwilson.api.username and mtwilson.api.password from your local
* mtwilson.properties as the username and password
*
* @throws Exception
*/
@Test
public void testResetPassword() throws Exception {
try(LoginDAO dao = MyJdbi.authz()) {
UserLoginPassword userLoginPassword = dao.findUserLoginPasswordByUsername(My.configuration().getKeystoreUsername());
if( userLoginPassword == null ) {
throw new IllegalArgumentException("No such user: "+My.configuration().getKeystoreUsername());
}
userLoginPassword.setSalt(RandomUtil.randomByteArray(8));
userLoginPassword.setPasswordHash(PasswordUtil.hash(My.configuration().getKeystorePassword().getBytes(), userLoginPassword));
userLoginPassword.setEnabled(true);
userLoginPassword.setStatus(Status.APPROVED);
userLoginPassword.setComment("Testing");
dao.updateUserLoginPassword(userLoginPassword.getPasswordHash(), userLoginPassword.getSalt(), userLoginPassword.getIterations(),
userLoginPassword.getAlgorithm(), userLoginPassword.getExpires(), userLoginPassword.isEnabled(), userLoginPassword.getId(),
userLoginPassword.getStatus(), userLoginPassword.getComment());
}
}
@Test
public void testGetRolePermissions() throws Exception {
try(LoginDAO dao = MyJdbi.authz()) {
List<Role> roles = dao.findRolesByUserLoginPasswordId(UUID.valueOf("39bee0f8-9284-4d55-9abe-cf372e200e79")); //df10be6f-7d67-4e86-a7e4-a13169d9ce23"));
HashSet<String> roleIds = new HashSet<>();
for(Role role : roles) {
log.debug("role: {}", role.getRoleName());
roleIds.add(role.getId().toString());
}
List<RolePermission> permissions = dao.findRolePermissionsByPasswordRoleIds(roleIds);
for(RolePermission permission : permissions) {
log.debug("permission: {} {} {}", permission.getPermitDomain(), permission.getPermitAction(), permission.getPermitSelection());
}
}
}
}