コード例 #1
0
        // POST api/<controller>
        //
        // Add user to the database
        //
        public HttpResponseMessage Post([FromBody] JsonUser value)
        {
            if (value == null)
            {
                Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid user information");
            }

            Models.Repository repository = new Models.Repository();
            MFUser            fbUser     = new MFUser
            {
                UserId    = value.UserId,
                Email     = value.Email,
                FirstName = value.FirstName,
                LastName  = value.LastName,
                Name      = value.Name
            };
            var mfUser = repository.CreateUser(fbUser);

            repository.SaveChanges();

            List <GroupMember> membership = repository.UserMembership(mfUser);

            if ((membership == null) || (membership.Count == 0))
            {
                Group defaultGroup = repository.FindGroupByCode("JYMF");
                repository.DefaultGroup(mfUser, defaultGroup, GroupRoleEnum.member);
                repository.SaveChanges();
            }


            return(Request.CreateResponse(HttpStatusCode.Created, "User added to application"));
        }
コード例 #2
0
        public static EventParticipant FromUser(MFUser user, string access_code)
        {
            EventParticipant p = new EventParticipant()
            {
                UserId    = user.UserId,
                FirstName = user.FirstName,
                LastName  = user.LastName,
                FullName  = user.Name,
                Image     = Facebook.FacebookUser.UserImage(user.UserId)
            };

            return(p);
        }
コード例 #3
0
        // GET: MFUsers/Details/5
        public ActionResult Details(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            MFUser mFUser = db.MFUsers.Find(id);

            if (mFUser == null)
            {
                return(HttpNotFound());
            }
            return(View(mFUser));
        }
コード例 #4
0
        public BaseController()
        {
            PartialRenderer = this;
            ViewRenderer    = this;

            // Ensure user is in database
            //
            if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
            {
                Repository db   = new Repository();
                MFUser     user = db.GetUserById(System.Web.HttpContext.Current.User.Identity.Name);
                if (user == null)
                {
                    user = db.CreateUser((Facebook.FacebookUser)System.Web.HttpContext.Current.User);
                    db.SaveChanges();
                }
            }
        }
コード例 #5
0
        public ActionResult DeleteConfirmed(string id)
        {
            MFUser mFUser = db.MFUsers.Find(id);
            var    groups = mFUser.GroupMembers.ToList();

            foreach (var group in groups)
            {
                db.GroupMembers.Remove(group);
            }
            var races = mFUser.Attendings.ToList();

            foreach (var race in races)
            {
                db.Attendings.Remove(race);
            }
            db.MFUsers.Remove(mFUser);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #6
0
        // GET: /Home/Index
        //
        // Main page of the application.  Displays the list of events along with participation and also initializes the
        // event form for adding events.
        //
        public virtual ActionResult Index()
        {
            IndexViewModel model = new IndexViewModel();

            // Current user information
            //
            Repository db          = new Repository();
            MFUser     currentUser = db.GetUserById(FacebookUser.CurrentUser.id);

            if (currentUser == null)
            {
                return(RedirectToAction(MVC.Home.Pending()));
            }

            // Determine if the user has access to the app through an approved group.
            // TODO:  For now, everyone will get access to JYMF
            //
            List <GroupMember> membership = db.UserMembership(currentUser);

            if ((membership == null) || (membership.Count == 0))
            {
                Group defaultGroup = db.FindGroupByCode("JYMF");
                db.DefaultGroup(currentUser, defaultGroup, GroupRoleEnum.member);
                db.SaveChanges();

                membership = db.UserMembership(currentUser);

                AppUserNotification(currentUser.UserId, defaultGroup.Name);
            }

            model.EventForm.GroupId = membership[0].GroupId;

            // Get all events for the current user
            //
            List <Event> events = db.GetUserEvents(currentUser);

            model.Events = EventInfo.CopyFromModel(events, currentUser.UserId);

            // Return the view
            //
            model.PageMessage = GetTempDataPageMessage();
            return(View(model));
        }
コード例 #7
0
        // GET: MFUsers/Edit/5
        public ActionResult Edit(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            MFUser mFUser = db.MFUsers.Find(id);

            if (mFUser == null)
            {
                return(HttpNotFound());
            }
            return(View(new MFUserViewModel
            {
                UserId = mFUser.UserId,
                Name = mFUser.Name,
                FirstName = mFUser.FirstName,
                LastName = mFUser.LastName,
                Email = mFUser.Email,
            }));
        }
コード例 #8
0
        // DELETE api/<controller>/5
        //
        // Removes the user as attending the event
        //
        public HttpResponseMessage Delete(int id)
        {
            // Make sure the request is valid
            //
            if (string.IsNullOrEmpty(UserId))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Not Authorized"));
            }

            Repository repository = new Repository();
            MFUser     user       = repository.GetUserById(UserId);
            Event      iEvent     = repository.GetEventById(id);

            if ((user == null) || (iEvent == null))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Event not found"));
            }

            repository.RemoveUserFromEvent(user, iEvent);
            repository.SaveChanges();

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
コード例 #9
0
        // POST api/Login
        //
        // Authenticate the user.  Requires groupid=JYMF and ApiKey.  Authentication may be by userid or email/password (v2)
        //
        public HttpResponseMessage Post([FromBody] LoginAuth auth)
        {
            if ((auth == null) ||
                (string.IsNullOrEmpty(auth.groupid)) ||
                (string.IsNullOrEmpty(auth.userid) && (string.IsNullOrEmpty(auth.email))) ||
                (string.IsNullOrEmpty(auth.apikey)))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Missing authentication information"));
            }
            else
            {
                Repository repository = new Repository();
                var        fbGroup    = repository.FindGroupByCodeAndKey(auth.groupid, auth.apikey);
                MFUser     mfUser     = null;
                if (string.IsNullOrEmpty(auth.password))
                {
                    mfUser = repository.GetUserByEmail(auth.email);
                }
                else
                {
                    mfUser = repository.GetUserByAuthentication(auth.email, auth.password);
                }
                if (mfUser == null && auth.userid != null && !string.IsNullOrEmpty(auth.userid))
                {
                    mfUser = repository.GetUserById(auth.userid);
                }
                var groupMember = repository.UserGroupMembership(mfUser ?? new MFUser(), fbGroup ?? new Group());

                if (groupMember == null)
                {
                    if (mfUser == null)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "User not found"));
                    }

                    if (fbGroup == null)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Invalid credentials"));
                    }

                    repository.DefaultGroup(mfUser, fbGroup, GroupRoleEnum.member);
                    repository.SaveChanges();

                    groupMember = repository.UserGroupMembership(mfUser, fbGroup);
                    if (groupMember == null)
                    {
                        return(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Invalid credentials"));
                    }
                }

                if ((string.IsNullOrEmpty(groupMember.AccessToken)) ||
                    ((groupMember.AccessExpiration.HasValue == false) || (groupMember.AccessExpiration.Value < DateTime.Now.ToUniversalTime())))
                {
                    groupMember.AccessToken      = Guid.NewGuid().ToString();
                    groupMember.AccessExpiration = DateTime.Now.AddDays(1).ToUniversalTime();
                    repository.SaveChanges();
                }
                else
                {
                    groupMember.AccessExpiration = DateTime.Now.AddDays(1).ToUniversalTime();
                    repository.SaveChanges();
                }

                var result = new AuthResult
                {
                    token      = groupMember.AccessToken,
                    expiration = groupMember.AccessExpiration.Value,
                    role       = groupMember.Role,
                    name       = mfUser.Name,
                    userid     = mfUser.UserId,
                    firstname  = mfUser.FirstName,
                    lastname   = mfUser.LastName,
                    email      = mfUser.Email
                };

                return(Request.CreateResponse(HttpStatusCode.OK, result));
            }
        }
コード例 #10
0
        // POST api/<controller>
        //
        // Add user to the database
        //
        public HttpResponseMessage Post([FromBody] JsonUser value)
        {
            if (value == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid user information"));
            }

            Models.Repository repository = new Models.Repository();
            var user = repository.GetUserByEmail(value.Email);

            if (user != null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Conflict, "User with same email already exists"));
            }

            string groupCode = HttpContext.Current.Request.QueryString["code"];

            Models.Group defaultGroup = repository.FindGroupByCode((string.IsNullOrEmpty(groupCode) ? "JYMF" : groupCode));
            if (defaultGroup == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Group code not found"));
            }

            string userid;

            do
            {
                Random random = new Random();
                userid = (!string.IsNullOrEmpty(value.UserId) ? value.UserId : System.Web.Security.Membership.GeneratePassword(16, 0));
                userid = Regex.Replace(userid, @"[^a-zA-Z0-9]", m => random.Next(0, 9).ToString());

                user = repository.GetUserById(userid);
            } while (user != null);

            MFUser fbUser = new MFUser
            {
                UserId    = userid,
                Email     = value.Email,
                Password  = value.Password,
                FirstName = value.FirstName,
                LastName  = value.LastName,
                Name      = value.Name
            };
            var mfUser = repository.CreateUser(fbUser);

            repository.SaveChanges();

            if (repository.IsUserInGroup(mfUser, defaultGroup) == GroupRoleEnum.empty)
            {
                repository.DefaultGroup(mfUser, defaultGroup, GroupRoleEnum.member);
                repository.SaveChanges();
            }

            // Send an email notification
            //
            var smtp    = new SmtpClient();         // Settings in config file
            var message = new MailMessage("*****@*****.**", ConfigurationManager.AppSettings["AdminEmail"]);

            message.Subject    = "JYMF RaceDay New User";
            message.IsBodyHtml = true;
            message.Priority   = MailPriority.High;
            message.Body       = File.ReadAllText(HttpContext.Current.Server.MapPath("~/App_Data/NewUser.txt"));
            message.Body       = message.Body.Replace("@FIRSTNAME@", fbUser.FirstName)
                                 .Replace("@LASTNAME@", fbUser.LastName)
                                 .Replace("@EMAIL@", fbUser.Email);

            smtp.Send(message);

            return(Request.CreateResponse(HttpStatusCode.Created, "User added to application"));
        }
コード例 #11
0
        public virtual ActionResult Attending(String EventId, String ClassName)
        {
            Repository repository = new Repository();

            // Current user must be logged in and found
            //
            if (FacebookUser.CurrentUser == null)
            {
                return(new HttpStatusCodeResult(400, "User authorization not found"));
            }

            MFUser currentUser = repository.GetUserById(FacebookUser.CurrentUser.id);

            if (currentUser == null)
            {
                return(new HttpStatusCodeResult(400, "User record not found"));
            }

            // Event Id must be an integer and found
            //
            Int32 eventId = 0;

            if (!Int32.TryParse(EventId, out eventId))
            {
                eventId = 0;
            }
            if (eventId == 0)
            {
                return(new HttpStatusCodeResult(400, "Invalid event Id"));
            }

            Event currentEvent = repository.GetEventById(eventId);

            if (currentEvent == null)
            {
                return(new HttpStatusCodeResult(400, "Event record not found"));
            }

            // ClassName must be recognized
            //
            if ((ClassName != "glyphicon-check") && (ClassName != "glyphicon-unchecked"))
            {
                return(new HttpStatusCodeResult(400, "Unrecognized class name"));
            }

            // Switch the attendance
            //
            AttendanceResult result = new AttendanceResult();

            if (ClassName == "glyphicon-check")
            {
                repository.RemoveUserFromEvent(currentUser, currentEvent);
                repository.SaveChanges();

                result.Button = RenderPartialViewToString(MVC.Shared.Views.Partials._NotAttendingButton, EventInfo.CopyFromEvent(false, currentEvent));
            }
            else
            {
                repository.AddUserToEvent(currentUser, currentEvent, AttendingEnum.Attending);
                repository.SaveChanges();

                result.Button = RenderPartialViewToString(MVC.Shared.Views.Partials._AttendingButton, EventInfo.CopyFromEvent(true, currentEvent));
            }

            // Rebind the participant list with the change
            //
            result.Attendees = String.Empty;
            return(Json(result));
        }