コード例 #1
0
ファイル: LogonCommandBinder.cs プロジェクト: kingsor/shrinkr
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            Invariant.IsNotNull(bindingContext, "bindingContext");

            LogOnCommand command = (LogOnCommand)base.BindModel(controllerContext, bindingContext);

            if (string.IsNullOrWhiteSpace(command.UserName))
            {
                ValueProviderResult result = bindingContext.ValueProvider.GetValue("openid_identifier") ??
                                             bindingContext.ValueProvider.GetValue("openid_username");

                if (result != null)
                {
                    command.UserName = result.AttemptedValue;
                }
            }

            if (!command.RememberMe.HasValue)
            {
                ValueProviderResult result = bindingContext.ValueProvider.GetValue("openid_identifier_remember") ??
                                             bindingContext.ValueProvider.GetValue("openid_username_remember");

                if (result != null)
                {
                    command.RememberMe = (bool?)result.ConvertTo(typeof(bool?), Culture.Current);
                }
            }

            return(command);
        }
コード例 #2
0
        public ActionResult LogOn(LogOnCommand command)
        {
            Check.Argument.IsNotNull(command, "command");

            Identifier id;

            if (string.IsNullOrWhiteSpace(command.UserName) || !Identifier.TryParse(command.UserName, out id))
            {
                string errorMessage = string.IsNullOrWhiteSpace(command.UserName) ? TextMessages.OpenIDUserNameCannotBeBlank : TextMessages.InvalidOpenIDUserName;

                ModelState.AddModelError(ModelStateUserNameKey, errorMessage);
            }
            else
            {
                cookie.SetValue(CookieRememberMe, command.RememberMe ?? false);
                cookie.SetValue(CookieReturnUrl, !string.IsNullOrWhiteSpace(command.ReturnUrl) ? command.ReturnUrl : Url.Home());

                try
                {
                    Realm realm = new Realm(new Uri(Url.ToAbsolute(Url.LogOn())));
                    IAuthenticationRequest request = openId.CreateRequest(id, realm);

                    ClaimsRequest fetch = new ClaimsRequest {
                        Email = DemandLevel.Request
                    };
                    request.AddExtension(fetch);

                    request.RedirectToProvider();
                }
                catch (ProtocolException e)
                {
                    ModelState.AddModelError(ModelStateUserNameKey, e.Message);
                }
            }

            return(View());
        }