protected void btnPost_Click(object sender, EventArgs e)
        {
            if (Session["userID"] != null)
            {
                // connect
                using (DefaultConnection db = new DefaultConnection())
                {
                    // create new post object in memory
                    post postObj = new post();
                    // get user id
                    Int32 userID = Convert.ToInt32(Session["userID"]);
                    String username = Session["username"].ToString();

                    // fill new post content
                    postObj.message = txtMessage.Text;
                    postObj.user_id = userID;
                    postObj.dislike_count = 0;
                    postObj.post_by = username;

                    // add post to database
                    db.posts.Add(postObj);

                    // save the new post
                    db.SaveChanges();

                    txtMessage.Text = "";
                    lblStatus.Text = "";

                    GetMessages();
                }
            } else
            {
                lblStatus.Text = "You must log in first to post";
            }
        }
        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            if (Session["userID"] != null)
            {
                //connect
                using (DefaultConnection db = new DefaultConnection())
                {
                    if (!String.IsNullOrEmpty(Request.QueryString["id"]))
                    {
                        //get the id from the url
                        Int32 postID = Convert.ToInt32(Request.QueryString["id"]);

                        // look up post
                        post postObj = (from p in db.posts
                                        where p.id == postID
                                        select p).FirstOrDefault();

                        postObj.message = txtNewMsg.Text;

                        //save updated post
                        db.SaveChanges();

                        // redirect to user profile page
                        Response.Redirect("profile.aspx");
                    }
                }
            }
            else
            {
                Response.Redirect("default.aspx");
            }
        }
 protected void GetMessages()
 {
     using (DefaultConnection db = new DefaultConnection())
     {
         grdMessages.DataSource = db.posts.ToArray();
         grdMessages.DataBind();
     }
 }
        protected void btnLogin_Click(object sender, EventArgs e)
        {
            //connect
            using (DefaultConnection db = new DefaultConnection())
            {
                // create user obj
                user userObj = new user();

                // get username from input value
                String username = txtUsername.Text;

                userObj = (from u in db.users
                           where u.username == username
                           select u).FirstOrDefault();

                // check if user exists
                if (userObj != null)
                {
                    String salt = userObj.salt;

                    // salt and hash the plain text password
                    String password = txtPassword.Text;

                    String pass_and_salt = password + salt;

                    // Create a new instance of the hash crypto service provider.
                    HashAlgorithm hashAlg = new SHA256CryptoServiceProvider();

                    // Convert the data to hash to an array of Bytes.
                    byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(pass_and_salt);

                    // Compute the Hash. This returns an array of Bytes.
                    byte[] bytHash = hashAlg.ComputeHash(bytValue);

                    // Optionally, represent the hash value as a base64-encoded string,
                    // For example, if you need to display the value or transmit it over a network.
                    string base64 = Convert.ToBase64String(bytHash);

                    if (userObj.password == base64)
                    {
                        //lblError.Text = "Valid Login";
                        //store the identity in the session object
                        Session["userID"] = userObj.id;
                        Session["username"] = userObj.username;

                        // redirect to departments page
                        Response.Redirect("default.aspx");
                    }
                    else
                    {
                        lblError.Text = "Invalid Login";
                    }
                } else
                {
                    lblError.Text = "Invalid Login";
                }
            }
        }
        protected void GetTheMsg()
        {
            using (DefaultConnection db = new DefaultConnection())
            {
                //get the id from the url
                Int32 postID = Convert.ToInt32(Request.QueryString["id"]);

                // look up post
                post postObj = (from p in db.posts
                           where p.id == postID
                           select p).FirstOrDefault();

                txtNewMsg.Text = postObj.message;
            }
        }
        protected void GetUserMsg()
        {
            using (DefaultConnection db = new DefaultConnection())
            {
                Int32 userID = Convert.ToInt32(Session["userID"]);

                // posts filtered for logged in user
                var posts = from p in db.posts
                            where p.user_id == userID
                            select p;

                // bind user posts to profile page gridview
                grdUserMsg.DataSource = posts.ToArray();
                grdUserMsg.DataBind();
            }
        }
        protected void grdUserMsg_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            // identify post id
            Int32 postID = Convert.ToInt32(grdUserMsg.DataKeys[e.RowIndex].Values["id"]);

            // connect
            using (DefaultConnection db = new DefaultConnection())
            {
                post postObj = (from p in db.posts
                                where p.id == postID
                                select p).FirstOrDefault();

                // delete
                db.posts.Remove(postObj);
                db.SaveChanges();

                //refresh grid
                GetUserMsg();
            }
        }
        protected void btnSignup_Click(object sender, EventArgs e)
        {
            // connect
            using (DefaultConnection db = new DefaultConnection())
            {
                // create a new user
                user userObj = new user();

                // fill user name from sign up form input
                userObj.username = txtUsername.Text;

                // salt and hash the plain text password
                String password = txtPassword.Text;
                String salt = CreateSalt(8);
                String pass_and_salt = password + salt;

                // Create a new instance of the hash crypto service provider.
                HashAlgorithm hashAlg = new SHA256CryptoServiceProvider();

                // Convert the data to hash to an array of Bytes.
                byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(pass_and_salt);

                // Compute the Hash. This returns an array of Bytes.
                byte[] bytHash = hashAlg.ComputeHash(bytValue);

                // Optionally, represent the hash value as a base64-encoded string,
                // For example, if you need to display the value or transmit it over a network.
                string base64 = Convert.ToBase64String(bytHash);

                userObj.password = base64;
                userObj.salt = salt;

                // save
                db.users.Add(userObj);
                db.SaveChanges();

                // redirect
                Response.Redirect("default.aspx");
            }
        }
        protected void grdMessages_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "DislikeMsg")
            {
                Int32 index = Convert.ToInt32(e.CommandArgument);
                Int32 postID = Convert.ToInt32(grdMessages.DataKeys[index].Values["id"]);

                //connect
                using (DefaultConnection db = new DefaultConnection())
                {
                    post postObj = (from p in db.posts
                                    where p.id == postID
                                    select p).FirstOrDefault();
                    // increase dislike count
                    postObj.dislike_count++;

                    db.SaveChanges();

                    // refresh grid
                    GetMessages();
                }
            }
        }