GetLanguageInfo() 공개 정적인 메소드

Parses the parameters of HTTP header Accept-Language.
public static GetLanguageInfo ( string acceptLanguage ) : System.Globalization.CultureInfo[]
acceptLanguage string The value of HTTP header Accept-Language
리턴 System.Globalization.CultureInfo[]
예제 #1
0
        public static Request CreateRequest(string resource, IOSHttpRequest httpRequest)
        {
            Request request = new Request();

            request.Resource     = resource;
            request.Cookies      = httpRequest.Cookies;
            request.IPEndPoint   = httpRequest.RemoteIPEndPoint;
            request.Query        = httpRequest.Query;
            request.LanguageInfo = Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language"));

            return(request);
        }
예제 #2
0
        private byte[] CreateAccount(string resource, IOSHttpRequest httpRequest, Dictionary <string, object> request)
        {
            string first     = String.Empty;
            string last      = String.Empty;
            string email     = String.Empty;
            string password  = String.Empty;
            string password2 = String.Empty;
            string avatar    = string.Empty;

            if (request.ContainsKey("first") && WebAppUtils.IsValidName(request["first"].ToString()))
            {
                first = request["first"].ToString();
            }
            if (request.ContainsKey("last") && WebAppUtils.IsValidName(request["last"].ToString()))
            {
                last = request["last"].ToString();
            }
            if (request.ContainsKey("email") && WebAppUtils.IsValidEmail(request["email"].ToString()))
            {
                email = request["email"].ToString();
            }
            if (request.ContainsKey("password"))
            {
                password = request["password"].ToString();
            }
            if (request.ContainsKey("password2"))
            {
                password2 = request["password2"].ToString();
            }
            if (request.ContainsKey("avatar"))
            {
                avatar = request["avatar"].ToString();
            }

            Request     req = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env = new Environment(req);

            string result = m_WebApp.Services.NewAccountPostRequest(env, first, last, email, password, password2, avatar);

            return(WebAppUtils.StringToBytes(result));
        }
예제 #3
0
        byte[] LoginAgent(string resource, IOSHttpRequest httpRequest, Dictionary <string, object> request)
        {
            string first    = String.Empty;
            string last     = String.Empty;
            string password = String.Empty;

            if (!request.ContainsKey("firstname") || !request.ContainsKey("lastname") || !request.ContainsKey("password"))
            {
                return(WebAppUtils.FailureResult());
            }

            first    = request["firstname"].ToString();
            last     = request["lastname"].ToString();
            password = request["password"].ToString();

            Request     req = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env = new Environment(req);

            string result = m_WebApp.Services.LoginRequest(env, first, last, password);

            return(WebAppUtils.StringToBytes(result));
        }
예제 #4
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);
            //m_log.DebugFormat("[Wifi]: ip address = {0}", httpRequest.RemoteIPEndPoint);
            //foreach (object o in httpRequest.Query.Keys)
            //    m_log.DebugFormat("  >> {0}={1}", o, httpRequest.Query[o]);

            string resource = GetParam(path);

            //m_log.DebugFormat("[Wifi]: resource {0}", resource);
            resource = Uri.UnescapeDataString(resource).Trim(WebAppUtils.DirectorySeparatorChars);

            Request     request = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            if (resource == string.Empty || resource.StartsWith("index."))
            {
                if (m_WebApp.StatisticsUpdateInterval != TimeSpan.Zero)
                {
                    m_WebApp.Services.ComputeStatistics();
                }

                httpResponse.ContentType = "text/html";

                return(WebAppUtils.StringToBytes(m_WebApp.Services.DefaultRequest(env)));
            }
            else
            {
                string resourcePath = System.IO.Path.Combine(WebApp.DocsPath, resource);
                string type         = WebAppUtils.GetContentType(resource);
                httpResponse.ContentType = type;
                //m_log.DebugFormat("[Wifi]: ContentType {0}", type);
                if (type.StartsWith("image"))
                {
                    return(WebAppUtils.ReadBinaryResource(resourcePath));
                }

                if (type.StartsWith("application"))
                {
                    string res = WebAppUtils.ReadTextResource(resourcePath, true);
                    return(WebAppUtils.StringToBytes(res));
                }
                if (type.StartsWith("text"))
                {
                    if (m_WebApp.StatisticsUpdateInterval != TimeSpan.Zero)
                    {
                        m_WebApp.Services.ComputeStatistics();
                    }

                    resourcePath = Localization.LocalizePath(env, resource);
                    Processor p   = new Processor(m_WebApp.WifiScriptFace, env);
                    string    res = p.Process(WebAppUtils.ReadTextResource(resourcePath));
                    if (res == string.Empty)
                    {
                        res = m_WebApp.Services.DefaultRequest(env);
                    }
                    return(WebAppUtils.StringToBytes(res));
                }
            }

            httpResponse.ContentType = "text/plain";
            string result = "Boo!";

            return(WebAppUtils.StringToBytes(result));
        }
예제 #5
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            try
            {
                Dictionary <string, object> request =
                    ServerUtils.ParseQueryString(body);

                string password  = String.Empty;
                string password2 = String.Empty;

                if (request.ContainsKey("password"))
                {
                    password = request["password"].ToString();
                }
                if (request.ContainsKey("password2"))
                {
                    password2 = request["password2"].ToString();
                }

                Request     req = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env = new Environment(req);

                string result = m_WebApp.Services.InstallPostRequest(env, password, password2);

                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[USER ACCOUNT POST HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #6
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);
            //m_log.DebugFormat("[Wifi]: ip address = {0}", httpRequest.RemoteIPEndPoint);
            //foreach (object o in httpRequest.Query.Keys)
            //    m_log.DebugFormat("  >> {0}={1}", o, httpRequest.Query[o]);
            httpResponse.ContentType = "text/html";
            string resource = GetParam(path);
            //m_log.DebugFormat("[INVENTORY HANDLER POST]: resource {0}", resource);

            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();
            Dictionary <string, object> postdata =
                ServerUtils.ParseQueryString(body);

            Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string action = postdata.Keys.FirstOrDefault(key => key.StartsWith("action-"));

            if (action == null)
            {
                action = string.Empty;
            }
            else
            {
                action = action.Substring("action-".Length);
            }

            string userID    = string.Empty;
            string sessionID = string.Empty;

            if (postdata.ContainsKey("uid"))
            {
                userID = postdata["uid"].ToString();
            }
            if (postdata.ContainsKey("sid"))
            {
                sessionID = postdata["sid"].ToString();
            }

            return(WebAppUtils.StringToBytes(m_WebApp.Services.TOSPostRequest(env, action, userID, sessionID)));
        }
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);

            // This is the content type of the response. Don't forget to set it to this in all your handlers.
            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);
            //m_log.DebugFormat("[XXX]: resource {0}", resource);
            Request     request = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = string.Empty;

            if (resource.Equals("/") || resource.Equals(string.Empty))
            {
                // client invoked /wifi/admin/users/ with no further parameters
                result = m_WebApp.Services.RegionManagementGetRequest(env);
            }

            return(WebAppUtils.StringToBytes(result));
        }
예제 #8
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);

            // This is the content type of the response. Don't forget to set it to this in all your handlers.
            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);
            //m_log.DebugFormat("[XXX]: resource {0}", resource);
            Request     request = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = string.Empty;

            if (resource.StartsWith("/edit"))
            {
                // client invoked /wifi/admin/users/edit, possibly with the UUID parameter after
                UUID userID = UUID.Zero;
                // SplitParams(path) returns an array of whatever parameters come after the path.
                // In this case it should return "edit" and "<uuid>"; we want "<uuid>", so [1]
                string[] pars = SplitParams(path);
                if (pars.Length >= 2)
                {
                    // indeed, client invoked /wifi/admin/users/edit/<uuid>
                    // let's grab that uuid
                    UUID.TryParse(pars[1], out userID);
                    result = m_WebApp.Services.UserEditGetRequest(env, userID);
                }
            }
            else if (resource.StartsWith("/delete"))
            {
                // client invoked /wifi/admin/users/delete, possibly with the UUID parameter after
                UUID userID = UUID.Zero;
                // SplitParams(path) returns an array of whatever parameters come after the path.
                // In this case it should return "delete" and "<uuid>"; we want "<uuid>", so [1]
                string[] pars = SplitParams(path);
                if (pars.Length >= 2)
                {
                    // indeed, client invoked /wifi/admin/users/delete/<uuid>
                    // let's grab that uuid
                    UUID.TryParse(pars[1], out userID);
                    result = m_WebApp.Services.UserDeleteGetRequest(env, userID);
                }
            }
            else if (resource.StartsWith("/activate"))
            {
                // client invoked /wifi/admin/users/activate, possibly with the UUID parameter after
                UUID userID = UUID.Zero;

                string[] pars = SplitParams(path);
                if (pars.Length >= 2)
                {
                    // indeed, client invoked /wifi/admin/users/activate/<uuid>
                    // let's grab that uuid
                    UUID.TryParse(pars[1], out userID);
                    result = m_WebApp.Services.UserActivateGetRequest(env, userID);
                }
            }

            if (string.IsNullOrEmpty(result))
            {
                result = m_WebApp.Services.UserManagementGetRequest(env);
            }

            return(WebAppUtils.StringToBytes(result));
        }
예제 #9
0
        private byte[] UpdateAccount(string resource, IOSHttpRequest httpRequest, UUID userID, Dictionary <string, object> request)
        {
            try
            {
                string email        = String.Empty;
                string oldpassword  = String.Empty;
                string newpassword  = String.Empty;
                string newpassword2 = String.Empty;

                if (request.ContainsKey("email") && WebAppUtils.IsValidEmail(request["email"].ToString()))
                {
                    email = request["email"].ToString();
                }
                if (request.ContainsKey("oldpassword"))
                {
                    oldpassword = request["oldpassword"].ToString();
                }
                if (request.ContainsKey("newpassword"))
                {
                    newpassword = request["newpassword"].ToString();
                }
                if (request.ContainsKey("newpassword2"))
                {
                    newpassword2 = request["newpassword2"].ToString();
                }

                Request     req = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env = new Environment(req);

                string result = m_WebApp.Services.UserAccountPostRequest(env, userID, email, oldpassword, newpassword, newpassword2);

                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                Util.PrintCallStack();
                m_log.DebugFormat("[USER ACCOUNT POST HANDLER]: Exception {0}", e.StackTrace);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #10
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            string result = string.Empty;

            try
            {
                Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env     = new Environment(request);

                string resource = GetParam(path);
                //m_log.DebugFormat("[XXX]: resource {0}", resource);
                if (resource.StartsWith("/data/simulators"))
                {
                    result = m_WebApp.Services.ConsoleSimulatorsRequest(env);
                    httpResponse.ContentType = "application/xml";
                }
                else if (resource.StartsWith("/heartbeat"))
                {
                    result = m_WebApp.Services.ConsoleHeartbeat(env);
                    httpResponse.ContentType = "application/xml";
                }
                else
                {
                    result = m_WebApp.Services.ConsoleRequest(env);
                    httpResponse.ContentType = "text/html";
                }
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[CONSOLE HANDLER]: Exception {0}: {1}", e.Message, e.StackTrace);
            }

            return(WebAppUtils.StringToBytes(result));
        }
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // It's a POST, so we need to read the data on the stream, the lines after the blank line
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            //m_log.DebugFormat("[XXX]: query String: {0}; resource: {1}", body, resource);

            try
            {
                // Here the data on the stream is transformed into a nice dictionary of keys & values
                Dictionary <string, object> postdata =
                    ServerUtils.ParseQueryString(body);

                Request     req = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env = new Environment(req);

                string result = string.Empty;
                if (resource.Equals("/") || resource.Equals(string.Empty))
                {
                    // The client invoked /wifi/admin/users/
                    string terms = String.Empty;
                    if (postdata.ContainsKey("terms"))
                    {
                        terms = postdata["terms"].ToString();
                    }

                    result = m_WebApp.Services.UserSearchPostRequest(env, terms);
                }
                else if (resource.StartsWith("/edit"))
                {
                    // The client invoked /wifi/admin/groups/edit, possibly with the UUID parameter after
                    UUID     groupID = UUID.Zero;
                    string[] pars    = SplitParams(path);
                    if ((pars.Length >= 2) && UUID.TryParse(pars[1], out groupID))
                    {
                        // Indeed the client invoked /wifi/admin/groups/edit/<uuid>, and we got it already in userID (above)
                        string name = string.Empty, charter = string.Empty;
                        if (postdata.ContainsKey("name"))
                        {
                            name = postdata["name"].ToString();
                        }
                        if (postdata.ContainsKey("charter"))
                        {
                            charter = postdata["charter"].ToString();
                        }

                        result = m_WebApp.Services.GroupsEditPostRequest(env, groupID, name, charter);
                    }
                }
                else if (resource.StartsWith("/delete"))
                {
                    // The client invoked /wifi/admin/groups/edit, possibly with the UUID parameter after
                    UUID     groupID = UUID.Zero;
                    string[] pars    = SplitParams(path);
                    if ((pars.Length >= 2) && UUID.TryParse(pars[1], out groupID))
                    {
                        // Indeed the client invoked /wifi/admin/groups/edit/<uuid>, and we got it already in userID (above)
                        string form = string.Empty;
                        result = m_WebApp.Services.GroupsDeletePostRequest(env, groupID);
                    }
                }

                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[USER ACCOUNT POST HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #12
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string resource = GetParam(path);
            //m_log.DebugFormat("[XXX]: resource {0}", resource);

            string result = m_WebApp.Services.InventoryLoadGetRequest(env);

            httpResponse.ContentType = "text/html";

            return(WebAppUtils.StringToBytes(result));
        }
예제 #13
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);
            //m_log.DebugFormat("[Wifi]: ip address = {0}", httpRequest.RemoteIPEndPoint);
            //foreach (object o in httpRequest.Query.Keys)
            //    m_log.DebugFormat("  >> {0}={1}", o, httpRequest.Query[o]);
            httpResponse.ContentType = "text/html";
            string resource = GetParam(path);
            //m_log.DebugFormat("[INVENTORY HANDLER POST]: resource {0}", resource);

            Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = string.Empty;

            if (resource.Equals("/") || resource.Equals(string.Empty))
            {
                StreamReader sr   = new StreamReader(requestData);
                string       body = sr.ReadToEnd();
                sr.Close();
                body = body.Trim();
                Dictionary <string, object> postdata =
                    ServerUtils.ParseQueryString(body);

                string action = postdata.Keys.FirstOrDefault(key => key.StartsWith("action-"));
                if (action == null)
                {
                    action = string.Empty;
                }
                else
                {
                    action = action.Substring("action-".Length);
                }

                string        folder        = string.Empty;
                string        newFolderName = string.Empty;
                List <string> nodes         = new List <string>();
                List <string> types         = new List <string>();

                if (postdata.ContainsKey("folder"))
                {
                    folder = postdata["folder"].ToString();
                }
                if (postdata.ContainsKey("newFolderName"))
                {
                    newFolderName = postdata["newFolderName"].ToString();
                }
                foreach (KeyValuePair <string, object> kvp in postdata)
                {
                    if (kvp.Key.StartsWith("inv-"))
                    {
                        nodes.Add(kvp.Key.Substring(4));
                        types.Add(kvp.Value.ToString());
                    }
                }

                result = m_WebApp.Services.InventoryPostRequest(env, action, folder, newFolderName, nodes, types);
            }
            else if (resource.StartsWith("/upload"))
            {
                HttpMultipartParser parser = new HttpMultipartParser(requestData, "datafile");
                if (parser.Success)
                {
                    //string user = HttpUtility.UrlDecode(parser.Parameters["user"]);
                    if (!Directory.Exists(WebAppUtils.UploadPath))
                    {
                        Directory.CreateDirectory(WebAppUtils.UploadPath);
                    }

                    string filename   = new Guid().ToString().Substring(0, 8) + ".iar";
                    string pathToFile = System.IO.Path.Combine(WebAppUtils.UploadPath, filename);
                    if (File.Exists(pathToFile))
                    {
                        File.Delete(pathToFile);
                    }
                    using (FileStream w = new FileStream(pathToFile, FileMode.CreateNew))
                    {
                        w.Write(parser.FileContents, 0, parser.FileContents.Length);
                    }
                    result = m_WebApp.Services.InventoryUploadRequest(env, pathToFile);
                    File.Delete(pathToFile);
                }
            }

            return(WebAppUtils.StringToBytes(result));
        }
예제 #14
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // It's a POST, so we need to read the data on the stream, the lines after the blank line
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            //m_log.DebugFormat("[HYPERLINK POST HANDLER]: query String: {0}; resource: {1}", body, resource);

            try
            {
                // Here the data on the stream is transformed into a nice dictionary of keys & values
                Dictionary <string, object> postdata = ServerUtils.ParseQueryString(body);
                Request     request = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env     = new Environment(request);

                string result = string.Empty;
                if (resource.StartsWith("/add"))
                {
                    // The client invoked /wifi/linkregion/add
                    string address = string.Empty;
                    uint   xloc = 0, yloc = 0;
                    if (postdata.ContainsKey("address"))
                    {
                        address = postdata["address"].ToString();
                    }
                    if (postdata.ContainsKey("xloc"))
                    {
                        UInt32.TryParse(postdata["xloc"].ToString(), out xloc);
                    }
                    if (postdata.ContainsKey("yloc"))
                    {
                        UInt32.TryParse(postdata["yloc"].ToString(), out yloc);
                    }

                    result = m_WebApp.Services.HyperlinkAddRequest(env, address, xloc, yloc);
                }
                else if (resource.StartsWith("/delete"))
                {
                    // The client invoked /wifi/linkregion/delete, possibly with the UUID parameter after
                    UUID     regionID = UUID.Zero;
                    string[] pars     = SplitParams(path);
                    if ((pars.Length >= 2) && UUID.TryParse(pars[1], out regionID))
                    {
                        // Indeed the client invoked /wifi/linkregion/delete/<uuid>, and we got it already in regionID (above)
                        result = m_WebApp.Services.HyperlinkDeletePostRequest(env, regionID);
                    }
                }
                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[HYPERLINK POST HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #15
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // This is the content type of the response. Don't forget to set it to this in all your handlers.
            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);
            //m_log.DebugFormat("[NOTIFY HANDLER]: resource {1}", resource);
            Request     request = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = string.Empty;

            try
            {
                result = m_WebApp.Services.NotifyRequest(env);
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[NOTIFY HANDLER]: Exception {0}: {1}", e.Message, e.StackTrace);
            }

            return(WebAppUtils.StringToBytes(result));
        }
예제 #16
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);
            //m_log.DebugFormat("[Wifi]: ip address = {0}", httpRequest.RemoteIPEndPoint);
            //foreach (object o in httpRequest.Query.Keys)
            //    m_log.DebugFormat("  >> {0}={1}", o, httpRequest.Query[o]);

            string result = string.Empty;

            try
            {
                Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env     = new Environment(request);

                result = m_WebApp.Services.LogoutRequest(env);

                httpResponse.ContentType = "text/html";
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[LOGOUT HANDLER]: Exception {0}: {1}", e.Message, e.StackTrace);
            }

            return(WebAppUtils.StringToBytes(result));
        }
예제 #17
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            try
            {
                string[] pars = SplitParams(path);
                if (pars.Length == 1) // /wifi/recover/token?email=email
                {
                    string token = pars[0];
                    if (httpRequest.Query.ContainsKey("email") && httpRequest.Query["email"] != null)
                    {
                        string      email = HttpUtility.UrlDecode(httpRequest.Query["email"].ToString());
                        Request     req   = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                        Environment env   = new Environment(req);

                        string result = m_WebApp.Services.RecoverPasswordGetRequest(env, email, token);

                        return(WebAppUtils.StringToBytes(result));
                    }
                    else
                    {
                        m_Log.DebugFormat("[PASSWORD RECOVER GET HANDLER]: Query part does not contain email variable");
                    }
                }
                else
                {
                    m_Log.DebugFormat("[PASSWORD RECOVER GET HANDLER]: Path does not have 1 params, it has {0}", pars.Length);
                }
            }
            catch (Exception e)
            {
                m_Log.DebugFormat("[PASSWORD RECOVER GET HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #18
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            try
            {
                Dictionary <string, object> request =
                    ServerUtils.ParseQueryString(body);

                string token = String.Empty;
                if (request.ContainsKey("token"))
                {
                    token = request["token"].ToString();
                }
                string email = String.Empty;
                if (request.ContainsKey("email"))
                {
                    email = request["email"].ToString();
                }

                string newPassword = String.Empty;
                if (request.ContainsKey("newpassword"))
                {
                    newPassword = request["newpassword"].ToString();
                }

                Request     req = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env = new Environment(req);

                string result = m_WebApp.Services.RecoverPasswordPostRequest(env, email, token, newPassword);
                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                m_Log.DebugFormat("[FORGOT PASSWORD POST HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #19
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);
            //m_log.DebugFormat("[Wifi]: ip address = {0}", httpRequest.RemoteIPEndPoint);
            //foreach (object o in httpRequest.Query.Keys)
            //    m_log.DebugFormat("  >> {0}={1}", o, httpRequest.Query[o]);
            httpResponse.ContentType = "text/html";
            string resource = GetParam(path);
            //m_log.DebugFormat("[USER ACCOUNT HANDLER GET]: resource {0}", resource);

            Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = string.Empty;
            UUID   userID = UUID.Zero;

            if (resource == string.Empty || resource == "/")
            {
                result = m_WebApp.Services.NewAccountGetRequest(env);
            }
            else
            {
                //UUID.TryParse(resource.Trim(new char[] {'/'}), out userID);
                if (resource.Trim(new char[] { '/' }).StartsWith("edit"))
                {
                    result = m_WebApp.Services.UserAccountGetRequest(env, userID);
                }
            }

            return(WebAppUtils.StringToBytes(result));
        }
예제 #20
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            httpResponse.ContentType = "text/html";

            Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = m_WebApp.Services.ForgotPasswordGetRequest(env);

            return(WebAppUtils.StringToBytes(result));
        }
예제 #21
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // It's a POST, so we need to read the data on the stream, the lines after the blank line
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            //m_log.DebugFormat("[XXX]: query String: {0}; resource: {1}", body, resource);

            try
            {
                // Here the data on the stream is transformed into a nice dictionary of keys & values
                Dictionary <string, object> postdata =
                    ServerUtils.ParseQueryString(body);

                Request     req = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env = new Environment(req);

                string result = string.Empty;
                if (resource.Equals("/") || resource.Equals(string.Empty))
                {
                    // The client invoked /wifi/admin/users/
                    string terms = String.Empty;
                    if (postdata.ContainsKey("terms"))
                    {
                        terms = postdata["terms"].ToString();
                    }

                    result = m_WebApp.Services.UserSearchPostRequest(env, terms);
                }
                else if (resource.StartsWith("/edit"))
                {
                    // The client invoked /wifi/admin/users/edit, possibly with the UUID parameter after
                    UUID     userID = UUID.Zero;
                    string[] pars   = SplitParams(path);
                    if ((pars.Length >= 2) && UUID.TryParse(pars[1], out userID))
                    {
                        // Indeed the client invoked /wifi/admin/users/edit/<uuid>, and we got it already in userID (above)
                        string form = string.Empty;
                        if (postdata.ContainsKey("form"))
                        {
                            form = postdata["form"].ToString();
                        }
                        if (form == "1")
                        {
                            string first = string.Empty, last = string.Empty, email = string.Empty, title = string.Empty;
                            int    level = 0, flags = 0;
                            if (postdata.ContainsKey("first") && WebAppUtils.IsValidName(postdata["first"].ToString()))
                            {
                                first = postdata["first"].ToString();
                            }
                            if (postdata.ContainsKey("last") && WebAppUtils.IsValidName(postdata["last"].ToString()))
                            {
                                last = postdata["last"].ToString();
                            }
                            if (postdata.ContainsKey("email") && WebAppUtils.IsValidEmail(postdata["email"].ToString()))
                            {
                                email = postdata["email"].ToString();
                            }
                            if (postdata.ContainsKey("title"))
                            {
                                title = postdata["title"].ToString();
                            }
                            if (postdata.ContainsKey("level"))
                            {
                                Int32.TryParse(postdata["level"].ToString(), out level);
                            }
                            if (postdata.ContainsKey("flags"))
                            {
                                Int32.TryParse(postdata["flags"].ToString(), out flags);
                            }

                            result = m_WebApp.Services.UserEditPostRequest(env, userID, first, last, email, level, flags, title);
                        }
                        else if (form == "2")
                        {
                            string password = string.Empty;
                            if (postdata.ContainsKey("password"))
                            {
                                password = postdata["password"].ToString();
                                result   = m_WebApp.Services.UserEditPostRequest(env, userID, password);
                            }
                        }
                    }
                }
                else if (resource.StartsWith("/delete"))
                {
                    // The client invoked /wifi/admin/users/edit, possibly with the UUID parameter after
                    UUID     userID = UUID.Zero;
                    string[] pars   = SplitParams(path);
                    if ((pars.Length >= 2) && UUID.TryParse(pars[1], out userID))
                    {
                        // Indeed the client invoked /wifi/admin/users/edit/<uuid>, and we got it already in userID (above)
                        string form = string.Empty;
                        if (postdata.ContainsKey("form"))
                        {
                            form = postdata["form"].ToString();
                        }
                        if (form == "1")
                        {
                            result = m_WebApp.Services.UserDeletePostRequest(env, userID);
                        }
                    }
                }

                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[USER ACCOUNT POST HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }
예제 #22
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // path = /wifi/...
            //m_log.DebugFormat("[Wifi]: path = {0}", path);
            //m_log.DebugFormat("[Wifi]: ip address = {0}", httpRequest.RemoteIPEndPoint);
            //foreach (object o in httpRequest.Query.Keys)
            //    m_log.DebugFormat("  >> {0}={1}", o, httpRequest.Query[o]);
            httpResponse.ContentType = "text/html";
            string resource = GetParam(path);
            //m_log.DebugFormat("[INVENTORY HANDLER HANDLER GET]: resource {0}", resource);
            string userId = string.Empty;

            if (httpRequest.Query.ContainsKey("uid"))
            {
                userId = HttpUtility.UrlDecode(httpRequest.Query["uid"].ToString());
            }

            Request     request = RequestFactory.CreateRequest(string.Empty, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
            Environment env     = new Environment(request);

            string result = m_WebApp.Services.TOSGetRequest(env, userId);

            return(WebAppUtils.StringToBytes(result));
        }
예제 #23
0
        public string UserActivateGetRequest(Environment env, UUID userID)
        {
            m_log.DebugFormat("[Wifi]: UserActivateGetRequest {0}", userID);
            Request request = env.Request;

            SessionInfo sinfo;

            if (TryGetSessionInfo(request, out sinfo) &&
                (sinfo.Account.UserLevel >= m_WebApp.AdminUserLevel))
            {
                env.Session = sinfo;
                env.Flags   = Flags.IsLoggedIn | Flags.IsAdmin;
                NotifyWithoutButton(env, _("The account has been activated.", env));
                UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, userID);
                if (account != null)
                {
                    // Remove pending identifier in name
                    account.FirstName = account.FirstName.Replace(m_PendingIdentifier, "");

                    // Retrieve saved user data from serviceURLs and set them back to normal
                    string password = (string)account.ServiceURLs["Password"];
                    account.ServiceURLs.Remove("Password");

                    Object value;
                    account.ServiceURLs.TryGetValue("Avatar", out value);
                    account.ServiceURLs.Remove("Avatar");
                    string avatarType = (string)value;

                    CultureInfo[] languages = null;
                    if (account.ServiceURLs.TryGetValue("Language", out value))
                    {
                        languages = Localization.GetLanguageInfo((string)value);
                    }
                    account.ServiceURLs.Remove("Language");

                    // Save changes to user account
                    m_UserAccountService.StoreUserAccount(account);

                    // Create the inventory
                    m_InventoryService.CreateUserInventory(account.PrincipalID);

                    // Set the password
                    m_AuthenticationService.SetPassword(account.PrincipalID, password);

                    // Set the avatar
                    if (avatarType != null)
                    {
                        SetAvatar(env, account.PrincipalID, avatarType);
                    }

                    if (account.Email != string.Empty)
                    {
                        string message = string.Format("{0}\n\n{1} {2}\n{3} {4}\n\n{5} {6}",
                                                       _("Your account has been activated.", languages),
                                                       _("First name:", languages), account.FirstName,
                                                       _("Last name:", languages), account.LastName,
                                                       _("LoginURI:", languages), m_WebApp.LoginURL);
                        SendEMail(account.Email, _("Account activated", languages), message);
                    }
                }

                return(PadURLs(env, sinfo.Sid, m_WebApp.ReadFile(env, "index.html")));
            }

            return(m_WebApp.ReadFile(env, "index.html"));
        }
예제 #24
0
        public override byte[] Handle(string path, Stream requestData,
                                      IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
        {
            // It's a POST, so we need to read the data on the stream, the lines after the blank line
            StreamReader sr   = new StreamReader(requestData);
            string       body = sr.ReadToEnd();

            sr.Close();
            body = body.Trim();

            httpResponse.ContentType = "text/html";

            string resource = GetParam(path);

            //m_log.DebugFormat("[XXX]: query String: {0}; resource: {1}", body, resource);

            try
            {
                // Here the data on the stream is transformed into a nice dictionary of keys & values
                Dictionary <string, object> postdata =
                    ServerUtils.ParseQueryString(body);

                string broadcast_message = String.Empty;
                if (postdata.ContainsKey("message"))
                {
                    broadcast_message = postdata["message"].ToString();
                }

                Request     req = RequestFactory.CreateRequest(resource, httpRequest, Localization.GetLanguageInfo(httpRequest.Headers.Get("accept-language")));
                Environment env = new Environment(req);

                string result = string.Empty;
                if (resource.Equals("/") || resource.Equals(string.Empty))
                {
                }
                else if (resource.StartsWith("/shutdown"))
                {
                    result = m_WebApp.Services.RegionManagementShutdownPostRequest(env);
                }
                else if (resource.StartsWith("/restart"))
                {
                    result = m_WebApp.Services.RegionManagementRestartPostRequest(env);
                }
                else if (resource.StartsWith("/broadcast"))
                {
                    result = m_WebApp.Services.RegionManagementBroadcastPostRequest(env, broadcast_message);
                }
                return(WebAppUtils.StringToBytes(result));
            }
            catch (Exception e)
            {
                m_log.DebugFormat("[REGION MANAGEMENT POST HANDLER]: Exception {0}", e);
            }

            return(WebAppUtils.FailureResult());
        }