public static void DeleteRecipientById(string RecipientId)
        {
            ObserverDbContext _db = new ObserverDbContext();

            _db.Recipients.Where(e => e.Id == RecipientId).FirstOrDefault().Deleted = true;
            _db.SaveChanges();
        }
        public static void DeleteStepById(string StepId)
        {
            using (ObserverDbContext _db = new ObserverDbContext())
            {
                StepsModel model = _db.Steps
                                   .Where(e => e.Id == StepId)
                                   .FirstOrDefault();

                int    numOrder  = model.Order.GetValueOrDefault();
                string observeId = model.Observes.Id;

                model.Deleted = true;
                model.Order   = 0;

                List <StepsModel> listModel = _db.Steps
                                              .Where(e => e.Observes.Id == observeId)
                                              .ToList();

                foreach (StepsModel item in listModel)
                {
                    if (item.Order > numOrder)
                    {
                        item.Order = item.Order - 1;
                    }
                }

                _db.SaveChanges();
            }
        }
Пример #3
0
        public static void CreateNewUser(UsersModel users)
        {
            ObserverDbContext _db = new ObserverDbContext();

            _db.Users.Add(users);
            _db.SaveChanges();
        }
        public static void DetectResponseIrregularity(string StepId, int Minutes)
        {
            ObserverDbContext _db = new ObserverDbContext();

            StepsModel stepsModel = _db.Steps
                                    .Where(e => e.Id == StepId)
                                    .FirstOrDefault();

            int minute = (int)DateTime.UtcNow.Subtract(stepsModel.CheckedTime).TotalMinutes;

            try
            {
                if (minute > Minutes)
                {
                    string        ObservesId = ObserveServiceManager.GetObserveByStepId(StepId).Id;
                    ObservesModel model      = _db.Observes.Where(r => r.Id == ObservesId).FirstOrDefault();
                    model.Status = 0;
                    _db.SaveChanges();
                    foreach (RecipientsModel item in model.List_Recipients.Where(e => e.Deleted == false).ToList())
                    {
                        EmailServiceManager.CatchErrorNotification(model.Name, item.Email);
                    }
                }
            } catch (NullReferenceException e)
            {
                e.ToString();
            }
        }
        public static void SetCatchByStepId(string StepId, string CatchId)
        {
            ObserverDbContext _db = new ObserverDbContext();

            CatchesModel catchesModel = _db.Catches.Where(e => e.Id == CatchId).FirstOrDefault();

            _db.Steps.Where(e => e.Id == StepId).FirstOrDefault().Catches = catchesModel;
            _db.SaveChanges();
        }
        public static void DeleteObserveById(string Id)
        {
            ObserverDbContext _db = new ObserverDbContext();
            var query             = _db.Observes
                                    .Where(e => e.Id == Id)
                                    .FirstOrDefault();

            query.Deleted = true;
            _db.SaveChanges();
        }
        public static void SetIntervalByObserveId(string ObserveId, int Interval)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var query = _db.Observes.Where(e => e.Id == ObserveId).FirstOrDefault();

            query.Interval = Interval;
            query.NextRun  = DateTime.UtcNow;

            _db.SaveChanges();
        }
Пример #8
0
        public int EmailLoginRequest(string SessionId, string Email, string SessionKey)
        {
            ObserverDbContext _db = new ObserverDbContext();
            var session           = _db.LoginSessions
                                    .Where(e => e.Id == SessionId)
                                    .FirstOrDefault();

            if (session.Status == 6)
            {
                // Session expired
                return(0);
            }

            if (session.Status != 1)
            {
                // Session type error
                return(1);
            }

            if (session.Key != SessionKey)
            {
                // Session expired
                return(0);
            }

            var users = _db.Users
                        .Where(e => e.Email == Email)
                        .ToList();

            if (users.Count > 0)
            {
                var user = users.FirstOrDefault();
                if (user.Status == 1)
                {
                    session.EmailKey = EncryptionAlgorithmServiceManager.GetRNGGuid().ToString();
                    session.Status   = 4;
                    session.Users    = user;
                    _db.SaveChanges();
                    EmailServiceManager.AccountEmailLogin(user.Name, Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/LoginEmail?Id=" + SessionId + "&Key=" + session.EmailKey, user.Email);
                    return(4);
                }
                else
                {
                    // Inactive user
                    return(3);
                }
            }
            else
            {
                // Cannot find user
                return(2);
            }
        }
        public async Task <ActionResult> VerifyEmail(string Id, string Key)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var query = _db.PendingUsers
                        .Where(e => e.Id == Id && e.Key == Key)
                        .OrderByDescending(e => e.DateCreated)
                        .ToList();

            if (query.Count > 0)
            {
                var query2 = query.FirstOrDefault();
                if (query2.DateCreated.AddHours(1) < DateTime.UtcNow)
                {
                    return(RedirectToAction("Index", "Home", new { status = 8 }));
                }
                else if (query2.Id == Id && query2.Key == Key)
                {
                    query2.Status = 1;
                    var user = new ApplicationUser {
                        UserName = query2.Email, Email = query2.Email, LockoutEndDateUtc = System.DateTime.UtcNow
                    };
                    var result = await UserManager.CreateAsync(user);

                    if (result.Succeeded)
                    {
                        UsersModel newUser = new UsersModel()
                        {
                            Id          = user.Id,
                            Name        = query2.DisplayName,
                            Email       = query2.Email,
                            Status      = 1,
                            DateCreated = DateTime.UtcNow,
                            ApiCode     = EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()
                        };
                        _db.Users.Add(newUser);
                        _db.SaveChanges();

                        await SignInManager.SignInAsync(user, true, true);
                    }

                    return(RedirectToAction("Index", "Home", new { status = 9 }));
                }
                else
                {
                    return(RedirectToAction("Index", "Home", new { status = 8 }));
                }
            }
            else
            {
                return(RedirectToAction("Index", "Home", new { status = 8 }));
            }
        }
        public static void AddRecipient(RecipientsModel model)
        {
            ObserverDbContext _db           = new ObserverDbContext();
            ObservesModel     observesModel = _db.Observes
                                              .Where(e => e.Id == model.Observes.Id)
                                              .FirstOrDefault();

            model.Observes = observesModel;

            _db.Recipients.Add(model);
            _db.SaveChanges();
        }
        public static void UpdateObserve(ObservesModel model)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var query = _db.Observes
                        .Where(e => e.Id == model.Id)
                        .FirstOrDefault();

            query.Status = model.Status;
            query.Name   = model.Name;

            _db.SaveChanges();
        }
Пример #12
0
        public int QRLoginCancel(string SessionId)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var session = _db.LoginSessions
                          .Where(e => e.Id == SessionId)
                          .FirstOrDefault();

            if (session.Status == 2)
            {
                session.Status = 6;
                _db.SaveChanges();
            }

            return(1);
        }
        public static void ExecuteInterval(string ObserveId)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var query        = _db.Observes.Where(e => e.Id == ObserveId).FirstOrDefault();
            int intervalType = query.Interval.GetValueOrDefault();

            if (intervalType == 1)
            {
                query.NextRun = DateTime.UtcNow.AddMinutes(1);
            }
            else if (intervalType == 2)
            {
                query.NextRun = DateTime.UtcNow.AddMinutes(5);
            }
            else if (intervalType == 3)
            {
                query.NextRun = DateTime.UtcNow.AddMinutes(30);
            }
            else if (intervalType == 4)
            {
                query.NextRun = DateTime.UtcNow.AddHours(1);
            }
            else if (intervalType == 5)
            {
                query.NextRun = DateTime.UtcNow.AddHours(6);
            }
            else if (intervalType == 6)
            {
                query.NextRun = DateTime.UtcNow.AddHours(12);
            }
            else if (intervalType == 7)
            {
                query.NextRun = DateTime.UtcNow.AddDays(1);
            }
            else if (intervalType == 8)
            {
                query.NextRun = DateTime.UtcNow.AddDays(2);
            }
            else if (intervalType == 9)
            {
                query.NextRun = DateTime.UtcNow.AddDays(7);
            }

            _db.SaveChanges();
        }
        public ActionResult EmailLogin(string Id, string Key)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var loginSession = _db.LoginSessions
                               .Where(e => e.Id == Id)
                               .FirstOrDefault();

            if (loginSession.EmailKey == Key && loginSession.Status == 4)
            {
                loginSession.Status = 5;
                _db.SaveChanges();
                return(RedirectToAction("Index", "Home", new { status = 10 }));
            }
            else
            {
                return(RedirectToAction("Index", "Home", new { status = 11 }));
            }
        }
        public static void ReorderStepAsc(string ObserveId, int initOrder, int finalOrder)
        {
            ObserverDbContext _db = new ObserverDbContext();

            List <StepsModel> listModel = _db.Steps
                                          .Where(e => e.Observes.Id == ObserveId && e.Deleted == false)
                                          .OrderBy(e => e.Order)
                                          .ToList();
            int diff = finalOrder - initOrder;

            listModel.Where(e => e.Order == initOrder).FirstOrDefault().Order = 0;
            for (int i = 1; i <= diff; i++)
            {
                listModel.Where(e => e.Order == initOrder + i).FirstOrDefault().Order = listModel.Where(e => e.Order == initOrder + i).FirstOrDefault().Order - 1;
            }
            listModel.Where(e => e.Order == 0).FirstOrDefault().Order = finalOrder;

            _db.SaveChanges();
        }
Пример #16
0
        public JsonResult QRLogin(string SessionId, string SessionKey)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var session = _db.LoginSessions
                          .Where(e => e.Id == SessionId)
                          .FirstOrDefault();

            if (session.QRKey == SessionKey && session.SessionDate > DateTime.UtcNow)
            {
                session.Status      = 3;
                session.SessionDate = DateTime.UtcNow;
                _db.SaveChanges();
                return(Json(new JavaScriptSerializer().DeserializeObject("{ 'Status': 'Authorized' }")));
            }
            else
            {
                return(Json(new JavaScriptSerializer().DeserializeObject("{ 'Status': 'Unauthorized' }")));
            }
        }
        public static void UpdateStep(StepsModel model, string PCMethodId)
        {
            ObserverDbContext _db            = new ObserverDbContext();
            PCMethodsModel    pcMethodsModel = _db.PCMethods.Where(e => e.Id == PCMethodId).FirstOrDefault();

            StepsModel oriModel = _db.Steps
                                  .Where(e => e.Id == model.Id)
                                  .FirstOrDefault();

            oriModel.Url              = model.Url;
            oriModel.Method           = model.Method;
            oriModel.SetHeader        = model.SetHeader;
            oriModel.PredefinedHeader = model.PredefinedHeader;
            oriModel.PC_Method        = pcMethodsModel;
            oriModel.PC1              = model.PC1;
            oriModel.PC2              = model.PC2;
            oriModel.PC2Secret        = model.PC2Secret;

            _db.SaveChanges();
        }
        public static void CreateObserve(string AspId, string Name)
        {
            ObserverDbContext _db = new ObserverDbContext();

            UsersModel user = _db.Users.Where(e => e.Id == AspId).FirstOrDefault();

            ObservesModel model = new ObservesModel()
            {
                Id          = Guid.NewGuid().ToString(),
                Name        = Name,
                Status      = 0,
                Users       = user,
                DateCreated = DateTime.UtcNow,
                Deleted     = false,
                Interval    = 0,
                NextRun     = DateTime.UtcNow
            };

            _db.Observes.Add(model);
            _db.SaveChanges();
        }
Пример #19
0
        protected void Application_Error(object sender, EventArgs e)
        {
            Exception         exception = Server.GetLastError();
            ObserverDbContext _db       = new ObserverDbContext();
            string            referrer  = null;

            if (Request.UrlReferrer != null)
            {
                referrer = Request.UrlReferrer.ToString();
            }
            ErrorLoggingsModel model = new ErrorLoggingsModel()
            {
                Id        = Guid.NewGuid().ToString(),
                Source    = exception.Source,
                Message   = exception.Message,
                UserAgent = Request.UserAgent,
                Ip        = Request.UserHostAddress,
                Referrer  = referrer,
                Date      = DateTime.UtcNow
            };

            _db.ErrorLoggings.Add(model);
            _db.SaveChanges();
        }
Пример #20
0
        public JsonResult SetPredefinedHeader(string StepId, string Header, string Code)
        {
            ObserverDbContext _db = new ObserverDbContext();

            Header = Regex.Replace(Header, @"\s+", "");

            var query = _db.Steps
                        .Where(e => e.Id == StepId)
                        .FirstOrDefault();

            if (query.Observes.Users.ApiCode == Code)
            {
                query.PredefinedHeader = Header;
                ObservesModel observesModel = _db.Steps.Where(e => e.Id == StepId).FirstOrDefault().Observes;
                observesModel.Status = 1;
                _db.SaveChanges();

                return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'Success' }"), JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'Unauthorized' }"), JsonRequestBehavior.AllowGet));
            }
        }
        public static void Catch(string StepId, string Html)
        {
            bool newEntry = false;
            ObserverDbContext      _db            = new ObserverDbContext();
            string                 ObserveId      = ObserveServiceManager.GetObserveByStepId(StepId).Id;
            string                 ObserveName    = ObserveServiceManager.GetObserveByStepId(StepId).Name;
            List <RecipientsModel> recipientsList = ObserveServiceManager.GetObserveByStepId(StepId).List_Recipients.Where(e => e.Deleted == false).ToList();

            string data = null;

            try
            {
                data = _db.Steps
                       .Where(e => e.Id == StepId)
                       .FirstOrDefault()
                       .List_CatchRecordsModel
                       .OrderByDescending(e => e.DateCreated)
                       .FirstOrDefault()
                       .Data;
            } catch (NullReferenceException e)
            {
                e.ToString();
                newEntry = true;
            }

            string       catches      = StepServiceManager.GetStepById(StepId).Catches.Id;
            CatchesModel catchesModel = _db.Catches
                                        .Where(e => e.Id == catches)
                                        .FirstOrDefault();

            // TaQBin Tracking
            if (catches.Equals("E0779B1E-3288-403C-85A4-C07E697C9A5D"))
            {
                string HTML = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//div").ElementAt(6).InnerHtml;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }
            // HongLeong Bank Stm
            else if (catches.Equals("A08BB1EE-CC58-48A0-9B9F-ACD5FFC07DA4"))
            {
                string HTML    = null;
                string HTML1   = null;
                string HTML2   = null;
                var    htmlDoc = new HtmlDocument();

                try
                {
                    htmlDoc.LoadHtml(Html);
                    HTML1 = htmlDoc.DocumentNode
                            .SelectNodes("//table").ElementAt(0).InnerHtml;
                    htmlDoc.LoadHtml(HTML1);
                    var Html2 = htmlDoc.DocumentNode
                                .SelectNodes("//tr").ElementAt(3).InnerHtml;
                    var Html3 = htmlDoc.DocumentNode
                                .SelectNodes("//tr").ElementAt(4).InnerHtml;
                    htmlDoc.LoadHtml(Html);
                    HTML2 = htmlDoc.DocumentNode
                            .SelectNodes("//table").ElementAt(4).InnerHtml;
                    HTML = Html2 + Html3 + HTML2;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 120);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    if (!HTML.Contains("No records found."))
                    {
                        string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                        StepsModel stepsModel = _db.Steps
                                                .Where(e => e.Id == StepId)
                                                .FirstOrDefault();

                        CatchRecordsModel model = new CatchRecordsModel()
                        {
                            Id          = Guid.NewGuid().ToString(),
                            Data        = HTML,
                            DateCreated = DateTime.UtcNow,
                            Catches     = catchesModel,
                            Steps       = stepsModel,
                            PDF         = fileUrl
                        };

                        foreach (RecipientsModel item in recipientsList)
                        {
                            EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                        }

                        stepsModel.CheckedTime = DateTime.UtcNow;

                        _db.CatchRecords.Add(model);
                        _db.SaveChanges();
                    }
                }
            }
            // UCSI Academic Result
            else if (catches.Equals("CFAA4AB2-7F9D-4B3A-BA03-E4A490419C2C"))
            {
                string HTML    = null;
                var    htmlDoc = new HtmlDocument();

                try
                {
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//body").ElementAt(0).InnerHtml;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 180);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    if (!HTML.Contains("&nbsp;&nbsp;&nbsp;Please provide your User ID and Password to proceed."))
                    {
                        string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                        StepsModel stepsModel = _db.Steps
                                                .Where(e => e.Id == StepId)
                                                .FirstOrDefault();

                        CatchRecordsModel model = new CatchRecordsModel()
                        {
                            Id          = Guid.NewGuid().ToString(),
                            Data        = HTML,
                            DateCreated = DateTime.UtcNow,
                            Catches     = catchesModel,
                            Steps       = stepsModel,
                            PDF         = fileUrl
                        };

                        foreach (RecipientsModel item in recipientsList)
                        {
                            EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                        }

                        stepsModel.CheckedTime = DateTime.UtcNow;

                        _db.CatchRecords.Add(model);
                        _db.SaveChanges();
                    }
                }
            }
            // Poslaju
            else if (catches.Equals("8DA4B8C8-1FFA-4336-958B-42678418B79C"))
            {
                string HTML  = null;
                int    count = 0;
                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//script").ElementAt(0).InnerHtml;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    try
                    {
                        while (!HTML.Contains("function cleanTrackingIds"))
                        {
                            HTML = htmlDoc.DocumentNode.SelectNodes("//script").ElementAt(count).InnerHtml;
                            count++;
                        }
                    }
                    catch (ArgumentOutOfRangeException e)
                    {
                        e.ToString();
                    }

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }
            // UCSI ELE
            else if (catches.Equals("E9356BC5-E5ED-470A-A97F-80BAF3CF21AF"))
            {
                string HTML = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//table").ElementAt(1).InnerHtml;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
                // Unitea Home
            }
            else if (catches.Equals("D469A7A5-76A6-4C03-BD23-C6B0B7F6E19F"))
            {
                string HTML = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//input").ElementAt(0).Attributes["value"].Value;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
                // * Catch All Content *
            }
            else if (catches.Equals("4E0E2AAD-8389-4466-8C99-C4879A2ADEB2"))
            {
                string HTML = null;

                try
                {
                    HTML = Html;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }

            /* HongLeong Bank Balance (OLD)
             * else if (catches.Equals("28CF45D5-0C68-4EC0-9F1F-CDA2EC23BB1C"))
             * {
             *  string HTML1 = null;
             *  string HTML2 = null;
             *  string HTML = null;
             *
             *  try
             *  {
             *      var htmlDoc = new HtmlDocument();
             *      htmlDoc.LoadHtml(Html);
             *      HTML1 = htmlDoc.DocumentNode
             *          .SelectNodes("//td").ElementAt(7).InnerHtml;
             *      HTML2 = htmlDoc.DocumentNode
             *          .SelectNodes("//td").ElementAt(9).InnerHtml;
             *      HTML = HTML1 + HTML2;
             *      HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));
             *
             *      StepsModel stepsModel = _db.Steps
             *          .Where(e => e.Id == StepId)
             *          .FirstOrDefault();
             *
             *      stepsModel.CheckedTime = DateTime.UtcNow;
             *      _db.SaveChanges();
             *  }
             *  catch (ArgumentNullException e)
             *  {
             *      e.ToString();
             *      DetectResponseIrregularity(StepId, 60);
             *      HTML = "1";
             *      data = "1";
             *  }
             *
             *  if (HTML != data || newEntry)
             *  {
             *      string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);
             *
             *      StepsModel stepsModel = _db.Steps
             *          .Where(e => e.Id == StepId)
             *          .FirstOrDefault();
             *
             *      CatchRecordsModel model = new CatchRecordsModel()
             *      {
             *          Id = Guid.NewGuid().ToString(),
             *          Data = HTML,
             *          DateCreated = DateTime.UtcNow,
             *          Catches = catchesModel,
             *          Steps = stepsModel,
             *          PDF = fileUrl
             *      };
             *
             *      foreach (RecipientsModel item in recipientsList)
             *      {
             *          EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
             *      }
             *
             *      stepsModel.CheckedTime = DateTime.UtcNow;
             *
             *      _db.CatchRecords.Add(model);
             *      _db.SaveChanges();
             *  }
             * }*/
            // HongLeong Bank Balance
            else if (catches.Equals("28CF45D5-0C68-4EC0-9F1F-CDA2EC23BB1C"))
            {
                string HTML1 = null;
                string HTML2 = null;
                string HTML  = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML1 = htmlDoc.DocumentNode
                            .SelectNodes("//td").ElementAt(7).InnerHtml;
                    HTML2 = htmlDoc.DocumentNode
                            .SelectNodes("//td").ElementAt(9).InnerHtml;
                    HTML = HTML1 + HTML2;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }
            // UCSI ELE Viewstate
            else if (catches.Equals("37A8B073-AC68-4AD2-A793-3AD664305856"))
            {
                string HTML1 = null;
                string HTML2 = null;
                string HTML  = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML1 = htmlDoc.DocumentNode.SelectNodes("//input").ElementAt(0).Attributes["value"].Value;
                    HTML2 = htmlDoc.DocumentNode.SelectNodes("//input").ElementAt(3).Attributes["value"].Value;
                    HTML  = HTML1 + HTML2;
                    HTML  = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                ObserveSessionDatasModel newModel = new ObserveSessionDatasModel()
                {
                    Id       = Guid.NewGuid().ToString(),
                    Observes = _db.Steps.Where(e => e.Id == StepId).FirstOrDefault().Observes,
                    Key      = "ViewState"
                };
            }
            // Wiwaa Bank Submit
            else if (catches.Equals("6B5DE6DE-84D4-4CBB-A8B8-812E45CDB136"))
            {
                string HTML = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//table").ElementAt(0).InnerHtml;
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }
            // A2Hosting Issue Log
            else if (catches.Equals("EE3A2DE8-EBE6-4126-A07A-5F3B535532CE"))
            {
                string HTML = null;

                try
                {
                    var htmlDoc = new HtmlDocument();
                    htmlDoc.LoadHtml(Html);
                    HTML = htmlDoc.DocumentNode
                           .SelectNodes("//div").ElementAt(8).InnerHtml;
                    HTML = HTML.Substring(HTML.Length - 200);
                    HTML = HashingAlgorithmServiceManager.GenerateSHA1(Encoding.UTF8.GetBytes(HTML));

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    stepsModel.CheckedTime = DateTime.UtcNow;
                    _db.SaveChanges();
                }
                catch (ArgumentNullException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }
                catch (NullReferenceException e)
                {
                    e.ToString();
                    DetectResponseIrregularity(StepId, 60);
                    HTML = "1";
                    data = "1";
                }

                if (HTML != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = HTML,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }

            /* GDex Tracking (INCOMPLETE)
             * else if (catches.Equals("AB46347E-6745-4ADD-BE34-E58EC49CBDFD"))
             * {
             *  StepsModel stepsModel = _db.Steps
             *      .Where(e => e.Id == StepId)
             *      .FirstOrDefault();
             *
             *  try
             *  {
             *      bool retry = true;
             *      int i = 0;
             *      while (retry) {
             *          int seq = int.Parse(JObject.Parse(Html).SelectToken("result[0].listPodData["+i+"].seq").ToString());
             *          if (seq > int.Parse(data) || newEntry)
             *          {
             *              string date = JObject.Parse(Html).SelectToken("result[0].listPodData[" + i + "].dtScan").ToString();
             *              string origin = JObject.Parse(Html).SelectToken("result[0].listPodData[" + i + "].origin").ToString();
             *              string type = JObject.Parse(Html).SelectToken("result[0].listPodData[" + i + "].type").ToString();
             *              string newType;
             *
             *              if (type.Equals("i_pod"))
             *              {
             *                  newType = "Under Claim";
             *              } else if (type.Equals("undl"))
             *                  retry = false;
             *
             *              CatchRecordsModel model = new CatchRecordsModel()
             *              {
             *                  Id = Guid.NewGuid().ToString(),
             *                  Data = seq.ToString(),
             *                  DateCreated = DateTime.UtcNow,
             *                  Catches = catchesModel,
             *                  Steps = stepsModel,
             *                  PDF = fileUrl
             *              };
             *          }
             *          i++;
             *      }
             *  } catch (NullReferenceException e)
             *  {
             *      e.ToString();
             *  } catch (ArgumentNullException e)
             *  {
             *      e.ToString();
             *      DetectResponseIrregularity(StepId, 60);
             *      data = "1";
             *  }
             *
             *  stepsModel.CheckedTime = DateTime.UtcNow;
             *  _db.SaveChanges();
             *
             *  if (HTML != data || newEntry)
             *  {
             *      string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);
             *
             *
             *
             *      foreach (RecipientsModel item in recipientsList)
             *      {
             *          EmailServiceManager.CatchNotification(fileUrl, ObserveName, item.Email);
             *      }
             *
             *      stepsModel.CheckedTime = DateTime.UtcNow;
             *
             *      _db.CatchRecords.Add(model);
             *      _db.SaveChanges();
             *  }
             * }*/
            // GDex Tracking
            else if (catches.Equals("AB46347E-6745-4ADD-BE34-E58EC49CBDFD"))
            {
                if (Html != data || newEntry)
                {
                    string fileUrl = DocumentRenderServiceManager.A4Html2Pdf(Html);

                    StepsModel stepsModel = _db.Steps
                                            .Where(e => e.Id == StepId)
                                            .FirstOrDefault();

                    CatchRecordsModel model = new CatchRecordsModel()
                    {
                        Id          = Guid.NewGuid().ToString(),
                        Data        = Html,
                        DateCreated = DateTime.UtcNow,
                        Catches     = catchesModel,
                        Steps       = stepsModel,
                        PDF         = fileUrl
                    };

                    foreach (RecipientsModel item in recipientsList)
                    {
                        string shippingId = stepsModel.PC1;
                        string message    = "The system has detected changes of shipping status.<br>Please visit <a href='https://web3.gdexpress.com/official/iframe/etracking_v4.php?input=" + shippingId + "&choice=cnGdex'>https://web3.gdexpress.com/official/iframe/etracking_v4.php?input=" + shippingId + "&choice=cnGdex</a>";
                        EmailServiceManager.CatchNotificationWithoutScreenshot(message, ObserveName, item.Email);
                    }

                    stepsModel.CheckedTime = DateTime.UtcNow;

                    _db.CatchRecords.Add(model);
                    _db.SaveChanges();
                }
            }
        }
        public async Task <ActionResult> Login(string errorMessage = null, string ReturnUrl = null)
        {
            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Home", new { status = 2 }));
            }


            ObserverDbContext _db = new ObserverDbContext();

            try
            {
                string sessionId   = Request.Cookies.Get("SessionId").Value;
                string sessionKey  = Request.Cookies.Get("SessionKey").Value;
                string myUserAgent = Request.UserAgent;
                var    session     = _db.LoginSessions
                                     .Where(e => e.Id == sessionId)
                                     .FirstOrDefault();


                if (session.UserAgent == myUserAgent && session.Key == sessionKey && (session.Status == 3 || session.Status == 5) && session.Status != 6 && session.SessionDate.AddMonths(2) > DateTime.UtcNow)
                {
                    ApplicationUser user = UserManager.FindById(session.Users.Id);
                    await SignInManager.SignInAsync(user, true, true);

                    string             newId      = Guid.NewGuid().ToString();
                    string             newKey     = HashingAlgorithmServiceManager.GenerateSHA256(Encoding.ASCII.GetBytes(EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()), Encoding.ASCII.GetBytes(EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()));
                    LoginSessionsModel newSession = new LoginSessionsModel()
                    {
                        Id           = newId,
                        Key          = newKey,
                        Status       = 3,
                        Users        = session.Users,
                        Ip           = Request.UserHostAddress,
                        UserAgent    = Request.UserAgent,
                        DateCreation = DateTime.UtcNow,
                        SessionDate  = session.SessionDate
                    };
                    session.Status = 6;

                    HttpCookie SessionCookie = new HttpCookie("SessionId");
                    SessionCookie.Value   = newId;
                    SessionCookie.Expires = DateTime.Now.AddMonths(2);
                    Response.SetCookie(SessionCookie);

                    HttpCookie SessionKeyCookie = new HttpCookie("SessionKey");
                    SessionKeyCookie.Value   = newKey;
                    SessionKeyCookie.Expires = DateTime.Now.AddMonths(2);
                    Response.SetCookie(SessionKeyCookie);

                    _db.LoginSessions.Add(newSession);
                    _db.SaveChanges();

                    if (String.IsNullOrEmpty(ReturnUrl))
                    {
                        return(RedirectToAction("Index", "Home", new { status = 13, name = session.Users.Name }));
                    }
                    else
                    {
                        if (ReturnUrl.Contains("?"))
                        {
                            ReturnUrl = ReturnUrl + "&status=13&name=" + session.Users.Name;
                        }
                        else
                        {
                            ReturnUrl = ReturnUrl + "?status=13&name=" + session.Users.Name;
                        }
                        return(Redirect(ReturnUrl));
                    }
                }
                else
                {
                    string             loginSessionId = Guid.NewGuid().ToString();
                    string             key            = EncryptionAlgorithmServiceManager.GetRNGGuid().ToString();
                    Uri                url            = new Uri(Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/QRLogin?Id=" + loginSessionId + "&Key=" + key);
                    string             image          = QRCodeServiceManager.GenerateLoginQRCode(url.ToString());
                    LoginSessionsModel loginSession   = new LoginSessionsModel()
                    {
                        Id           = loginSessionId,
                        Status       = 1,
                        Key          = key,
                        Ip           = Request.UserHostAddress,
                        UserAgent    = Request.UserAgent,
                        DateCreation = DateTime.UtcNow,
                        SessionDate  = DateTime.UtcNow,
                        Path         = ReturnUrl
                    };
                    session.Status = 6;
                    _db.LoginSessions.Add(loginSession);
                    _db.SaveChanges();
                    ViewBag.LoginSessionId = loginSessionId;
                    ViewBag.Key            = key;
                    ViewBag.QRImage        = image;

                    HttpCookie SessionCookie = new HttpCookie("SessionId");
                    SessionCookie.Value   = null;
                    SessionCookie.Expires = DateTime.Now.AddYears(-10);
                    Response.SetCookie(SessionCookie);

                    HttpCookie SessionKeyCookie = new HttpCookie("SessionKey");
                    SessionKeyCookie.Value   = null;
                    SessionKeyCookie.Expires = DateTime.Now.AddYears(-10);
                    Response.SetCookie(SessionKeyCookie);

                    return(View("Login"));
                }
            } catch (NullReferenceException e)
            {
                e.ToString();
                string             loginSessionId = Guid.NewGuid().ToString();
                string             key            = EncryptionAlgorithmServiceManager.GetRNGGuid().ToString();
                Uri                url            = new Uri(Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/QRLogin?Id=" + loginSessionId + "&Key=" + key);
                string             image          = QRCodeServiceManager.GenerateLoginQRCode(url.ToString());
                LoginSessionsModel loginSession   = new LoginSessionsModel()
                {
                    Id           = loginSessionId,
                    Status       = 1,
                    Key          = key,
                    Ip           = Request.UserHostAddress,
                    UserAgent    = Request.UserAgent,
                    DateCreation = DateTime.UtcNow,
                    SessionDate  = DateTime.UtcNow,
                    Path         = ReturnUrl
                };
                _db.LoginSessions.Add(loginSession);
                _db.SaveChanges();
                ViewBag.LoginSessionId = loginSessionId;
                ViewBag.Key            = key;
                ViewBag.QRImage        = image;

                HttpCookie SessionCookie = new HttpCookie("SessionId");
                SessionCookie.Value   = null;
                SessionCookie.Expires = DateTime.Now.AddYears(-10);
                Response.SetCookie(SessionCookie);

                HttpCookie SessionKeyCookie = new HttpCookie("SessionKey");
                SessionKeyCookie.Value   = null;
                SessionKeyCookie.Expires = DateTime.Now.AddYears(-10);
                Response.SetCookie(SessionKeyCookie);

                return(View("Login"));
            }
        }
        /*
         * Method
         * 1 - No previous step
         * 2 - Insert new step as level 1 priority
         * 3 - Insert new step as last level priority
         */

        public static bool CreateStep(string AspId, StepsModel model, int Method, string ObserveId)
        {
            ObserverDbContext _db = new ObserverDbContext();

            ObservesModel queryModel = _db.Observes
                                       .Where(e => e.Id == ObserveId)
                                       .FirstOrDefault();

            try
            {
                if (model.PC_Method.Id != null)
                {
                    PCMethodsModel pcMethodsModel = _db.PCMethods.Where(e => e.Id == model.PC_Method.Id).FirstOrDefault();
                    model.PC_Method = pcMethodsModel;
                }
            } catch (NullReferenceException e)
            {
                e.ToString();
            }

            if (AspId == queryModel.Users.Id)
            {
                model.Observes    = queryModel;
                model.CheckedTime = DateTime.UtcNow;

                if (Method == 1)
                {
                    model.Order = 1;
                    _db.Steps.Add(model);
                    _db.SaveChanges();
                }
                else if (Method == 2)
                {
                    var modelList = _db.Steps
                                    .Where(e => e.Observes.Id == ObserveId)
                                    .OrderByDescending(e => e.Order)
                                    .ToList();

                    foreach (StepsModel item in modelList)
                    {
                        item.Order = item.Order + 1;
                    }

                    model.Order = 1;
                    _db.Steps.Add(model);
                    _db.SaveChanges();
                }
                else if (Method == 3)
                {
                    int countStep = _db.Steps
                                    .Where(e => e.Observes.Id == model.Observes.Id && e.Deleted == false)
                                    .Count();

                    model.Order = countStep + 1;
                    _db.Steps.Add(model);
                    _db.SaveChanges();
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public static async Task <int> RunExecution()
        {
            ObserverDbContext _db = new ObserverDbContext();

            int count = 0;

            var query1 = _db.Observes
                         .Where(e => e.Status == 1 && e.Deleted == false)
                         .ToList();

            var query2 = _db.Steps;

            foreach (var item in query1)
            {
                try
                {
                    if (item.NextRun <= DateTime.UtcNow && item.Interval != 0)
                    {
                        var queryTemp             = query2.Where(e => e.Observes.Id == item.Id && e.Deleted == false).OrderBy(e => e.Order).ToList();
                        Uri uri                   = null;
                        HttpClientHandler handler = new HttpClientHandler();
                        handler.CookieContainer = new CookieContainer();
                        StringContent       queryString = null;
                        HttpClient          client      = new HttpClient(handler);
                        string              respond     = null;
                        HttpResponseMessage response    = null;

                        foreach (var item2 in queryTemp)
                        {
                            string decrypt = null;

                            if (item2.SetHeader == 0)
                            {
                                handler = new HttpClientHandler();
                                client  = new HttpClient(handler);
                            }

                            if (item2.PC2 != null)
                            {
                                decrypt = EncryptionAlgorithmServiceManager.DecryptStringFromBytes_Aes(Convert.FromBase64String(item2.PC2), Convert.FromBase64String(_db._AESSecretKeyS), Convert.FromBase64String(item2.PC2Secret));
                            }

                            uri = new Uri(item2.Url);

                            if (item2.SetHeader == 2)
                            {
                                handler.CookieContainer.SetCookies(uri, item2.PredefinedHeader);
                            }
                            if (item2.Method == 2)
                            {
                                if (int.Parse(item2.PC_Method.Id) == 1)
                                {
                                    email_password model = new email_password()
                                    {
                                        email    = item2.PC1,
                                        password = decrypt
                                    };
                                    queryString = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");
                                }
                                else if (int.Parse(item2.PC_Method.Id) >= 3)
                                {
                                    var query = _db.PCMethods
                                                .Where(e => e.Id == item2.PC_Method.Id)
                                                .FirstOrDefault();

                                    var list = query.List_PCMethodDatas;

                                    if (query.ContentType == 1)
                                    {
                                        string s      = "{ ";
                                        int    counts = 0;

                                        foreach (var items in list)
                                        {
                                            if (counts == 0)
                                            {
                                                s = s + "\"" + items.Key + "\": " + "\"" + items.Value + "\" ";
                                            }
                                            else
                                            {
                                                s = s + ",\"" + items.Key + "\": " + "\"" + items.Value + "\" ";
                                            }

                                            counts = counts + 1;
                                        }

                                        s           = s + "}";
                                        queryString = new StringContent(s, Encoding.UTF8, "application/json");
                                    }
                                    else if (query.ContentType == 2)
                                    {
                                        string content = null;
                                        foreach (var items in list)
                                        {
                                            content = content + items.Value;
                                        }
                                        if (item2.PC1 != null)
                                        {
                                            content = content + "&" + query.PC1 + "=" + item2.PC1;
                                        }
                                        if (item2.PC2 != null)
                                        {
                                            content = content + "&" + query.PC2 + "=" + decrypt;
                                        }

                                        queryString = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
                                    }
                                    else if (query.ContentType == 3)
                                    {
                                        string content = "-----------------------------114782935826962Content-Disposition: form-data; name='__EVENTTARGET'-----------------------------114782935826962Content-Disposition: form-data; name='__EVENTARGUMENT'-----------------------------114782935826962Content-Disposition: form-data; name='__VIEWSTATEGENERATOR'CF6B32F0-----------------------------114782935826962Content-Disposition: form-data; name='__SCROLLPOSITIONX'0-----------------------------114782935826962Content-Disposition: form-data; name='__SCROLLPOSITIONY'226.39999389648438-----------------------------114782935826962Content-Disposition: form-data; name='__VIEWSTATEENCRYPTED'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$hflApplicationID'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$hflMode'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$ImgEvents.x'12-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$ImgEvents.y'6-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$GeneralAttachments$txtDescriptions'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$GeneralAttachments$fupAttachment'; filename=''Content-Type: application/octet-stream-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$GeneralAttachments$hflApplicationID'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$GeneralAttachments$hflHDNID'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$GeneralAttachments$hflArea'-----------------------------114782935826962Content-Disposition: form-data; name='ctl00$ContentPlaceHolder1$Submission$hflApplicationID'";
                                        foreach (var items in list)
                                        {
                                            content = content + items.Value;
                                        }
                                        if (item2.PC1 != null)
                                        {
                                            content = content + "&" + query.PC1 + "=" + item2.PC1;
                                        }
                                        if (item2.PC2 != null)
                                        {
                                            content = content + "&" + query.PC2 + "=" + decrypt;
                                        }

                                        queryString = new StringContent(content, Encoding.UTF8, "multipart/form-data");
                                        queryString.Headers.Remove("Content-Type");
                                        queryString.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=---------------------------114782935826962");
                                    }
                                }
                                try
                                {
                                    response = await client.PostAsync(uri, queryString).ConfigureAwait(false);

                                    respond = await response.Content.ReadAsStringAsync();
                                } catch (HttpRequestException e)
                                {
                                    StepsModel step = _db.Steps.Where(r => r.Id == item2.Id).FirstOrDefault();

                                    string innerException = null;
                                    if (e.InnerException != null)
                                    {
                                        if (e.InnerException.InnerException != null)
                                        {
                                            innerException = e.InnerException.InnerException.Message;
                                        }
                                    }
                                    StepSocketExceptionsModel model = new StepSocketExceptionsModel()
                                    {
                                        Id      = Guid.NewGuid().ToString(),
                                        Steps   = step,
                                        Url     = item2.Url,
                                        Message = innerException,
                                        Date    = DateTime.UtcNow
                                    };

                                    _db.StepSocketExceptions.Add(model);
                                    _db.SaveChanges();
                                } catch (Exception e)
                                {
                                    string innerException = null;

                                    if (e.InnerException != null)
                                    {
                                        innerException = e.InnerException.Message;
                                    }
                                    ErrorLoggingsModel model = new ErrorLoggingsModel()
                                    {
                                        Id             = Guid.NewGuid().ToString(),
                                        Source         = "Observe RunExecution",
                                        Message        = e.Message,
                                        InnerException = innerException,
                                        Date           = DateTime.UtcNow
                                    };

                                    _db.ErrorLoggings.Add(model);
                                    _db.SaveChanges();
                                }
                            }
                            else if (item2.Method == 1)
                            {
                                try
                                {
                                    response = await client.GetAsync(uri).ConfigureAwait(false);

                                    respond = await response.Content.ReadAsStringAsync();
                                }
                                catch (HttpRequestException e)
                                {
                                    StepsModel step           = _db.Steps.Where(r => r.Id == item2.Id).FirstOrDefault();
                                    string     innerException = null;
                                    if (e.InnerException != null)
                                    {
                                        if (e.InnerException.InnerException != null)
                                        {
                                            innerException = e.InnerException.InnerException.Message;
                                        }
                                    }
                                    StepSocketExceptionsModel model = new StepSocketExceptionsModel()
                                    {
                                        Id      = Guid.NewGuid().ToString(),
                                        Steps   = step,
                                        Url     = item2.Url,
                                        Message = innerException,
                                        Date    = DateTime.UtcNow
                                    };

                                    _db.StepSocketExceptions.Add(model);
                                    _db.SaveChanges();
                                }
                                catch (Exception e)
                                {
                                    string innerException = null;

                                    if (e.InnerException != null)
                                    {
                                        innerException = e.InnerException.Message;
                                    }
                                    ErrorLoggingsModel model = new ErrorLoggingsModel()
                                    {
                                        Id             = Guid.NewGuid().ToString(),
                                        Source         = "Observe RunExecution",
                                        Message        = e.Message,
                                        InnerException = innerException,
                                        Date           = DateTime.UtcNow
                                    };

                                    _db.ErrorLoggings.Add(model);
                                    _db.SaveChanges();
                                }
                            }

                            if (item2.Catches != null)
                            {
                                CatchServiceManager.Catch(item2.Id, respond);
                            }
                        }
                        ExecuteInterval(item.Id);
                        count = count + 1;
                    }
                } catch (UriFormatException e)
                {
                    e.ToString();
                    item.Status = 0;
                    _db.SaveChanges();
                }
            }
            var webConfig = _db.WebConfigs.Where(e => e.Id == "E7461932-0A62-4AC0-9D34-23C8C2B839B2").FirstOrDefault();

            webConfig.Timestamp = DateTime.UtcNow;

            var webConfigSuccess = _db.WebConfigs.Where(e => e.Id == "9F0EF51A-E5D0-486E-A0C9-D1E003D3C0D8").FirstOrDefault();

            if (webConfigSuccess.Timestamp.AddHours(1) < DateTime.UtcNow)
            {
                webConfigSuccess.Value     = count.ToString();
                webConfigSuccess.Timestamp = DateTime.UtcNow;
            }
            else
            {
                webConfigSuccess.Value = (int.Parse(webConfigSuccess.Value) + count).ToString();
            }

            _db.SaveChanges();
            return(count);
        }
        public async Task <ActionResult> QRLogin(string Id, string Key)
        {
            ObserverDbContext _db    = new ObserverDbContext();
            string            userId = null;

            try
            {
                string sessionId  = Request.Cookies.Get("SessionId").Value;
                string sessionKey = Request.Cookies.Get("SessionKey").Value;

                var session = _db.LoginSessions
                              .Where(e => e.Id == sessionId)
                              .FirstOrDefault();

                if (session.Key == sessionKey && (session.Status == 3 || session.Status == 5) && session.Status != 6 && session.SessionDate.AddMonths(2) > DateTime.UtcNow)
                {
                    ApplicationUser user = UserManager.FindById(session.Users.Id);
                    userId = user.Id;
                    await SignInManager.SignInAsync(user, true, true);

                    string             newId      = Guid.NewGuid().ToString();
                    string             newKey     = HashingAlgorithmServiceManager.GenerateSHA256(Encoding.ASCII.GetBytes(EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()), Encoding.ASCII.GetBytes(EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()));
                    LoginSessionsModel newSession = new LoginSessionsModel()
                    {
                        Id           = newId,
                        Key          = newKey,
                        Status       = 3,
                        Users        = session.Users,
                        DateCreation = DateTime.UtcNow,
                        SessionDate  = session.SessionDate
                    };
                    session.Status = 6;

                    HttpCookie SessionCookie = new HttpCookie("SessionId");
                    SessionCookie.Value   = newId;
                    SessionCookie.Expires = DateTime.Now.AddMonths(2);
                    Response.SetCookie(SessionCookie);

                    HttpCookie SessionKeyCookie = new HttpCookie("SessionKey");
                    SessionKeyCookie.Value   = newKey;
                    SessionKeyCookie.Expires = DateTime.Now.AddMonths(2);
                    Response.SetCookie(SessionKeyCookie);

                    _db.LoginSessions.Add(newSession);
                    _db.SaveChanges();
                }
                else
                {
                    RedirectToAction("Login", "Identity");
                }
            }
            catch (NullReferenceException e)
            {
                RedirectToAction("Login", "Identity");
            }

            var loginSession = _db.LoginSessions
                               .Where(e => e.Id == Id)
                               .FirstOrDefault();

            if (loginSession.SessionDate.AddMinutes(30) < DateTime.UtcNow)
            {
                loginSession.Status = 6;
                _db.SaveChanges();
                return(RedirectToAction("Index", "Home", new { status = 12 }));
            }
            else
            {
                var user = _db.Users
                           .Where(e => e.Id == userId)
                           .FirstOrDefault();

                string proceedKey = EncryptionAlgorithmServiceManager.GetRNGGuid().ToString();
                Random random     = new Random();
                int    randomInt  = random.Next(999);
                while (randomInt < 100)
                {
                    randomInt = random.Next(999);
                }
                string sessionCode = randomInt.ToString();

                if (loginSession.Status == 1)
                {
                    loginSession.Status      = 2;
                    loginSession.Users       = user;
                    loginSession.QRKey       = proceedKey;
                    loginSession.SessionCode = sessionCode;
                    loginSession.SessionDate = DateTime.UtcNow.AddSeconds(30);
                    _db.SaveChanges();
                }

                ViewBag.SessionId   = Id;
                ViewBag.ProceedKey  = proceedKey;
                ViewBag.SessionCode = sessionCode;
                return(View());
            }
        }
        public ActionResult Register(RegisterInputModel Input)
        {
            ObserverDbContext _db = new ObserverDbContext();

            if (User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var pendingUsers = _db.PendingUsers
                               .Where(e => e.Email == Input.Email)
                               .OrderByDescending(e => e.DateCreated)
                               .ToList();

            var user = _db.Users
                       .Where(e => e.Email == Input.Email)
                       .ToList();

            if (user.Count > 0)
            {
                ViewBag.ErrorMessage = "Error: The email has been used.";
                return(View());
            }
            else if (pendingUsers.Count >= 1)
            {
                var pendingUser = pendingUsers.FirstOrDefault();
                if (pendingUser.Status == 1)
                {
                    ViewBag.ErrorMessage = "Error: The email has been used.";
                    return(View());
                }
                else if (pendingUser.Status == 0 || pendingUser.Status == 2)
                {
                    if (pendingUser.DateCreated.AddHours(1) < DateTime.UtcNow)
                    {
                        pendingUser.Status = 2;

                        string            id      = Guid.NewGuid().ToString();
                        string            key     = EncryptionAlgorithmServiceManager.GetRNGGuid().ToString();
                        PendingUsersModel newUser = new PendingUsersModel()
                        {
                            Id          = id,
                            DisplayName = Input.Name,
                            Email       = Input.Email,
                            Key         = key,
                            Status      = 0,
                            DateCreated = DateTime.UtcNow
                        };

                        _db.PendingUsers.Add(newUser);
                        _db.SaveChanges();
                        EmailServiceManager.AccountPendingVerification(Input.Name, Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/VerifyEmail?Id=" + id + "&Key=" + key, Input.Email);
                        return(RedirectToAction("Index", "Home", new { Status = 7, email = Input.Email }));
                    }
                    else
                    {
                        int minute = DateTime.UtcNow.Subtract(pendingUser.DateCreated).Minutes;
                        return(RedirectToAction("Index", "Home", new { Status = 6, min = minute }));
                    }
                }
                return(View());
            }
            else
            {
                string            key     = Guid.NewGuid().ToString();
                string            id      = Guid.NewGuid().ToString();
                PendingUsersModel newUser = new PendingUsersModel()
                {
                    Id          = id,
                    DisplayName = Input.Name,
                    Email       = Input.Email,
                    Key         = key,
                    Status      = 0,
                    DateCreated = DateTime.UtcNow
                };

                _db.PendingUsers.Add(newUser);
                _db.SaveChanges();
                EmailServiceManager.AccountPendingVerification(Input.Name, Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/VerifyEmail?Id=" + id + "&Key=" + key, Input.Email);
                return(RedirectToAction("Index", "Home", new { Status = 7, email = Input.Email }));
            }
        }
Пример #27
0
        public async Task <JsonResult> CheckLoginStatus(string SessionId, string SessionKey)
        {
            ObserverDbContext _db = new ObserverDbContext();

            var query = _db.LoginSessions
                        .Where(e => e.Id == SessionId)
                        .FirstOrDefault();

            if (query.Key == SessionKey)
            {
                if (query.SessionDate.AddMinutes(30) < DateTime.UtcNow)
                {
                    query.Status = 6;
                    _db.SaveChanges();
                    return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'Expired' }")));
                }
                else if (query.Status == 3 || query.Status == 5)
                {
                    ApplicationUser user = UserManager.Users
                                           .Where(e => e.Id == query.Users.Id)
                                           .FirstOrDefault();

                    await SignInManager.SignInAsync(user, true, true);

                    string key = HashingAlgorithmServiceManager.GenerateSHA256(Encoding.ASCII.GetBytes(EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()), Encoding.ASCII.GetBytes(EncryptionAlgorithmServiceManager.GetRNGGuid().ToString()));
                    query.Key = key;
                    _db.SaveChanges();

                    HttpCookie SessionCookie = new HttpCookie("SessionId");
                    SessionCookie.Value   = query.Id;
                    SessionCookie.Expires = DateTime.Now.AddMonths(2);
                    Response.SetCookie(SessionCookie);

                    HttpCookie SessionKeyCookie = new HttpCookie("SessionKey");
                    SessionKeyCookie.Value   = key;
                    SessionKeyCookie.Expires = DateTime.Now.AddMonths(2);
                    Response.SetCookie(SessionKeyCookie);

                    return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'LoginReady', 'Path': '" + query.Path + "' }")));
                }
                else if (query.Status == 1 || query.Status == 2 || query.Status == 4)
                {
                    if (query.Status == 2)
                    {
                        return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'QRPending', 'SessionCode': '" + query.SessionCode + "' }")));
                    }
                    else
                    {
                        return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'Pending' }")));
                    }
                }
                else
                {
                    return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'Expired' }")));
                }
            }
            else
            {
                return(Json(new JavaScriptSerializer().Deserialize <object>("{ 'Status': 'Invalid Session' }")));
            }
        }