Check agent permissions before modifying an object's materials. Also, when creating a Material asset, set the current agent as the Creator.

master-beforevarregion
Oren Hurvitz 2014-01-05 14:03:10 +02:00 committed by dahlia
parent 68d83425c6
commit d1f16c4b4b
1 changed files with 21 additions and 10 deletions

View File

@ -109,7 +109,10 @@ namespace OpenSim.Region.OptionalModules.Materials
string capsBase = "/CAPS/" + caps.CapsObjectPath; string capsBase = "/CAPS/" + caps.CapsObjectPath;
IRequestHandler renderMaterialsPostHandler IRequestHandler renderMaterialsPostHandler
= new RestStreamHandler("POST", capsBase + "/", RenderMaterialsPostCap, "RenderMaterials", null); = new RestStreamHandler("POST", capsBase + "/",
(request, path, param, httpRequest, httpResponse)
=> RenderMaterialsPostCap(request, agentID),
"RenderMaterials", null);
caps.RegisterHandler("RenderMaterials", renderMaterialsPostHandler); caps.RegisterHandler("RenderMaterials", renderMaterialsPostHandler);
// OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET // OpenSimulator CAPs infrastructure seems to be somewhat hostile towards any CAP that requires both GET
@ -117,12 +120,18 @@ namespace OpenSim.Region.OptionalModules.Materials
// handler normally and then add a GET handler via MainServer // handler normally and then add a GET handler via MainServer
IRequestHandler renderMaterialsGetHandler IRequestHandler renderMaterialsGetHandler
= new RestStreamHandler("GET", capsBase + "/", RenderMaterialsGetCap, "RenderMaterials", null); = new RestStreamHandler("GET", capsBase + "/",
(request, path, param, httpRequest, httpResponse)
=> RenderMaterialsGetCap(request),
"RenderMaterials", null);
MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler); MainServer.Instance.AddStreamHandler(renderMaterialsGetHandler);
// materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well // materials viewer seems to use either POST or PUT, so assign POST handler for PUT as well
IRequestHandler renderMaterialsPutHandler IRequestHandler renderMaterialsPutHandler
= new RestStreamHandler("PUT", capsBase + "/", RenderMaterialsPostCap, "RenderMaterials", null); = new RestStreamHandler("PUT", capsBase + "/",
(request, path, param, httpRequest, httpResponse)
=> RenderMaterialsPostCap(request, agentID),
"RenderMaterials", null);
MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler); MainServer.Instance.AddStreamHandler(renderMaterialsPutHandler);
} }
@ -195,9 +204,7 @@ namespace OpenSim.Region.OptionalModules.Materials
} }
} }
public string RenderMaterialsPostCap(string request, string path, public string RenderMaterialsPostCap(string request, UUID agentID)
string param, IOSHttpRequest httpRequest,
IOSHttpResponse httpResponse)
{ {
OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request);
OSDMap resp = new OSDMap(); OSDMap resp = new OSDMap();
@ -295,6 +302,12 @@ namespace OpenSim.Region.OptionalModules.Materials
continue; continue;
} }
if (!m_scene.Permissions.CanEditObject(sop.UUID, agentID))
{
m_log.WarnFormat("User {0} can't edit object {1} {2}", agentID, sop.Name, sop.UUID);
continue;
}
Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length); Primitive.TextureEntry te = new Primitive.TextureEntry(sop.Shape.TextureEntry, 0, sop.Shape.TextureEntry.Length);
if (te == null) if (te == null)
{ {
@ -326,7 +339,7 @@ namespace OpenSim.Region.OptionalModules.Materials
// This asset might exist already, but it's ok to try to store it again // This asset might exist already, but it's ok to try to store it again
string name = "Material " + ChooseMaterialName(mat, sop); string name = "Material " + ChooseMaterialName(mat, sop);
name = name.Substring(0, Math.Min(64, name.Length)).Trim(); name = name.Substring(0, Math.Min(64, name.Length)).Trim();
AssetBase asset = new AssetBase(id, name, (sbyte)OpenSimAssetType.Material, sop.OwnerID.ToString()); AssetBase asset = new AssetBase(id, name, (sbyte)OpenSimAssetType.Material, agentID.ToString());
asset.Data = data; asset.Data = data;
m_scene.AssetService.Store(asset); m_scene.AssetService.Store(asset);
} }
@ -422,9 +435,7 @@ namespace OpenSim.Region.OptionalModules.Materials
} }
public string RenderMaterialsGetCap(string request, string path, public string RenderMaterialsGetCap(string request)
string param, IOSHttpRequest httpRequest,
IOSHttpResponse httpResponse)
{ {
OSDMap resp = new OSDMap(); OSDMap resp = new OSDMap();
int matsCount = 0; int matsCount = 0;