public XmlDocument Report() { Init init = new Init(); Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID]; init.InitSkuConfigurations(State); HttpRuntime.Cache["TempFilesPath"] = Server.MapPath(".") + @"\temp_files\"; Util util = new Util(); XmlUtil x_util = new XmlUtil(); XmlNode status_node = null; XmlDocument Report = new XmlDocument(); XmlNode root = Report.CreateElement("report_response"); Report.AppendChild(root); try { DB db = new DB(); HttpRequest request = Context.Request; string application_id = request.QueryString.Get("appid"); string application_name = request.QueryString.Get("app"); string isproduction = request.QueryString.Get("isproduction"); string username = request.QueryString.Get("customer"); string user_id = request.QueryString.Get("userid"); string device_id = request.QueryString.Get("deviceid"); string device_version = request.QueryString.Get("device_version"); string device_model = request.QueryString.Get("device_model"); string viziapps_version = request.QueryString.Get("viziapps_version"); if (viziapps_version == null) viziapps_version = request.QueryString.Get("mobiflex_version"); string latitude = request.QueryString.Get("latitude"); string longitude = request.QueryString.Get("longitude"); string app_status = "staging"; if (isproduction == "yes") { app_status = "production"; } string customer_id = request.QueryString.Get("custid"); if (app_status == "production") { util.GetProductionAccountInfo(State, username); util.GetProductionAppInfo(State, application_name); application_id = State["AppID"].ToString(); if (State["IsProductionAppPaid"] != null && State["IsProductionAppPaid"].ToString() != "true") { //if (!util.IsFreeProductionValid(State, application_id)) if (State["IsFreeProductionValid"] != null && State["IsFreeProductionValid"].ToString() != "true") { x_util.CreateNode(Report, root, "status", "kill"); x_util.CreateNode(Report, root, "status_message", "The account for this app is inactive. Contact ViziApps to re-activate your account."); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app killed due to inactive account"); throw new System.InvalidOperationException("The publishing service for your app has expired."); } } if (State["AccountStatus"].ToString() == "inactive") { x_util.CreateNode(Report, root, "status", "kill"); x_util.CreateNode(Report, root, "status_message", "The account for this app is inactive. Contact ViziApps to re-activate your account."); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app killed due to inactive account"); return Report; } } //else app is staging else if (customer_id != null && customer_id.Length > 0) { State["CustomerID"] = customer_id; string active_sql = "SELECT COUNT(*) FROM customers where customer_id='" + customer_id + "' AND status!='inactive'"; string active_count = db.ViziAppsExecuteScalar(State, active_sql); if (active_count == "0") { x_util.CreateNode(Report, root, "status", "kill"); x_util.CreateNode(Report, root, "status_message", "The account for this app is inactive. Contact ViziApps to re-activate your account."); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app killed due to inactive account"); return Report; } } string display_width = request.QueryString.Get("display_width"); if (display_width == null) display_width = "320"; string display_height = request.QueryString.Get("display_height"); if (display_height == null) display_height = "480"; if (device_model == null) State["SelectedDeviceType"] = Constants.IPHONE; else if (device_model.ToLower().Contains("iphone") || device_model.ToLower().Contains("ipod")) State["SelectedDeviceType"] = Constants.IPHONE; else if (device_model.ToLower().Contains("ipad")) State["SelectedDeviceType"] = Constants.IPAD; else if (Convert.ToInt32(display_width) > 600) State["SelectedDeviceType"] = Constants.ANDROID_TABLET; else State["SelectedDeviceType"] = Constants.ANDROID_PHONE; if (application_id != null && application_id.Length > 0) { string sql = null; if (app_status == "staging") { sql = "SELECT status FROM applications WHERE application_id='" + application_id + "'"; string staging_status = db.ViziAppsExecuteScalar(State, sql); if (staging_status == null || (!staging_status.Contains("staging") && customer_id != null)) { sql = "SELECT application_id FROM applications WHERE customer_id='" + customer_id + "' AND status LIKE '%staging%'"; string new_application_id = db.ViziAppsExecuteScalar(State, sql); if (new_application_id != null) { XmlDocument Design = GetDesign(new_application_id, user_id, customer_id, Convert.ToInt32(display_width), Convert.ToInt32(display_height), app_status, null); if (Design != null) { Design.SelectSingleNode("//status").InnerText = "update_app"; SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app updated"); } else { Design = new XmlDocument(); XmlNode root2 = Design.CreateElement("report_response"); Design.AppendChild(root2); x_util.CreateNode(Design, root2, "status", "kill"); x_util.CreateNode(Design, root2, "status_message", "Application no longer exists."); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app does not exist"); } return Design; } } db.CloseViziAppsDatabase(State); } } string app_time_stamp = request.QueryString.Get("app_time_stamp"); if (app_time_stamp != null && app_time_stamp.Length > 0) { string date_time_modified = null; if (app_status == "staging") date_time_modified = util.GetStagingAppTimeStamp(State, application_id); else { date_time_modified = State["DateTimeModified"].ToString(); } DateTime AppDateTime; bool isGoodAppDateTime= DateTime.TryParse(app_time_stamp, out AppDateTime); DateTime DateTimeModified; bool isGoodDateTimeModified = DateTime.TryParse(date_time_modified, out DateTimeModified); if (isGoodAppDateTime && isGoodDateTimeModified && AppDateTime != DateTimeModified) { // assuming that there is a newer version XmlDocument Design = null; if (app_status == "staging") { Design = GetDesign(application_id, user_id, customer_id, Convert.ToInt32(display_width), Convert.ToInt32(display_height), app_status, date_time_modified); } else { Design = new XmlDocument(); Design.LoadXml(util.GetWebPage(State["AppDesignURL"].ToString())); } if (Design != null) { Design.SelectSingleNode("//status").InnerText = "update_app"; SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app updated"); } else { Design = new XmlDocument(); XmlNode root2 = Design.CreateElement("report_response"); Design.AppendChild(root2); x_util.CreateNode(Design, root2, "status", "kill"); x_util.CreateNode(Design, root2, "status_message", "Application no longer exists."); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app does not exist"); } return Design; } else SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app opened"); } else SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, latitude, longitude, "app opened"); string status = "OK"; //check for unlimited use if (app_status == "production") { if (State["HasUnlimitedUsers"].ToString() == "true") status += " unlimited"; } status_node = x_util.CreateNode(Report, root, "status", status); } catch (System.Exception SE) { util.LogError(State, SE); if (status_node == null) { Report = new XmlDocument(); XmlNode root2 = Report.CreateElement("report_response"); Report.AppendChild(root2); status_node = x_util.CreateNode(Report, root2, "status"); } status_node.InnerText = SE.Message + ": " + SE.StackTrace; } return Report; }
public XmlDocument Login() { Init init = new Init(); Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID]; init.InitSkuConfigurations(State); HttpRuntime.Cache["TempFilesPath"] = Server.MapPath(".") + @"\temp_files\"; Util util = new Util(); XmlUtil x_util = new XmlUtil(); XmlNode status = null; XmlDocument Design = null; try { DB db = new DB(); HttpRequest request = Context.Request; string viziapps_version = request.QueryString.Get("viziapps_version"); if (viziapps_version == null) viziapps_version = request.QueryString.Get("mobiflex_version"); string device_id = request.QueryString.Get("deviceid"); string device_model = request.QueryString.Get("device_model"); string customer_username = request.QueryString.Get("customer"); string app_status = (customer_username != null && customer_username.Length > 0) ? "production" : "staging"; string application_name = request.QueryString.Get("app"); string application_id = request.QueryString.Get("app_id"); string unlimited = request.QueryString.Get("unlimited"); string device_version = request.QueryString.Get("device_version"); if (application_id == null) application_id = ""; string sql = null; DataRow[] rows = null; string customer_id = null; string user_id = null; string user = request.QueryString.Get("user"); string password = request.QueryString.Get("pwd"); string display_width = request.QueryString.Get("display_width"); if (display_width == null) display_width = "320"; string display_height = request.QueryString.Get("display_height"); if (display_height == null) display_height = "480"; if (device_model == null) State["SelectedDeviceType"] = Constants.IPHONE; else if (device_model.ToLower().Contains("iphone") || device_model.ToLower().Contains("ipod")) State["SelectedDeviceType"] = Constants.IPHONE; else if (device_model.ToLower().Contains("ipad")) State["SelectedDeviceType"] = Constants.IPAD; else if (Convert.ToInt32(display_width) > 600) State["SelectedDeviceType"] = Constants.ANDROID_TABLET; else State["SelectedDeviceType"] = Constants.ANDROID_PHONE; if (unlimited == null || unlimited != "true") { if (user == null || password == null) { Design = new XmlDocument(); XmlNode root2 = Design.CreateElement("login_response"); Design.AppendChild(root2); status = x_util.CreateNode(Design, root2, "status", "Either the username or the password: "******" is incorrect."); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: bad credentials"); return Design; } } if (app_status == "production") { util.GetProductionAccountInfo(State, customer_username); if (customer_id == null) customer_id = State["CustomerID"].ToString(); //State["Username"] = customer_username; //customer_id = util.GetCustomerIDFromUsername(State, customer_username); //State["CustomerID"] = customer_id; //string account_status = util.GetCustomerStatus(State); // if (account_status == "inactive") if (State["AccountStatus"].ToString() == "inactive") { SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: account inactive"); throw new System.InvalidOperationException("Your customer account is inactive."); } util.GetProductionAppInfo(State, application_name); application_id = State["AppID"].ToString(); if (State["IsProductionAppPaid"] != null && State["IsProductionAppPaid"].ToString() != "true") { //if (!util.IsFreeProductionValid(State, application_id)) if (State["IsFreeProductionValid"] != null && State["IsFreeProductionValid"].ToString() != "true") { SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: publishing service expired"); throw new System.InvalidOperationException("The publishing service for your app has expired."); } } if (unlimited == null || unlimited != "true") { //check username and password // sql = "SELECT * FROM users WHERE username='******' AND password='******' AND application_id='" + application_id + "'"; //rows = db.ViziAppsExecuteSql(State, sql); //if (rows.Length == 0) if (State["Password"] == null) { //db.CloseViziAppsDatabase(State); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: bad credentials"); throw new System.InvalidOperationException("Either the username or the password: "******" is incorrect."); } //check number of users -- unlimited use never needs a login //bool use_1_user_credential = util.GetUse1UserCredential(State, application_id); //if (use_1_user_credential) if (State["Use1UserCredential"] != null && State["Use1UserCredential"].ToString() == "true") { Hashtable features = util.IsProductionAppPaid(State, application_id); DataRow row = rows[0]; sql = "SELECT COUNT(*) FROM users_device_ids WHERE user_id='" + row["user_id"].ToString() + "'"; int device_count = Convert.ToInt32(db.ViziAppsExecuteScalar(State, sql)); sql = "SELECT COUNT(*) FROM users_device_ids WHERE device_id='" + device_id + "'"; string device_exists = db.ViziAppsExecuteScalar(State, sql); if (device_exists == "0") { if (device_count >= (int)features["max_users"]) { db.CloseViziAppsDatabase(State); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: reached limit of users"); throw new System.InvalidOperationException("Cannot download app: reached limit of users."); } else { sql = "INSERT INTO users_device_ids SET device_id='" + device_id + "',user_id='" + row["user_id"].ToString() + "'"; db.ViziAppsExecuteNonQuery(State, sql); } } //else app is allowed } } } else //staging { sql = "SELECT * FROM customers WHERE username='******'"; rows = db.ViziAppsExecuteSql(State, sql); if (rows.Length == 0) { db.CloseViziAppsDatabase(State); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: user not registered"); throw new Exception("The username " + user.ToLower() + " is not registered. Go to www.viziapps.com and create a free account."); } DataRow row = rows[0]; if (row["password"].ToString() != password) { db.CloseViziAppsDatabase(State); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: bad credentials"); throw new Exception("Either the username or the password: "******" is incorrect."); } if (row["status"].ToString() == "inactive") { db.CloseViziAppsDatabase(State); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: account is inactive"); throw new Exception("Your account is inactive. Contact ViziApps to re-activate your account."); } customer_id = row["customer_id"].ToString(); State["CustomerID"] = customer_id; } //user is now logged in if (app_status == "staging") { sql = "SELECT application_id FROM applications WHERE " + "in_staging=1 AND customer_id='" + customer_id + "'"; application_id = db.ViziAppsExecuteScalar(State, sql); if (application_id == null) { db.CloseViziAppsDatabase(State); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: no app selected"); throw new System.InvalidOperationException("You need to select an app to test, on the design page of your ViziApps Studio account."); } } db.CloseViziAppsDatabase(State); //get design if (State["AppDesignURL"] == null) { Design = GetDesign(application_id, user_id, customer_id, Convert.ToInt32(display_width), Convert.ToInt32(display_height), app_status, null); //save design in a file if production if (app_status == "production") { util.SaveProductionAppInfo(State, application_name, Design); } } else { Design = new XmlDocument(); Design.LoadXml(util.GetWebPage(State["AppDesignURL"].ToString())); } if (Design == null) { Design = new XmlDocument(); XmlNode root2 = Design.CreateElement("login_response"); Design.AppendChild(root2); SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: no app selected"); status = x_util.CreateNode(Design, root2, "status", "You need to select an app to test, on the design page of your ViziApps Studio account."); } else SaveReport(State, application_id, app_status, customer_id, user_id, device_id, device_model, device_version, viziapps_version, null, null, "app login: design downloaded"); } catch (System.Exception SE) { util.LogError(State, SE); if (status == null) { Design = new XmlDocument(); XmlNode root2 = Design.CreateElement("login_response"); Design.AppendChild(root2); status = x_util.CreateNode(Design, root2, "status"); } status.InnerText = SE.Message; util.LogError(State, SE); } return Design; }
public string Report(string app_id, string customer_id, string is_production) { Init init = new Init(); Hashtable State = (Hashtable)HttpRuntime.Cache[Session.SessionID]; init.InitSkuConfigurations(State); Util util = new Util(); XmlUtil x_util = new XmlUtil(); XmlNode status_node = null; XmlDocument Report = new XmlDocument(); XmlNode root = Report.CreateElement("mobiflex_report"); Report.AppendChild(root); string xml_prefix = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"; try { DB db = new DB(); if (is_production == "yes") { //is payment current Hashtable features = util.IsProductionAppPaid(State, app_id); if (features == null) { if (!util.IsFreeProductionValid(State, app_id)) { x_util.CreateNode(Report, root, "status", "kill"); x_util.CreateNode(Report, root, "status_message", "The account for this app is inactive. Contact ViziApps to re-activate your account."); return (xml_prefix + Report.OuterXml); } } } if (customer_id != null && customer_id.Length > 0) { State["CustomerID"] = customer_id; string active_sql = "SELECT COUNT(*) FROM customers where customer_id='" + customer_id + "' AND status!='inactive'"; string active_count = db.ViziAppsExecuteScalar(State, active_sql); if (active_count == "0") { x_util.CreateNode(Report, root, "status", "kill"); x_util.CreateNode(Report, root, "status_message", "The account for this app is inactive. Contact ViziApps to re-activate your account."); return (xml_prefix + Report.OuterXml); } } string status = "OK"; status_node = x_util.CreateNode(Report, root, "status", status); } catch (System.Exception SE) { util.LogError(State, SE); if (status_node == null) { Report = new XmlDocument(); XmlNode root2 = Report.CreateElement("app_project"); Report.AppendChild(root2); status_node = x_util.CreateNode(Report, root2, "status"); } status_node.InnerText = SE.Message + ": " + SE.StackTrace; } return (xml_prefix + Report.OuterXml); }