diff --git a/server/src/com/cloud/api/commands/CreateUserCmd.java b/server/src/com/cloud/api/commands/CreateUserCmd.java index 2eb047d2634..0488bbc9b38 100644 --- a/server/src/com/cloud/api/commands/CreateUserCmd.java +++ b/server/src/com/cloud/api/commands/CreateUserCmd.java @@ -18,38 +18,20 @@ package com.cloud.api.commands; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.domain.DomainVO; -import com.cloud.user.Account; -import com.cloud.user.User; -import com.cloud.utils.Pair; -import com.cloud.utils.exception.CloudRuntimeException; - +import com.cloud.api.response.UserResponse; +import com.cloud.serializer.SerializerHelper; +import com.cloud.user.UserAccount; + +@Implementation(method="createUser") public class CreateUserCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateUserCmd.class.getName()); private static final String s_name = "createuserresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_TYPE, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.EMAIL, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.FIRSTNAME, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.LASTNAME, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.PASSWORD, Boolean.TRUE)); - s_properties.add(new Pair(BaseCmd.Properties.TIMEZONE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.USERNAME, Boolean.TRUE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -128,75 +110,31 @@ public class CreateUserCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } @Override - public List> execute(Map params) { - String username = (String)params.get(BaseCmd.Properties.USERNAME.getName()); - String password = (String)params.get(BaseCmd.Properties.PASSWORD.getName()); - String firstname = (String)params.get(BaseCmd.Properties.FIRSTNAME.getName()); - String lastname = (String)params.get(BaseCmd.Properties.LASTNAME.getName()); - String email = (String)params.get(BaseCmd.Properties.EMAIL.getName()); - Long domainId = (Long)params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - String accountName = (String)params.get(BaseCmd.Properties.ACCOUNT.getName()); - Long accountType = (Long)params.get(BaseCmd.Properties.ACCOUNT_TYPE.getName()); - String timezone = (String)params.get(BaseCmd.Properties.TIMEZONE.getName()); + public String getResponse() { + UserAccount user = (UserAccount)getResponseObject(); - // Check the domainId - if (domainId == null) { - domainId = DomainVO.ROOT_DOMAIN; - } + // TODO: user keys? + UserResponse response = new UserResponse(); + response.setAccountName(user.getAccountName()); + response.setAccountType(user.getType()); + response.setCreated(user.getCreated()); + response.setDomainId(user.getDomainId()); + // TODO: implement +// response.setDomainName(user.getDomainName()); + response.setEmail(user.getEmail()); + response.setFirstname(user.getFirstname()); + response.setId(user.getId()); + response.setLastname(user.getLastname()); + response.setState(user.getState()); + response.setTimezone(user.getTimezone()); + response.setUsername(user.getUsername()); - //Verify if the account exists - if (accountName != null) { - Account account = getManagementServer().findActiveAccount(accountName, domainId); - if (account !=null) { - accountType = Long.valueOf((long)account.getType()); - } - } - else { - accountName = username; - } - - User createdUser = null; - try { - createdUser = getManagementServer().createUserAPI(username, password, firstname, lastname, domainId, accountName, accountType.shortValue(), email, timezone); - } catch (CloudRuntimeException ex) { - if (s_logger.isInfoEnabled()) { - s_logger.info("exception creating user: " + ex); - } - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, ex.getMessage()); - } - - if (createdUser == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "failed to create user"); - } else { - Account userAccount = getManagementServer().findAccountById(Long.valueOf(createdUser.getAccountId())); - if (userAccount != null) { - domainId = userAccount.getDomainId(); - accountName = userAccount.getAccountName(); - } - } - List> embeddedObject = new ArrayList>(); - List> returnValues = new ArrayList>(); - returnValues.add(new Pair(BaseCmd.Properties.ID.getName(), createdUser.getId().toString())); - returnValues.add(new Pair(BaseCmd.Properties.USERNAME.getName(), createdUser.getUsername())); - returnValues.add(new Pair(BaseCmd.Properties.FIRSTNAME.getName(), createdUser.getFirstname())); - returnValues.add(new Pair(BaseCmd.Properties.LASTNAME.getName(), createdUser.getLastname())); - returnValues.add(new Pair(BaseCmd.Properties.EMAIL.getName(), createdUser.getEmail())); - returnValues.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(createdUser.getCreated()))); - returnValues.add(new Pair(BaseCmd.Properties.STATE.getName(), createdUser.getState())); - returnValues.add(new Pair(BaseCmd.Properties.ACCOUNT.getName(), accountName)); - returnValues.add(new Pair(BaseCmd.Properties.ACCOUNT_TYPE.getName(), accountType)); - returnValues.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), domainId.toString())); - returnValues.add(new Pair(BaseCmd.Properties.DOMAIN.getName(), getManagementServer().findDomainIdById(domainId).getName())); - returnValues.add(new Pair(BaseCmd.Properties.TIMEZONE.getName(),createdUser.getTimezone())); - embeddedObject.add(new Pair("user", new Object[] { returnValues } )); - return embeddedObject; + return SerializerHelper.toSerializedString(response); } } \ No newline at end of file diff --git a/server/src/com/cloud/api/response/UserResponse.java b/server/src/com/cloud/api/response/UserResponse.java new file mode 100644 index 00000000000..f359da34e9e --- /dev/null +++ b/server/src/com/cloud/api/response/UserResponse.java @@ -0,0 +1,142 @@ +package com.cloud.api.response; + +import java.util.Date; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class UserResponse implements ResponseObject { + @Param(name="id") + private Long id; + + @Param(name="username") + private String username; + + @Param(name="firstname") + private String firstname; + + @Param(name="lastname") + private String lastname; + + @Param(name="email") + private String email; + + @Param(name="created") + private Date created; + + @Param(name="state") + private String state; + + @Param(name="account") + private String accountName; + + @Param(name="accounttype") + private Short accountType; + + @Param(name="domainid") + private Long domainId; + + @Param(name="domain") + private String domainName; + + @Param(name="timezone") + private String timezone; + + // TODO: user keys? + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public Short getAccountType() { + return accountType; + } + + public void setAccountType(Short accountType) { + this.accountType = accountType; + } + + public Long getDomainId() { + return domainId; + } + + public void setDomainId(Long domainId) { + this.domainId = domainId; + } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } +} diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 002ccd56814..0c1483b7d86 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -26,6 +26,7 @@ import com.cloud.alert.AlertVO; import com.cloud.api.commands.CreateDomainCmd; import com.cloud.api.commands.CreatePortForwardingServiceCmd; import com.cloud.api.commands.CreatePortForwardingServiceRuleCmd; +import com.cloud.api.commands.CreateUserCmd; import com.cloud.api.commands.DisassociateIPAddrCmd; import com.cloud.api.commands.EnableAccountCmd; import com.cloud.api.commands.EnableUserCmd; @@ -39,7 +40,6 @@ import com.cloud.api.commands.StartSystemVMCmd; import com.cloud.api.commands.StopSystemVmCmd; import com.cloud.api.commands.UpdateAccountCmd; import com.cloud.api.commands.UpdateDomainCmd; -import com.cloud.api.commands.UpdateTemplateCmd; import com.cloud.api.commands.UpdateTemplateOrIsoCmd; import com.cloud.api.commands.UpdateTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.UpdateUserCmd; @@ -58,7 +58,6 @@ import com.cloud.dc.VlanVO; import com.cloud.domain.DomainVO; import com.cloud.event.EventVO; import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.DiscoveryException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientStorageCapacityException; import com.cloud.exception.InternalErrorException; @@ -68,7 +67,6 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceInUseException; import com.cloud.exception.StorageUnavailableException; -import com.cloud.host.Host; import com.cloud.host.HostStats; import com.cloud.host.HostVO; import com.cloud.info.ConsoleProxyInfo; @@ -126,39 +124,14 @@ public interface ManagementServer { static final String Name = "management-server"; /** - * Creates a new user, encrypts the password on behalf of the caller - * - * @param username username - * @param password the user's password - * @param firstName the user's first name - * @param lastName the user's last name - * @param domain the id of the domain that this user belongs to - * @param accountName the name(a.k.a. id) of the account that this user belongs to - * @param timezone the user's current timezone (default: PST) - * @return a user object + * Creates a new user, stores the password as is so encrypted passwords are recommended. + * @param cmd the create command that has the username, email, password, account name, domain, timezone, etc. for creating the user. + * @return the user if created successfully, null otherwise */ - User createUser(String username, String password, String firstName, String lastName, Long domain, String accountName, short userType, String email, String timezone); -// boolean reconnect(long hostId); -// long reconnectAsync(long hostId); - - ClusterVO findClusterById(long clusterId); - List listClusterByPodId(long podId); - -// ClusterVO createCluster(long dcId, long podId, String name); + UserAccount createUser(CreateUserCmd cmd); - /** - * Creates a new user, does not encrypt the password - * - * @param username username - * @param password the user's password - * @param firstName the user's first name - * @param lastName the user's last name - * @param domain the id of the domain that this user belongs to FIXME: if we have account, do we also need domain? - * @param accountName the name(a.k.a. id) of the account that this user belongs to - * @param timezone the user's current timezone (default: PST) - * @return a user object - */ - User createUserAPI(String username, String password, String firstName, String lastName, Long domain, String accountName, short userType, String email, String timezone); + ClusterVO findClusterById(long clusterId); + List listClusterByPodId(long podId); /** * Gets a user by userId diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 86b1800261f..92659325a4a 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -63,6 +63,7 @@ import com.cloud.api.commands.CreateDomainCmd; import com.cloud.api.commands.CreatePortForwardingServiceCmd; import com.cloud.api.commands.CreatePortForwardingServiceRuleCmd; import com.cloud.api.commands.CreateTemplateCmd; +import com.cloud.api.commands.CreateUserCmd; import com.cloud.api.commands.CreateVolumeCmd; import com.cloud.api.commands.DeleteIsoCmd; import com.cloud.api.commands.DeleteTemplateCmd; @@ -572,8 +573,17 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public User createUserAPI(String username, String password, String firstName, String lastName, Long domainId, String accountName, short userType, String email, String timezone) { + public UserAccount createUser(CreateUserCmd cmd) { Long accountId = null; + String username = cmd.getUsername(); + String password = cmd.getPassword(); + String firstName = cmd.getFirstname(); + String lastName = cmd.getLastname(); + Long domainId = cmd.getDomainId(); + String email = cmd.getEmail(); + String timezone = cmd.getTimezone(); + String accountName = cmd.getAccountName(); + short userType = cmd.getAccountType().shortValue(); try { if (accountName == null) { accountName = username; @@ -715,11 +725,6 @@ public class ManagementServerImpl implements ManagementServer { return _asyncMgr.submitAsyncJob(job); } - @Override - public User createUser(String username, String password, String firstName, String lastName, Long domain, String accountName, short userType, String email, String timezone) { - return createUserAPI(username, StringToMD5(password), firstName, lastName, domain, accountName, userType, email, timezone); - } - @Override public String updateAdminPassword(long userId, String oldPassword, String newPassword) { // String old = StringToMD5(oldPassword);