Implement llSetContentType using the new OpenID auth support for authentication
parent
2332453974
commit
a8faed6f76
|
@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
public UUID urlcode;
|
public UUID urlcode;
|
||||||
public Dictionary<UUID, RequestData> requests;
|
public Dictionary<UUID, RequestData> requests;
|
||||||
public bool isSsl;
|
public bool isSsl;
|
||||||
|
public Scene scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RequestData
|
public class RequestData
|
||||||
|
@ -66,6 +67,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
public int startTime;
|
public int startTime;
|
||||||
public bool responseSent;
|
public bool responseSent;
|
||||||
public string uri;
|
public string uri;
|
||||||
|
public bool allowResponseType = false;
|
||||||
|
public UUID hostID;
|
||||||
|
public Scene scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -171,6 +175,17 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
|
|
||||||
public void RemoveRegion(Scene scene)
|
public void RemoveRegion(Scene scene)
|
||||||
{
|
{
|
||||||
|
// Drop references to that scene
|
||||||
|
foreach (KeyValuePair<string, UrlData> kvp in m_UrlMap)
|
||||||
|
{
|
||||||
|
if (kvp.Value.scene == scene)
|
||||||
|
kvp.Value.scene = null;
|
||||||
|
}
|
||||||
|
foreach (KeyValuePair<UUID, UrlData> kvp in m_RequestMap)
|
||||||
|
{
|
||||||
|
if (kvp.Value.scene == scene)
|
||||||
|
kvp.Value.scene = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
|
@ -198,6 +213,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
urlData.urlcode = urlcode;
|
urlData.urlcode = urlcode;
|
||||||
urlData.isSsl = false;
|
urlData.isSsl = false;
|
||||||
urlData.requests = new Dictionary<UUID, RequestData>();
|
urlData.requests = new Dictionary<UUID, RequestData>();
|
||||||
|
urlData.scene = host.ParentGroup.Scene;
|
||||||
|
|
||||||
m_UrlMap[url] = urlData;
|
m_UrlMap[url] = urlData;
|
||||||
|
|
||||||
|
@ -316,6 +332,11 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
if (!urlData.requests[request].responseSent)
|
if (!urlData.requests[request].responseSent)
|
||||||
{
|
{
|
||||||
string responseBody = body;
|
string responseBody = body;
|
||||||
|
|
||||||
|
// If we have no OpenID from built-in browser, disable this
|
||||||
|
if (!urlData.requests[request].allowResponseType)
|
||||||
|
urlData.requests[request].responseType = "text/plain";
|
||||||
|
|
||||||
if (urlData.requests[request].responseType.Equals("text/plain"))
|
if (urlData.requests[request].responseType.Equals("text/plain"))
|
||||||
{
|
{
|
||||||
string value;
|
string value;
|
||||||
|
@ -532,7 +553,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
//put response
|
//put response
|
||||||
response["int_response_code"] = requestData.responseCode;
|
response["int_response_code"] = requestData.responseCode;
|
||||||
response["str_response_string"] = requestData.responseBody;
|
response["str_response_string"] = requestData.responseBody;
|
||||||
response["content_type"] = "text/plain";
|
response["content_type"] = requestData.responseType;
|
||||||
response["keepalive"] = false;
|
response["keepalive"] = false;
|
||||||
response["reusecontext"] = false;
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
@ -600,6 +621,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
requestData.requestDone = false;
|
requestData.requestDone = false;
|
||||||
requestData.startTime = System.Environment.TickCount;
|
requestData.startTime = System.Environment.TickCount;
|
||||||
requestData.uri = uri;
|
requestData.uri = uri;
|
||||||
|
requestData.hostID = url.hostID;
|
||||||
|
requestData.scene = url.scene;
|
||||||
if (requestData.headers == null)
|
if (requestData.headers == null)
|
||||||
requestData.headers = new Dictionary<string, string>();
|
requestData.headers = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
@ -608,6 +631,32 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
string key = (string)header.Key;
|
string key = (string)header.Key;
|
||||||
string value = (string)header.Value;
|
string value = (string)header.Value;
|
||||||
requestData.headers.Add(key, value);
|
requestData.headers.Add(key, value);
|
||||||
|
if (key == "cookie")
|
||||||
|
{
|
||||||
|
string[] parts = value.Split(new char[] {'='});
|
||||||
|
if (parts[0] == "agni_sl_session_id" && parts.Length > 1)
|
||||||
|
{
|
||||||
|
string cookie = Uri.UnescapeDataString(parts[1]);
|
||||||
|
string[] crumbs = cookie.Split(new char[] {':'});
|
||||||
|
UUID owner;
|
||||||
|
if (crumbs.Length == 2 && UUID.TryParse(crumbs[0], out owner))
|
||||||
|
{
|
||||||
|
if (crumbs[1].Length == 32)
|
||||||
|
{
|
||||||
|
Scene scene = requestData.scene;
|
||||||
|
if (scene != null)
|
||||||
|
{
|
||||||
|
SceneObjectPart host = scene.GetSceneObjectPart(requestData.hostID);
|
||||||
|
if (host != null)
|
||||||
|
{
|
||||||
|
if (host.OwnerID == owner)
|
||||||
|
requestData.allowResponseType = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach (DictionaryEntry de in request)
|
foreach (DictionaryEntry de in request)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13386,6 +13386,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llSetContentType(LSL_Key id, LSL_Integer content_type)
|
||||||
|
{
|
||||||
|
if (m_UrlModule != null)
|
||||||
|
{
|
||||||
|
string type = "text.plain";
|
||||||
|
if (content_type == (int)ScriptBaseClass.CONTENT_TYPE_HTML)
|
||||||
|
type = "text/html";
|
||||||
|
|
||||||
|
m_UrlModule.HttpContentType(new UUID(id),type);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NotecardCache
|
public class NotecardCache
|
||||||
|
|
|
@ -434,5 +434,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void llSetKeyframedMotion(LSL_List frames, LSL_List options);
|
void llSetKeyframedMotion(LSL_List frames, LSL_List options);
|
||||||
LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
|
LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
|
||||||
LSL_List llGetPhysicsMaterial();
|
LSL_List llGetPhysicsMaterial();
|
||||||
|
void llSetContentType(LSL_Key id, LSL_Integer content_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -771,5 +771,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
/// process message parameter as regex
|
/// process message parameter as regex
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const int OS_LISTEN_REGEX_MESSAGE = 0x2;
|
public const int OS_LISTEN_REGEX_MESSAGE = 0x2;
|
||||||
|
|
||||||
|
public const int CONTENT_TYPE_TEXT = 0;
|
||||||
|
public const int CONTENT_TYPE_HTML = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2014,5 +2014,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
{
|
{
|
||||||
return m_LSL_Functions.llGetPhysicsMaterial();
|
return m_LSL_Functions.llGetPhysicsMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llSetContentType(LSL_Key id, LSL_Integer content_type)
|
||||||
|
{
|
||||||
|
m_LSL_Functions.llSetContentType(id, content_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue