public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt) { // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID); // Remove the session to mark this user offline if (!LogoutAgent(sessionID)) { return(false); } // Save our last position as user data NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddUserData" }, { "UserID", userID.ToString() }, { "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to set last location for " + userID + ": " + response["Message"].AsString()); } return(success); }
// <summary> // </summary> // <param name=""></param> public bool SetAppearance(UUID userID, AvatarAppearance appearance) { OSDMap map = appearance.Pack(); if (map == null) { m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to encode appearance for {0}", userID); return(false); } // m_log.DebugFormat("[SIMIAN AVATAR CONNECTOR] save appearance for {0}",userID); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddUserData" }, { "UserID", userID.ToString() }, { "LLPackedAppearance", OSDParser.SerializeJsonString(map) } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to save appearance for {0}: {1}", userID, response["Message"].AsString()); } return(success); }
public PresenceInfo[] GetAgents(string[] userIDs) { List <PresenceInfo> presences = new List <PresenceInfo>(); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetSessions" }, { "UserIDList", String.Join(",", userIDs) } }; OSDMap sessionListResponse = SimianGrid.PostToService(m_serverUrl, requestArgs); if (!sessionListResponse["Success"].AsBoolean()) { m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve sessions: {0}", sessionListResponse["Message"].AsString()); return(null); } OSDArray sessionList = sessionListResponse["Sessions"] as OSDArray; for (int i = 0; i < sessionList.Count; i++) { OSDMap sessionInfo = sessionList[i] as OSDMap; presences.Add(ResponseToPresenceInfo(sessionInfo)); } return(presences.ToArray()); }
/// <summary> /// Helper method for the various ways of retrieving a user account /// </summary> /// <param name="requestArgs">Service query parameters</param> /// <returns>A UserAccount object on success, null on failure</returns> private UserAccount GetUser(NameValueCollection requestArgs) { string lookupValue = (requestArgs.Count > 1) ? requestArgs[1] : "(Unknown)"; // m_log.DebugFormat("[SIMIAN ACCOUNT CONNECTOR]: Looking up user account with query: " + lookupValue); OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { OSDMap user = response["User"] as OSDMap; if (user != null) { return(ResponseToUserAccount(user)); } else { m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Account search failed, response data was in an invalid format"); } } else { m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to lookup user account with query: " + lookupValue); } return(null); }
public List <GridRegion> GetHyperlinks(UUID scopeID) { List <GridRegion> foundRegions = new List <GridRegion>(); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetScenes" }, { "HyperGrid", "true" }, { "Enabled", "1" } }; OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs); if (response["Success"].AsBoolean()) { // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] found regions with name {0}",name); OSDArray array = response["Scenes"] as OSDArray; if (array != null) { for (int i = 0; i < array.Count; i++) { GridRegion region = ResponseToGridRegion(array[i] as OSDMap); if (region != null) { foundRegions.Add(region); } } } } return(foundRegions); }
public bool Delete(string principalID, string friend) { if (String.IsNullOrEmpty(m_serverUrl)) { return(true); } NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "RemoveGeneric" }, { "OwnerID", principalID.ToString() }, { "Type", "Friend" }, { "Key", friend } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.Error("[SIMIAN FRIENDS CONNECTOR]: Failed to remove friend " + friend + " for user " + principalID + ": " + response["Message"].AsString()); } return(success); }
public bool LoginAgent(string userID, UUID sessionID, UUID secureSessionID) { m_log.ErrorFormat("[SIMIAN PRESENCE CONNECTOR]: Login requested, UserID={0}, SessionID={1}, SecureSessionID={2}", userID, sessionID, secureSessionID); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddSession" }, { "UserID", userID.ToString() } }; if (sessionID != UUID.Zero) { requestArgs["SessionID"] = sessionID.ToString(); requestArgs["SecureSessionID"] = secureSessionID.ToString(); } OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to login agent " + userID + ": " + response["Message"].AsString()); } return(success); }
/// <summary> /// Invokes the xRemoveAsset operation on the simian server to delete an asset /// </summary> /// <param name="id"></param> /// <returns></returns> private bool SimianDeleteOperation(string id) { try { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "xRemoveAsset" }, { "AssetID", id } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (!response["Success"].AsBoolean()) { m_log.WarnFormat("[SIMIAN ASSET CONNECTOR]: failed to delete asset; {0}", response["Message"].AsString()); return(false); } return(true); } catch (Exception ex) { m_log.WarnFormat("[SIMIAN ASSET CONNECTOR]: failed to delete asset {0}; {1}", id, ex.Message); } return(false); }
// <summary> // Retrieves the LLPackedAppearance field from user data and unpacks // it into an AvatarAppearance structure // </summary> // <param name="userID"></param> public AvatarAppearance GetAppearance(UUID userID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetUser" }, { "UserID", userID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { OSDMap map = null; try { map = OSDParser.DeserializeJson(response["LLPackedAppearance"].AsString()) as OSDMap; } catch { } if (map != null) { AvatarAppearance appearance = new AvatarAppearance(map); // DEBUG ON m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR] retrieved appearance for {0}:\n{1}", userID, appearance.ToString()); // DEBUG OFF return(appearance); } m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to decode appearance for {0}", userID); return(null); } m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to get appearance for {0}: {1}", userID, response["Message"].AsString()); return(null); }
/// <summary> /// Delete an item from the user's inventory /// </summary> /// <param name="item"></param> /// <returns>true if the item was successfully deleted</returns> public bool DeleteItems(UUID userID, List <UUID> itemIDs) { // TODO: RemoveInventoryNode should be replaced with RemoveInventoryNodes bool allSuccess = true; for (int i = 0; i < itemIDs.Count; i++) { UUID itemID = itemIDs[i]; NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "RemoveInventoryNode" }, { "OwnerID", userID.ToString() }, { "ItemID", itemID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Error removing item " + itemID + " for " + userID + ": " + response["Message"].AsString()); allSuccess = false; } } return(allSuccess); }
///<summary> /// ///</summary> private void ConvertAndUploadMaptile(Image mapTile, uint locX, uint locY) { //m_log.DebugFormat("[SIMIAN MAPTILE]: upload maptile for location {0}, {1}", locX, locY); byte[] pngData = Utils.EmptyBytes; using (MemoryStream stream = new MemoryStream()) { mapTile.Save(stream, ImageFormat.Png); pngData = stream.ToArray(); } NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "xAddMapTile" }, { "X", locX.ToString() }, { "Y", locY.ToString() }, { "ContentType", "image/png" }, { "EncodedData", System.Convert.ToBase64String(pngData) } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (!response["Success"].AsBoolean()) { m_log.WarnFormat("[SIMIAN MAPTILE] failed to store map tile; {0}", response["Message"].AsString()); } }
/// <summary> /// Get a folder, given by its UUID /// </summary> /// <param name="folder"></param> /// <returns></returns> public InventoryFolderBase GetFolder(InventoryFolderBase folder) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, { "ItemID", folder.ID.ToString() }, { "OwnerID", folder.Owner.ToString() }, { "IncludeFolders", "1" }, { "IncludeItems", "0" }, { "ChildrenOnly", "1" } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["Items"] is OSDArray) { OSDArray items = (OSDArray)response["Items"]; List <InventoryFolderBase> folders = GetFoldersFromResponse(items, folder.ID, true); if (folders.Count > 0) { return(folders[0]); } } return(null); }
/// <summary> /// Gets the items inside a folder /// </summary> /// <param name="userID"></param> /// <param name="folderID"></param> /// <returns></returns> public List <InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) { InventoryCollection inventory = new InventoryCollection(); inventory.UserID = userID; NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, { "ItemID", folderID.ToString() }, { "OwnerID", userID.ToString() }, { "IncludeFolders", "0" }, { "IncludeItems", "1" }, { "ChildrenOnly", "1" } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["Items"] is OSDArray) { OSDArray items = (OSDArray)response["Items"]; return(GetItemsFromResponse(items)); } else { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Error fetching folder " + folderID + " for " + userID + ": " + response["Message"].AsString()); return(new List <InventoryItemBase>(0)); } }
/// <summary> /// Get an item, given by its UUID /// </summary> /// <param name="item"></param> /// <returns></returns> public InventoryItemBase GetItem(InventoryItemBase item) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, { "ItemID", item.ID.ToString() }, { "OwnerID", item.Owner.ToString() }, { "IncludeFolders", "1" }, { "IncludeItems", "1" }, { "ChildrenOnly", "1" } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["Items"] is OSDArray) { List <InventoryItemBase> items = GetItemsFromResponse((OSDArray)response["Items"]); if (items.Count > 0) { // The requested item should be the first in this list, but loop through // and sanity check just in case for (int i = 0; i < items.Count; i++) { if (items[i].ID == item.ID) { return(items[i]); } } } } m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + item.ID + " owned by " + item.Owner + " not found"); return(null); }
/// <summary> /// Gets the user folder for the given folder-type /// </summary> /// <param name="userID"></param> /// <param name="type"></param> /// <returns></returns> public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) { string contentType = SLUtil.SLAssetTypeToContentType((int)type); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetFolderForType" }, { "ContentType", contentType }, { "OwnerID", userID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["Folder"] is OSDMap) { OSDMap folder = (OSDMap)response["Folder"]; return(new InventoryFolderBase( folder["ID"].AsUUID(), folder["Name"].AsString(), folder["OwnerID"].AsUUID(), (short)SLUtil.ContentTypeToSLAssetType(folder["ContentType"].AsString()), folder["ParentID"].AsUUID(), (ushort)folder["Version"].AsInteger() )); } else { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Default folder not found for content type " + contentType + ": " + response["Message"].AsString()); return(GetRootFolder(userID)); } }
/// <summary> /// Gets the skeleton of the inventory -- folders only /// </summary> /// <param name="userID"></param> /// <returns></returns> public List <InventoryFolderBase> GetInventorySkeleton(UUID userID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetInventoryNode" }, { "ItemID", userID.ToString() }, { "OwnerID", userID.ToString() }, { "IncludeFolders", "1" }, { "IncludeItems", "0" }, { "ChildrenOnly", "0" } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["Items"] is OSDArray) { OSDArray items = (OSDArray)response["Items"]; return(GetFoldersFromResponse(items, userID, true)); } else { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to retrieve inventory skeleton for " + userID + ": " + response["Message"].AsString()); return(new List <InventoryFolderBase>(0)); } }
public int GetRegionFlags(UUID scopeID, UUID regionID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetScene" }, { "SceneID", regionID.ToString() } }; m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request region flags for {0}", regionID.ToString()); OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs); if (response["Success"].AsBoolean()) { OSDMap extraData = response["ExtraData"] as OSDMap; int enabled = response["Enabled"].AsBoolean() ? (int)OpenSim.Framework.RegionFlags.RegionOnline : 0; int hypergrid = extraData["HyperGrid"].AsBoolean() ? (int)OpenSim.Framework.RegionFlags.Hyperlink : 0; int flags = enabled | hypergrid; m_log.DebugFormat("[SGGC] enabled - {0} hg - {1} flags - {2}", enabled, hypergrid, flags); return(flags); } else { m_log.Warn("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region " + regionID + " during region flags check"); return(-1); } }
private bool MoveItems(UUID ownerID, List <InventoryItemBase> items, UUID destFolderID) { string[] itemIDs = new string[items.Count]; for (int i = 0; i < items.Count; i++) { itemIDs[i] = items[i].ID.ToString(); } NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "MoveInventoryNodes" }, { "OwnerID", ownerID.ToString() }, { "FolderID", destFolderID.ToString() }, { "Items", String.Join(",", itemIDs) } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to move " + items.Count + " items to " + destFolderID + ": " + response["Message"].AsString()); } return(success); }
private GridRegion GetNearestRegion(Vector3d position, bool onlyEnabled) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetScene" }, { "Position", position.ToString() }, { "FindClosest", "1" } }; if (onlyEnabled) { requestArgs["Enabled"] = "1"; } OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs); if (response["Success"].AsBoolean()) { return(ResponseToGridRegion(response)); } else { m_log.Warn("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region at " + position); return(null); } }
private OSDArray FetchGestures(UUID userID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetUser" }, { "UserID", userID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs); if (response["Success"].AsBoolean()) { OSDMap user = response["User"] as OSDMap; if (user != null && response.ContainsKey("Gestures")) { OSD gestures = OSDParser.DeserializeJson(response["Gestures"].AsString()); if (gestures != null && gestures is OSDArray) { return((OSDArray)gestures); } else { m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Unrecognized active gestures data for " + userID); } } } else { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to fetch active gestures for " + userID + ": " + response["Message"].AsString()); } return(new OSDArray()); }
/// <summary> /// Invokes the xAddAsset operation on the simian server to create or update an asset /// </summary> /// <param name="id"></param> /// <returns></returns> private string SimianStoreOperation(AssetBase asset) { try { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "xAddAsset" }, { "ContentType", asset.Metadata.ContentType }, { "EncodedData", Convert.ToBase64String(asset.Data) }, { "AssetID", asset.FullID.ToString() }, { "CreatorID", asset.Metadata.CreatorID }, { "Temporary", asset.Temporary ? "1" : "0" }, { "Name", asset.Name } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (!response["Success"].AsBoolean()) { m_log.WarnFormat("[SIMIAN ASSET CONNECTOR] failed to store asset; {0}", response["Message"].AsString()); return(null); } // asset.ID is always set before calling this function return(asset.ID); } catch (Exception ex) { m_log.ErrorFormat("[SIMIAN ASSET CONNECTOR] failed to store asset; {0}", ex.Message); } return(null); }
public GridRegion GetRegionByPosition(UUID scopeID, int x, int y) { // Go one meter in from the requested x/y coords to avoid requesting a position // that falls on the border of two sims Vector3d position = new Vector3d(x + 1, y + 1, 0.0); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetScene" }, { "Position", position.ToString() }, { "Enabled", "1" } }; // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request grid at {0}",position.ToString()); OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs); if (response["Success"].AsBoolean()) { // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] position request successful {0}",response["Name"].AsString()); return(ResponseToGridRegion(response)); } else { // m_log.InfoFormat("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region at {0},{1}", // Util.WorldToRegionLoc(x), Util.WorldToRegionLoc(y)); return(null); } }
public string RegisterRegion(UUID scopeID, GridRegion regionInfo) { IPEndPoint ext = regionInfo.ExternalEndPoint; if (ext == null) { return("Region registration for " + regionInfo.RegionName + " failed: Could not resolve EndPoint"); } // Generate and upload our map tile in PNG format to the SimianGrid AddMapTile service // Scene scene; // if (m_scenes.TryGetValue(regionInfo.RegionID, out scene)) // UploadMapTile(scene); // else // m_log.Warn("Registering region " + regionInfo.RegionName + " (" + regionInfo.RegionID + ") that we are not tracking"); Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0); Vector3d maxPosition = minPosition + new Vector3d(regionInfo.RegionSizeX, regionInfo.RegionSizeY, Constants.RegionHeight); OSDMap extraData = new OSDMap { { "ServerURI", OSD.FromString(regionInfo.ServerURI) }, { "InternalAddress", OSD.FromString(regionInfo.InternalEndPoint.Address.ToString()) }, { "InternalPort", OSD.FromInteger(regionInfo.InternalEndPoint.Port) }, { "ExternalAddress", OSD.FromString(ext.Address.ToString()) }, { "ExternalPort", OSD.FromInteger(regionInfo.ExternalEndPoint.Port) }, { "MapTexture", OSD.FromUUID(regionInfo.TerrainImage) }, { "Access", OSD.FromInteger(regionInfo.Access) }, { "RegionSecret", OSD.FromString(regionInfo.RegionSecret) }, { "EstateOwner", OSD.FromUUID(regionInfo.EstateOwner) }, { "Token", OSD.FromString(regionInfo.Token) } }; NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddScene" }, { "SceneID", regionInfo.RegionID.ToString() }, { "Name", regionInfo.RegionName }, { "MinPosition", minPosition.ToString() }, { "MaxPosition", maxPosition.ToString() }, { "Address", regionInfo.ServerURI }, { "Enabled", "1" }, { "ExtraData", OSDParser.SerializeJsonString(extraData) } }; OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs); if (response["Success"].AsBoolean()) { return(String.Empty); } else { return("Region registration for " + regionInfo.RegionName + " failed: " + response["Message"].AsString()); } }
public bool StoreUserAccount(UserAccount data) { // m_log.InfoFormat("[SIMIAN ACCOUNT CONNECTOR]: Storing user account for " + data.Name); NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddUser" }, { "UserID", data.PrincipalID.ToString() }, { "Name", data.Name }, { "Email", data.Email }, { "AccessLevel", data.UserLevel.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { m_log.InfoFormat("[SIMIAN ACCOUNT CONNECTOR]: Storing user account data for " + data.Name); requestArgs = new NameValueCollection { { "RequestMethod", "AddUserData" }, { "UserID", data.PrincipalID.ToString() }, { "CreationDate", data.Created.ToString() }, { "UserFlags", data.UserFlags.ToString() }, { "UserTitle", data.UserTitle } }; response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (success) { // Cache the user account info m_accountCache.AddOrUpdate(data.PrincipalID, data, CACHE_EXPIRATION_SECONDS); } else { m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to store user account data for " + data.Name + ": " + response["Message"].AsString()); } return(success); } else { m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to store user account for " + data.Name + ": " + response["Message"].AsString()); } return(false); }
public bool SetPassword(UUID principalID, string passwd) { // Fetch the user name first NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetUser" }, { "UserID", principalID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["User"] is OSDMap) { OSDMap userMap = (OSDMap)response["User"]; string identifier = userMap["Name"].AsString(); if (!String.IsNullOrEmpty(identifier)) { // Add/update the md5hash identity // TODO: Support salts when AddIdentity does // TODO: Create an a1hash too for WebDAV logins requestArgs = new NameValueCollection { { "RequestMethod", "AddIdentity" }, { "Identifier", identifier }, { "Credential", "$1$" + Utils.MD5String(passwd) }, { "Type", "md5hash" }, { "UserID", principalID.ToString() } }; response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.WarnFormat("[SIMIAN AUTH CONNECTOR]: Failed to set password for {0} ({1})", identifier, principalID); } return(success); } } else { m_log.Warn("[SIMIAN AUTH CONNECTOR]: Failed to retrieve identities for " + principalID + ": " + response["Message"].AsString()); } return(false); }
public string Authenticate(UUID principalID, string password, int lifetime) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetIdentities" }, { "UserID", principalID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean() && response["Identities"] is OSDArray) { bool md5hashFound = false; OSDArray identities = (OSDArray)response["Identities"]; for (int i = 0; i < identities.Count; i++) { OSDMap identity = identities[i] as OSDMap; if (identity != null) { if (identity["Type"].AsString() == "md5hash") { string authorizeResult; if (CheckPassword(principalID, password, identity["Credential"].AsString(), out authorizeResult)) { return(authorizeResult); } md5hashFound = true; break; } } } if (!md5hashFound) { m_log.Warn("[SIMIAN AUTH CONNECTOR]: Authentication failed for " + principalID + ", no md5hash identity found"); } } else { m_log.Warn("[SIMIAN AUTH CONNECTOR]: Failed to retrieve identities for " + principalID + ": " + response["Message"].AsString()); } return(String.Empty); }
private void SaveGestures(UUID userID, OSDArray gestures) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddUserData" }, { "UserID", userID.ToString() }, { "Gestures", OSDParser.SerializeJsonString(gestures) } }; OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs); if (!response["Success"].AsBoolean()) { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to save active gestures for " + userID + ": " + response["Message"].AsString()); } }
private OSDMap GetSessionDataFromSessionID(UUID sessionID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "GetSession" }, { "SessionID", sessionID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (response["Success"].AsBoolean()) { return(response); } m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session data for {0}; {1}", sessionID.ToString(), response["Message"].AsString()); return(null); }
/// <summary> /// Create the entire inventory for a given user /// </summary> /// <param name="user"></param> /// <returns></returns> public bool CreateUserInventory(UUID userID) { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddInventory" }, { "OwnerID", userID.ToString() } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); bool success = response["Success"].AsBoolean(); if (!success) { m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Inventory creation for " + userID + " failed: " + response["Message"].AsString()); } return(success); }
/// <summary> /// Invokes the xGetAssetMetadata operation on the simian server to retrieve metadata for an asset /// This operation is generally used to determine if an asset exists in the database /// </summary> /// <param name="id"></param> /// <returns></returns> private AssetMetadata SimianGetMetadataOperation(string id) { try { NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "xGetAssetMetadata" }, { "ID", id } }; OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs); if (!response["Success"].AsBoolean()) { // this is not really an error, this call is used to test existence // m_log.DebugFormat("[SIMIAN ASSET CONNECTOR] Failed to get asset metadata; {0}",response["Message"].AsString()); return(null); } AssetMetadata metadata = new AssetMetadata(); metadata.ID = id; metadata.ContentType = response["ContentType"].AsString(); metadata.CreatorID = response["CreatorID"].AsString(); metadata.Local = false; metadata.Temporary = response["Temporary"]; string lastModifiedStr = response["Last-Modified"].AsString(); if (!String.IsNullOrEmpty(lastModifiedStr)) { DateTime lastModified; if (DateTime.TryParse(lastModifiedStr, out lastModified)) { metadata.CreationDate = lastModified; } } return(metadata); } catch (Exception ex) { m_log.WarnFormat("[SIMIAN ASSET CONNECTOR]: Failed to get asset metadata; {0}", ex.Message); } return(null); }