private void DeleteService(int id)
        {
            SocialTFSEntities db = new SocialTFSEntities();
            bool isDeleted;

            try
            {
                var delInst = db.ServiceInstance.Where(si => si.pk_id == id);
                foreach (ServiceInstance s in delInst)
                {
                    db.ServiceInstance.DeleteObject(s);
                }
                //db.ServiceInstance.DeleteAllOnSubmit(db.ServiceInstance.Where(si => si.pk_id == id));
                db.SaveChanges();
                isDeleted = true;
            }
            catch (Exception)
            {
                isDeleted = false;
            }

            XDocument xml = new XDocument(
                            new XElement("Root",
                                new XElement("Deleted", isDeleted)));
            Response.Clear();
            Response.ContentType = "text/xml";
            Response.Write(xml);
            Response.End();
        }
        private void SaveWeights()
        {
            SocialTFSEntities db = new SocialTFSEntities();
            bool isSaved;

            XmlDocument requestXml = new XmlDocument();
            requestXml.Load(new XmlTextReader(new StreamReader(Request.InputStream)));
            try
            {
                foreach (XmlNode item in requestXml.SelectNodes("//weights/item"))
                {
                    FeatureScore featureScore = db.FeatureScore.Where(fs => fs.ServiceInstance.name == item.SelectSingleNode("service").InnerText && fs.pk_fk_feature == item.SelectSingleNode("feature").InnerText).Single();
                    featureScore.score = Int32.Parse(item.SelectSingleNode("weight").InnerText);
                }
                db.SaveChanges();
                isSaved = true;
            }
            catch (Exception)
            {
                isSaved = false;
            }

            XDocument xml = new XDocument(
                            new XElement("Root",
                                new XElement("Saved", isSaved)));
            Response.Clear();
            Response.ContentType = "text/xml";
            Response.Write(xml);
            Response.End();
        }
        private void SaveUsers()
        {
            SocialTFSEntities db = new SocialTFSEntities();

            XmlDocument requestXml = new XmlDocument();
            requestXml.Load(new XmlTextReader(new StreamReader(Request.InputStream)));

            List<string> mailError = new List<string>();

            foreach (XmlNode item in requestXml.SelectNodes("//users/user"))
            {
                try
                {
                    String passwd = Membership.GeneratePassword(10, 2);

                    User user = new User()
                    {
                        username = item.InnerText,
                        email = item.InnerText,
                        //password = (passwd)
                        password = (passwd)
                    };
                    db.User.AddObject(user);

                    if (WebUtility.SendEmail(item.InnerText, "SocialTFS invitation", GetBody(item.InnerText, passwd), true))
                        db.SaveChanges();
                    else
                        mailError.Add(item.InnerText);
                }
                catch
                {
                    mailError.Add(item.InnerText);
                }
            }

            XElement root = new XElement("Root");
            foreach (string item in mailError)
                root.Add(new XElement("NotSent", item));

            Response.Clear();
            Response.ContentType = "text/xml";
            Response.Write(new XDocument(root));
            Response.End();
        }
        private void ChangeAdminSettings()
        {
            string username = Request.Params["ctl00$MainContent$AdminUsernameTB"];
            string email = Request.Params["ctl00$MainContent$AdminEmailTB"];
            string password = Request.Params["ctl00$MainContent$PasswordTB"];
            string confirm = Request.Params["ctl00$MainContent$ConfirmTB"];

            SocialTFSEntities db = new SocialTFSEntities();

            User admin = db.User.Where(u => u.isAdmin).Single();
            bool changePassword = true;

            if (ChangePasswordCB.Checked)
                if (password.Equals(confirm))
                    admin.password = (password);
                else
                {
                    ErrorPA.Attributes.Add("class", "error");
                    ErrorPA.InnerText = "Passwords do not match.";
                    changePassword = false;
                }

            if (changePassword)
            {
                if (!db.User.Any(u => (u.username == username || u.email == email) && !u.isAdmin))
                {
                    admin.username = username;
                    admin.email = email;

                    db.SaveChanges();
                    ErrorPA.Attributes.Add("class", "confirm");
                    ErrorPA.InnerText = "Data stored";
                }
                else
                {
                    ErrorPA.Attributes.Add("class", "error");
                    ErrorPA.InnerText = "Username or email already exist.";
                }
            }
        }
        private void ChangeSmtpSettings()
        {
            SocialTFSEntities db = new SocialTFSEntities();

            try
            {
                bool changePassword = true;
                if (ChangeMailPasswordCB.Checked)
                    if (Request.Params["ctl00$MainContent$MailPasswordTB"].Equals(Request.Params["ctl00$MainContent$MailConfirmTB"]))
                        //db.Setting.Where(s => s.key == "MailPassword").Single().value = db.EncDecRc4("key",Request.Params["ctl00$MainContent$MailPasswordTB"]);
                        db.Setting.Where(s => s.key == "MailPassword").Single().value = Request.Params["ctl00$MainContent$MailPasswordTB"];
                    else
                    {
                        ErrorPA.Attributes.Add("class", "error");
                        ErrorPA.InnerText = "Passwords do not match.";
                        changePassword = false;
                    }

                if (changePassword)
                {
                    db.Setting.Where(s => s.key == "SmtpServer").Single().value = Request.Params["ctl00$MainContent$SmtpServerTB"];
                    db.Setting.Where(s => s.key == "SmtpPort").Single().value = Request.Params["ctl00$MainContent$SmtpPortTB"];
                    db.Setting.Where(s => s.key == "SmtpSecurity").Single().value = Request.Params["ctl00$MainContent$SmtpSecuritySE"];
                    db.Setting.Where(s => s.key == "MailAddress").Single().value = Request.Params["ctl00$MainContent$MailAddressTB"];

                    db.SaveChanges();
                    ErrorPA.Attributes.Add("class", "confirm");
                    ErrorPA.InnerText = "Data stored.";
                }
            }
            catch
            {
                try
                {
                    var list = new List<Setting>(){
                        new Setting () {
                            key = "SmtpServer",
                            value = Request.Params["ctl00$MainContent$SmtpServerTB"]
                        },
                        new Setting () {
                            key = "SmtpPort",
                            value = Request.Params["ctl00$MainContent$SmtpPortTB"]
                        },
                        new Setting () {
                            key = "SmtpSecurity",
                            value = Request.Params["ctl00$MainContent$SmtpSecuritySE"]
                        },
                        new Setting () {
                            key = "MailAddress",
                            value = Request.Params["ctl00$MainContent$MailAddressTB"]
                        },
                        new Setting () {
                            key = "MailPassword",
                            //value = db.EncDecRc4("key",Request.Params["ctl00$MainContent$MailPasswordTB"])
                            value = Request.Params["ctl00$MainContent$MailPasswordTB"]
                        }
                    };
                    foreach(Setting s in list)
                    {
                        db.Setting.AddObject(s);
                    }
                    /*
                    db.Setting.InsertAllOnSubmit(new List<Setting>(){
                        new Setting () {
                            key = "SmtpServer",
                            value = Request.Params["ctl00$MainContent$SmtpServerTB"]
                        },
                        new Setting () {
                            key = "SmtpPort",
                            value = Request.Params["ctl00$MainContent$SmtpPortTB"]
                        },
                        new Setting () {
                            key = "SmtpSecurity",
                            value = Request.Params["ctl00$MainContent$SmtpSecuritySE"]
                        },
                        new Setting () {
                            key = "MailAddress",
                            value = Request.Params["ctl00$MainContent$MailAddressTB"]
                        },
                        new Setting () {
                            key = "MailPassword",
                            value = db.EncDecRc4("key",Request.Params["ctl00$MainContent$MailPasswordTB"])
                        }
                    });
                     * */
                    db.SaveChanges();
                    ErrorPA.Attributes.Add("class", "confirm");
                    ErrorPA.InnerText = "Data stored.";
                }
                catch
                {
                    ErrorPA.Attributes.Add("class", "error");
                    ErrorPA.InnerText = "Something was wrong. Please try again later.";
                }
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            SocialTFSEntities db = new SocialTFSEntities();

            String token = Request.QueryString["token"];
            Setting recoveringToken = null;
            Setting recoveringTime = null;

            try
            {
                recoveringTime = db.Setting.Where(s => s.key == "RecoveringTime").Single();
                recoveringToken = db.Setting.Where(s => s.key == "RecoveringToken").Single();
            }
            catch { }

            if (Request.RequestType == "GET")
            {
                if (String.IsNullOrEmpty(token))
                {
                    if (recoveringTime == null || DateTime.Parse(recoveringTime.value) < DateTime.UtcNow - new TimeSpan(0, 5, 0))
                    {
                        String newToken = GenerateToken();

                        if (WebUtility.SendEmail(db.User.Where(u => u.isAdmin).Single().email, "Password recovering", GetBody(newToken), true))
                        {
                            if (recoveringToken != null)
                            {
                                recoveringToken.value = newToken;
                                recoveringTime.value = DateTime.UtcNow.ToString();
                            }
                            else
                            {
                                var list = new List<Setting>(){
                                new Setting () {
                                    key = "RecoveringToken",
                                    value = newToken
                                },
                                new Setting () {
                                    key = "RecoveringTime",
                                    value = DateTime.UtcNow.ToString()
                                }};
                                foreach(Setting s in list)
                                {
                                    db.Setting.AddObject(s);
                                }
                                /*
                                db.Setting.AddObject(
                                    new List<Setting>(){
                                new Setting () {
                                    key = "RecoveringToken",
                                    value = newToken
                                },
                                new Setting () {
                                    key = "RecoveringTime",
                                    value = DateTime.UtcNow.ToString()
                                }});
                                 * */
                            }
                            db.SaveChanges();
                            Response.Redirect("Login.aspx?type=confirm&message=Email sent, check your email inbox.");
                        }
                        else
                            Response.Redirect("Login.aspx?type=error&message=Is not possible recover the password, the smtp server is not set.");
                    }
                    else
                        Response.Redirect("Login.aspx?type=error&message=You have sent a request less than 5 minutes ago. Please, try again later.");
                }
                else
                {
                    if (recoveringToken == null || recoveringToken.value != token)
                        Response.Redirect("Login.aspx?type=error&message=Wrong token.");
                }
            }
            else if (Request.RequestType == "POST")
            {
                db.User.Where(u => u.isAdmin).Single().password = (Request.Params["ctl00$MainContent$PasswordTB"]);
                var set = db.Setting.Where(s => s.key == "RecoveringToken" || s.key == "RecoveringTime");
                foreach (Setting s in set)
                {
                    db.Setting.DeleteObject(s);
                }
                //db.Setting.DeleteAllOnSubmit(db.Setting.Where(s => s.key == "RecoveringToken" || s.key == "RecoveringTime"));
                db.SaveChanges();
                Response.Redirect("Login.aspx?type=confirm&message=Password changed successfully.");
            }
        }
        private void SaveService()
        {
            SocialTFSEntities db = new SocialTFSEntities();
            Service service = new Service();
            int id = Int32.Parse(Request.Params["ctl00$MainContent$ServiceSE"]);
            try
            {
                service = db.Service.Where(s => s.pk_id == id).Single();
            }
            catch
            {
                ErrorPA.Style.Remove("display");
            }

            IService iService = ServiceFactory.getService(service.name);
            ServiceInstance serviceInstance = new ServiceInstance();
            if (!iService.GetPrivateFeatures().Contains(FeaturesType.MoreInstance))
            {
                PreregisteredService preser = db.PreregisteredService.Where(ps => ps.service == service.pk_id).Single();

                serviceInstance.name = preser.name;
                serviceInstance.host = preser.host;
                serviceInstance.fk_service = preser.service;
                serviceInstance.consumerKey = preser.consumerKey;
                serviceInstance.consumerSecret = preser.consumerSecret;
                db.ServiceInstance.AddObject(serviceInstance);
            }
            else
            {
                string consumerKey = null, consumerSecret = null;
                string host = Request.Params["ctl00$MainContent$HostTB"];

                if (host.EndsWith(@"/"))
                    host = host.Remove(host.Length - 1);

                if (iService.GetPrivateFeatures().Contains(FeaturesType.OAuth1))
                {
                    consumerKey = Request.Params["ctl00$MainContent$ConsumerKeyTB"];
                    consumerSecret = Request.Params["ctl00$MainContent$ConsumerSecretTB"];
                }

                serviceInstance.name = Request.Params["ctl00$MainContent$NameTB"];
                serviceInstance.host = host;
                serviceInstance.Service = service;
                serviceInstance.consumerKey = consumerKey;
                serviceInstance.consumerSecret = consumerSecret;

                db.ServiceInstance.AddObject(serviceInstance);
            }

            db.SaveChanges();

            if (iService.GetPrivateFeatures().Contains(FeaturesType.Labels))
            {
                iService.Get(FeaturesType.Labels, Request.Params["ctl00$MainContent$GitHubLabelTB"]);
            }

            foreach (FeaturesType featureType in iService.GetScoredFeatures())
            {
                db.FeatureScore.AddObject(new FeatureScore()
                {

                    pk_fk_serviceInstance = serviceInstance.pk_id,
                    pk_fk_feature = featureType.ToString(),
                    score = 1
                });
            }
            //TODO update the new version (leave comment from the next line)
            //dbService.version = newServiceVersion;
            db.SaveChanges();

            Response.Redirect("Services.aspx");
        }
        private void SaveService()
        {
            if (!String.IsNullOrEmpty(NameTB.Attributes["required"]) && String.IsNullOrEmpty(Request.Params["ctl00$MainContent$NameTB"]))
                Response.Redirect("Services.aspx");
            if (!String.IsNullOrEmpty(HostTB.Attributes["required"]) && String.IsNullOrEmpty(Request.Params["ctl00$MainContent$HostTB"]))
                Response.Redirect("Services.aspx");
            if (!String.IsNullOrEmpty(ConsumerKeyTB.Attributes["required"]) && String.IsNullOrEmpty(Request.Params["ctl00$MainContent$ConsumerKeyTB"]))
                Response.Redirect("Services.aspx");
            if (!String.IsNullOrEmpty(ConsumerSecretTB.Attributes["required"]) && String.IsNullOrEmpty(Request.Params["ctl00$MainContent$ConsumerSecretTB"]))
                Response.Redirect("Services.aspx");

            SocialTFSEntities db = new SocialTFSEntities();

            ServiceInstance service =
                   (from serin in db.ServiceInstance
                    where serin.pk_id == Int32.Parse(Request.QueryString["id"])
                    select serin).Single();

            IService iService = ServiceFactory.getService(service.Service.name);

            if (iService.GetPrivateFeatures().Contains(FeaturesType.Labels))
            {
                if (String.IsNullOrEmpty(Request.Params["ctl00$MainContent$GitHubLabelTB"]))
                {
                    System.Diagnostics.Debug.WriteLine("label nulla");
                    ServiceFactory.GitHubLabels = String.Empty;
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("labels associate " + Request.Params["ctl00$MainContent$GitHubLabelTB"]);
                    ServiceFactory.GitHubLabels = Request.Params["ctl00$MainContent$GitHubLabelTB"];
                }
            }
            else
            {
                service.name = Request.Params["ctl00$MainContent$NameTB"];
                service.host = Request.Params["ctl00$MainContent$HostTB"];
                if (iService.GetPrivateFeatures().Contains(FeaturesType.OAuth1))
                {
                    service.consumerKey = Request.Params["ctl00$MainContent$ConsumerKeyTB"];
                    service.consumerSecret = Request.Params["ctl00$MainContent$ConsumerSecretTB"];
                }
                else if (iService.GetPrivateFeatures().Contains(FeaturesType.TFSAuthenticationWithDomain))
                {
                    service.consumerKey = Request.Params["ctl00$MainContent$UsernameTB"];
                    service.consumerSecret = Request.Params["ctl00$MainContent$PasswordTB"];
                }

                db.SaveChanges();
            }

            Response.Redirect("Services.aspx");
        }