public ActionResult UploadPart1()
        {
            // Check we have a valid user
            var user = _authRepository.GetUserAccount(User.Identity.GetUserId());

            if (user == null)
            {
                HttpContext.GetOwinContext().Authentication.SignOut();
                return(RedirectToAction("Index", "Home"));
            }

            // Check if the user is allowed to upload
            if (!_authUserCharacterRepository.UserCanUpload(user.Email))
            {
                return(RedirectToAction("CantUpload"));
            }

            var userCharacters = _authUserCharacterRepository.GetUploaders(user.Email);

            // Allow site admins to upload parses as any user
            var model = new UploadSessionVM()
            {
                Characters  = userCharacters,
                Public      = true,
                SessionDate = DateTime.Now
            };

            return(View(model));
        }
        public ActionResult UploadPart2(UploadSessionVM model)
        {
            if (model == null)
            {
                return(RedirectToAction("Index", "Home"));
            }
            if (model.Name == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            return(View("UploadPart2", model));
        }
        public ActionResult UploadPart1(UploadSessionVM model)
        {
            // Check we have a valid user
            var user = _authRepository.GetUserAccount(User.Identity.GetUserId());

            if (user == null)
            {
                HttpContext.GetOwinContext().Authentication.SignOut();
                return(RedirectToAction("Index", "Home"));
            }

            if (ModelState.IsValid)
            {
                // Generate an upload token and make sure it's not in use
                while (true)
                {
                    model.UploadToken = AuthEncryption.RandomFilename();

                    _logger.Debug(string.Format("Checking to see if session token {0} has been used before", model.UploadToken));
                    if (!_sessionLogRepository.SessionLogTokenExists(model.UploadToken))
                    {
                        _logger.Debug("Token wasn't found, so inserting a new session with it now.");
                        break;
                    }

                    _logger.Debug(string.Format("Found an existing log with the token {0} - generating a new one.", model.UploadToken));
                }

                TimeSpan utcOffset = TimeZoneInfo.FindSystemTimeZoneById(user.TimeZone).GetUtcOffset(DateTime.UtcNow);

                var result = _sessionRepository.CreateSession(User.Identity.GetUserId(), new Session()
                {
                    AuthUserCharacterId = model.UploadCharacterId,
                    Date             = model.SessionDate.Subtract(utcOffset),
                    Name             = model.Name,
                    EncountersPublic = model.Public
                });
                if (result.Success)
                {
                    int sessionId = int.Parse(result.Message);
                    model.UploadedSessionId = sessionId;
                    // Add this session to the SessionLog table in case other guild members or this user choose to upload additional logs to the session
                    var guildId = _authUserCharacterRepository.GetGuildIdForCharacter(model.UploadCharacterId);
                    if (guildId > 0)
                    {
                        var newSessionLog = new SessionLog()
                        {
                            AuthUserCharacterId = model.UploadCharacterId,
                            Filename            = model.UploadToken + ".zip",
                            Token           = model.UploadToken,
                            GuildId         = guildId,
                            LogSize         = 0,
                            SessionId       = sessionId,
                            TotalPlayedTime = 0
                        };
                        var returnValue = _sessionLogRepository.Create(newSessionLog);
                    }
                    return(UploadPart2(model));
                }

                ModelState.AddModelError("", result.Message);
            }

            //var user = _authRepository.GetUserAccount(User.Identity.GetUserId());
            var userCharacters = _authUserCharacterRepository.GetUploaders(user.Email);

            model.Characters = userCharacters;

            return(View(model));
        }