private OSDMap CreateAccount(OSDMap map)
{
bool Verified = false;
string Name = map["Name"].AsString();
string PasswordHash = map["PasswordHash"].AsString();
//string PasswordSalt = map["PasswordSalt"].AsString();
string HomeRegion = map["HomeRegion"].AsString();
string Email = map["Email"].AsString();
string AvatarArchive = map["AvatarArchive"].AsString();
int userLevel = map["UserLevel"].AsInteger();
bool activationRequired = map.ContainsKey("ActivationRequired") ? map["ActivationRequired"].AsBoolean() : false;
IUserAccountService accountService = m_registry.RequestModuleInterface<IUserAccountService>();
if (accountService == null)
return null;
PasswordHash = PasswordHash.StartsWith("$1$") ? PasswordHash.Remove(0, 3) : Util.Md5Hash(PasswordHash); //remove $1$
accountService.CreateUser(Name, PasswordHash, Email);
UserAccount user = accountService.GetUserAccount(null, Name);
IAgentInfoService agentInfoService = m_registry.RequestModuleInterface<IAgentInfoService> ();
IGridService gridService = m_registry.RequestModuleInterface<IGridService> ();
if (agentInfoService != null && gridService != null)
{
UUID homeRegion;
GridRegion r = UUID.TryParse(HomeRegion, out homeRegion) ? gridService.GetRegionByUUID(null, homeRegion) : gridService.GetRegionByName (null, HomeRegion);
if (r != null)
{
agentInfoService.SetHomePosition(user.PrincipalID.ToString(), r.RegionID, new Vector3(r.RegionSizeX / 2, r.RegionSizeY / 2, 20), Vector3.Zero);
}
else
{
MainConsole.Instance.DebugFormat("[WebAPI]: Could not set home position for user {0}, region \"{1}\" did not produce a result from the grid service", user.PrincipalID.ToString(), HomeRegion);
}
}
Verified = user != null;
UUID userID = UUID.Zero;
OSDMap resp = new OSDMap();
resp["Verified"] = OSD.FromBoolean(Verified);
if (Verified)
{
userID = user.PrincipalID;
user.UserLevel = userLevel;
// could not find a way to save this data here.
DateTime RLDOB = map["RLDOB"].AsDate();
string RLFirstName = map["RLFirstName"].AsString();
string RLLastName = map["RLLastName"].AsString();
string RLAddress = map["RLAddress"].AsString();
string RLCity = map["RLCity"].AsString();
string RLZip = map["RLZip"].AsString();
string RLCountry = map["RLCountry"].AsString();
string RLIP = map["RLIP"].AsString();
IAgentConnector con = Aurora.DataManager.DataManager.RequestPlugin<IAgentConnector> ();
con.CreateNewAgent (userID);
IAgentInfo agent = con.GetAgent (userID);
agent.OtherAgentInformation["RLDOB"] = RLDOB;
agent.OtherAgentInformation["RLFirstName"] = RLFirstName;
agent.OtherAgentInformation["RLLastName"] = RLLastName;
agent.OtherAgentInformation["RLAddress"] = RLAddress;
agent.OtherAgentInformation["RLCity"] = RLCity;
agent.OtherAgentInformation["RLZip"] = RLZip;
agent.OtherAgentInformation["RLCountry"] = RLCountry;
agent.OtherAgentInformation["RLIP"] = RLIP;
if (activationRequired)
{
UUID activationToken = UUID.Random();
agent.OtherAgentInformation["WebUIActivationToken"] = Util.Md5Hash(activationToken.ToString() + ":" + PasswordHash);
resp["WebUIActivationToken"] = activationToken;
}
con.UpdateAgent (agent);
accountService.StoreUserAccount(user);
IProfileConnector profileData = Aurora.DataManager.DataManager.RequestPlugin<IProfileConnector>();
IUserProfileInfo profile = profileData.GetUserProfile(user.PrincipalID);
if (profile == null)
{
profileData.CreateNewProfile(user.PrincipalID);
profile = profileData.GetUserProfile(user.PrincipalID);
}
if (AvatarArchive.Length > 0)
profile.AArchiveName = AvatarArchive + ".database";
profile.IsNewUser = true;
profileData.UpdateUserProfile(profile);
}
resp["UUID"] = OSD.FromUUID(userID);
return resp;
}