public void Start(IConfigSource config, IRegistryCore registry)
{
m_connector = DataManager.DataManager.RequestPlugin<WebAPIConnector>();
if (m_connector == null || m_connector.Enabled == false || m_connector.Handler != Name)
{
return;
}
IConfig handlerConfig = config.Configs["Handlers"];
UUID.TryParse(handlerConfig.GetString("WebAPIAdminID", UUID.Zero.ToString()), out AdminAgentID);
if (m_connector.Handler != Name)
{
MainConsole.Instance.Warn("[WebAPI]: module not loaded");
return;
}
MainConsole.Instance.Info("[WebAPI]: module loaded");
m_registry = registry;
IConfig GridInfoConfig = config.Configs["GridInfoService"];
if (GridInfoConfig != null)
{
m_servernick = GridInfoConfig.GetString("gridnick", m_servernick);
}
m_GridInfo = new OSDMap();
if (GridInfoConfig != null && (GridInfoConfig.GetString("gridname", "") != "" && GridInfoConfig.GetString("gridnick", "") != ""))
{
foreach (string k in GridInfoConfig.GetKeys())
{
m_GridInfo[k] = GridInfoConfig.GetString(k);
}
}
ISimulationBase simBase = registry.RequestModuleInterface<ISimulationBase>();
m_server = simBase.GetHttpServer(handlerConfig.GetUInt(Name + "Port", m_connector.HandlerPort));
foreach (WebAPIHttpMethod method in Enum.GetValues(typeof(WebAPIHttpMethod)))
{
m_server.AddStreamHandler(new WebAPI_StreamHandler(this, method)); // This handler is for WebAPI methods that only read data
}
m_server2 = simBase.GetHttpServer(handlerConfig.GetUInt(Name + "TextureServerPort", m_connector.TexturePort));
m_server2.AddHTTPHandler("GridTexture", OnHTTPGetTextureImage);
m_GridInfo[Name + "TextureServer"] = m_server2.ServerURI;
m_authNonces = new ExpiringCache<string, string>();
MainConsole.Instance.Commands.AddCommand("webapi promote user", "Grants the specified user administrative powers within WebAPI.", "webapi promote user", PromoteUser);
MainConsole.Instance.Commands.AddCommand("webapi demote user", "Revokes administrative powers for WebAPI from the specified user.", "webapi demote user", DemoteUser);
MainConsole.Instance.Commands.AddCommand("webapi add group as news source", "Sets a group as a news source so in-world group notices can be used as a publishing tool for the website.", "webapi add group as news source", AddGroupAsNewsSource);
MainConsole.Instance.Commands.AddCommand("webapi remove group as news source", "Removes a group as a news source so it's notices will stop showing up on the news page.", "webapi remove group as news source", RemoveGroupAsNewsSource);
MainConsole.Instance.Commands.AddCommand("webapi list methods", "List API methods", "webapi list methods", ListAPImethods);
MainConsole.Instance.Commands.AddCommand("webapi get access token", "Gets the current access token to the API for the specified user", "webapi get access token", GetAccessToken);
MainConsole.Instance.Commands.AddCommand("webapi get new access token", "Gets a new access token to the API for the specified user", "webapi get new access token", GetNewAccessToken);
MainConsole.Instance.Commands.AddCommand("webapi clear log", "Clears the API access log", "webapi clear log [staleonly]", ClearLog);
MainConsole.Instance.Commands.AddCommand("webapi get usage rate", "Get the current usage rate for the specified user on the specified method.", "webapi get usage rate", GetUsageRate);
MainConsole.Instance.Commands.AddCommand("webapi grant access", "Grants access to a specified method for a specified user.", "webapi grant access [method]", GrantAPIAccess);
MainConsole.Instance.Commands.AddCommand("webapi revoke access", "Revokes access for a specified user.", "webapi revoke access", RevokeAPIAccess);
MainConsole.Instance.Commands.AddCommand("webapi reset access", "Resets access to defaults for a specified method for a specified user.", "webapi reset access", ResetAPIAccess);
}