コード例 #1
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += _BackRequested;
            data = (UserAccessToken)e.Parameter;
            await data.Init();

            var imageUrl = "https://twitter.com/" + data.screenName + "/profile_image?size=original";

            data.user.profile_image_url_https = imageUrl;
            viewModel            = new AdvancedUser(data);
            mainGrid.DataContext = viewModel;
        }
コード例 #2
0
        /// <inheritdoc />
        public async Task <string> CompleteAuthorization(HttpRequest request, IResponseCookies cookies, CancellationToken cancellationToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }
            if (cookies == null)
            {
                throw new ArgumentNullException(nameof(cookies));
            }


            string code;

            if (!request.Query.TryGetValue("code", out StringValues stringValues) || stringValues.Count == 0)
            {
                return(null);
            }
            code = stringValues.First();

            logger.LogTrace("CompleteAuthorization for with code: {0}", code);


            var otr          = new OauthTokenRequest(gitHubConfiguration.OauthClientID, gitHubConfiguration.OauthSecret, code);
            var gitHubClient = gitHubClientFactory.CreateAppClient();
            var result       = await gitHubClient.Oauth.CreateAccessToken(otr).ConfigureAwait(false);

            if (result.AccessToken == null)
            {
                //user is f*****g with us, don't even bother
                return(null);
            }

            var expiry   = DateTimeOffset.UtcNow.AddDays(AccessTokenExpiryDays);
            var newEntry = new UserAccessToken
            {
                Id          = Guid.NewGuid(),
                AccessToken = result.AccessToken,
                Expiry      = expiry
            };

            await databaseContext.UserAccessTokens.AddAsync(newEntry, cancellationToken).ConfigureAwait(false);

            await databaseContext.Save(cancellationToken).ConfigureAwait(false);

            cookies.Append(AuthorizationCookie, newEntry.Id.ToString());

            if (request.Query.TryGetValue("state", out stringValues) && stringValues.Count > 0)
            {
                return(stringValues.First());
            }
            return(null);
        }
コード例 #3
0
        public void Create_TestSuccess()
        {
            var userServiceMock = new Mock <IUserService>();
            var userService     = userServiceMock.Object;

            var userProfileServiceMock = new Mock <IUserProfileService>();
            var userProfileService     = userProfileServiceMock.Object;

            var controllerContextMock = new Mock <ControllerContext>();

            var userController = new UserController(userService, userProfileService);

            userController.ControllerContext = controllerContextMock.Object;

            var createModel = new CreateViewModel
            {
                Username      = "******",
                Password      = "******",
                StreetAddress = "rofl",
                City          = "mao",
                ZipCode       = 1000
            };

            var credentials = new UserCredentials()
            {
                Email    = createModel.Email,
                Password = createModel.Password
            };

            var accessToken = new UserAccessToken("123456");

            userServiceMock.Setup(a => a.Create(credentials)).Returns(accessToken);
            userServiceMock.Setup(a => a.Login(credentials)).Returns(accessToken);

            var viewResult = userController.Index(createModel) as RedirectToRouteResult;

            Assert.IsNotNull(viewResult, "Controller did not return a RedirectToRouteResult");

            var userProfile = new UserProfile()
            {
                Username = createModel.Username,
                Address  = new Address()
                {
                    Street  = createModel.StreetAddress,
                    City    = createModel.City,
                    ZipCode = createModel.ZipCode
                }
            };

            userServiceMock.Verify(a => a.Create(credentials));
            userProfileServiceMock.Verify(a => a.UpdateProfile(accessToken, userProfile));
        }
コード例 #4
0
ファイル: MongoHugService.cs プロジェクト: stawiu/penedating
        public void SendHug(UserAccessToken userAccessToken, string recipientUserId)
        {
            _logger.Info("Sending hug from: " + userAccessToken.Email + " to " + recipientUserId);
            var hug = new Hug()
            {
                Created  = DateTime.Now,
                SenderID = userAccessToken.Ticket
            };

            var mongoHug = Mapper.Map <Data.MongoDB.Model.Hug>(hug);

            _hugRepository.InsertHug(recipientUserId, mongoHug);
        }
コード例 #5
0
        // GET: Auth2
        public ActionResult Index()
        {
            string code = Request.QueryString["code"];

            if (!string.IsNullOrEmpty(code))
            {
                LogService.Write("收到用户授权code:" + code);
                UserAccessToken t = OAuth2Service.get_accesstoken_bycode(code);

                LogService.Write("获取到了用户accesstoken:" + t.access_token + ", refresh token:" + t.refresh_token + ", openid=" + t.openid + ", scope:" + t.scope + ", expires_in:" + t.expires_in);
                return(View());
            }
            return(Content("NO CODE"));
        }
コード例 #6
0
ファイル: WXIntfBasic.cs プロジェクト: lai123456789/2019-7-17
        public UserAccessToken GetNewAccessToken(string wxappid, string appsecret)
        {
            UserAccessToken tokeninfo = null;

            try
            {
                string url       = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxappid + "&secret=" + appsecret;
                string strresult = WXInterfaceHttpRequest(url, "", "get");
                tokeninfo = ObjectSeriallizeHelper.JsonToObject <UserAccessToken>(strresult);
            }
            catch (Exception ex)
            {
                LogWriter.WriteLog(ex);
            }
            return(tokeninfo);
        }
コード例 #7
0
        private async Task RefreshToken(UserAccessToken accessToken)
        {
            var content = new StringContent(
                $"client_id={_settings.AppClientId}&client_secret={_settings.AppClientSecret}&refresh_token={accessToken.RefreshToken}&grant_type=refresh_token",
                Encoding.UTF8, "application/x-www-form-urlencoded");
            var client = GetAuthClient();
            var result = await client.PostAsync($"{relativeUrlAuthPart}/token", content);

            var auth = JsonConvert.DeserializeObject <AccessToken>(await result.Content.ReadAsStringAsync());

            _userContextLocal.Accounts.Where(x => x.AccessToken == accessToken.AccessToken).ToList().ForEach(x => x.AccessToken = auth.access_token);
            accessToken.AccessToken     = auth.access_token;
            accessToken.TokenValidUntil = DateTime.Now.AddSeconds(auth.expires_in - 60);
            accessToken.RefreshToken    = auth.refresh_token;
            UserContextChanged          = true;
        }
コード例 #8
0
        public static BaseActionResult DeleteUserAccessToken(UserAccessToken obj4delete)
        {
            using (var context = new XiaoluEntities())
            {
                string msg;
                var    repository = new UserAccessTokenRepository(context);

                if (obj4delete == null)
                {
                    msg = string.Format(XiaoluResources.MSG_DELETE_SUCCESS, XiaoluResources.STR_USER_ACCESS_TOKEN) + string.Format(XiaoluResources.STR_FAIL_RESAON, XiaoluResources.MSG_OBJECT_IS_NULL);
                    return(new BaseActionResult(false, msg));
                }
                repository.Delete(obj4delete);
                context.SaveChanges();
                msg = string.Format(XiaoluResources.MSG_UPDATE_SUCCESS, obj4delete.AccessToken);
                return(new BaseActionResult(true, msg));
            }
        }
コード例 #9
0
        public async Task <UserAccessToken> CreateUserAccessTokenAsync(int userId, CreateAccessTokenRequest request)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var token = new UserAccessToken
                {
                    Id          = Guid.NewGuid(),
                    Key         = RngHelper.GetRandomHexString(64),
                    Name        = request.Name,
                    UserId      = userId,
                    DateCreated = _timeService.UtcNow
                };
                uow.UserAccessTokenRepository.Add(token);
                await uow.SaveChangesAsync();

                return(token);
            }
        }
コード例 #10
0
        public async Task SetSpotifyAccessToken(string userId, BearerAccessRefreshToken token)
        {
            await RetryHelper.RetryAsync(async() =>
            {
                var storedToken = await _data.GetOrDefault(UserAccessToken.CanonicalId(userId), userId);
                var uat         = new UserAccessRefreshToken(userId, token);
                uat.EnforceInvariants();

                if (storedToken == null)
                {
                    await _data.Create(uat);
                }
                else
                {
                    await _data.Replace(uat, storedToken.ETag);
                }
            }, waitMs : 10, logger : _logger);
        }
コード例 #11
0
        public UserAccessToken RegisterToken(string userId)
        {
            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes(_appSettings.JwtSecret);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Name, userId)
                }),
                Expires            = DateTime.UtcNow.AddDays(7),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token       = tokenHandler.CreateToken(tokenDescriptor);
            var accessToken = new UserAccessToken(tokenHandler.WriteToken(token));

            return(accessToken);
        }
        public async Task Handle_GetUserAccessTokenCommand_OpenIdOfUserAccessTokenExisted()
        {
            //Arrange
            var expected = new UserAccessToken()
            {
                openid        = "321",
                access_token  = "1",
                expires_in    = "1",
                refresh_token = "1",
                scope         = "1"
            };
            var db = new List <UserAccessToken> {
                new UserAccessToken
                {
                    openid        = "321",
                    access_token  = "2",
                    expires_in    = "2",
                    refresh_token = "2",
                    scope         = "2"
                }
            };

            communicator.Setup(c => c.GetUserAccessTokenAsync("123"))
            .Returns(Task.FromResult(expected));
            context.SetupGet(c => c.UserAccessTokens).Returns(Mocking.GetMockDbSet(db));
            context.Setup(c => c.SaveAsync()).Returns(Task.CompletedTask);

            var command = new GetUserAccessTokenCommand(code: "123");
            var handler = createHandler();

            //Act
            var result = await handler.Handle(command);

            //Assert
            communicator.VerifyAll();
            context.VerifyAll();
            Assert.True(Jsonning.EqualsOrThrows(expected, result));
            Assert.NotSame(expected, db.FirstOrDefault());
            Assert.Equal(expected.access_token, db.FirstOrDefault().access_token);
            Assert.Equal(expected.expires_in, db.FirstOrDefault().expires_in);
            Assert.Equal(expected.refresh_token, db.FirstOrDefault().refresh_token);
            Assert.Equal(expected.scope, db.FirstOrDefault().scope);
        }
コード例 #13
0
        public bool TryGetAccessToken(out UserAccessToken accessToken)
        {
            if (CurrentAccessToken != null)
            {
                accessToken = CurrentAccessToken;
                return(true);
            }

            string hash;

            if (TryGetHashFromCookie(out hash))
            {
                accessToken        = _memcachedClient.Get <UserAccessToken>(hash);
                CurrentAccessToken = accessToken;
                return(accessToken != null);
            }

            accessToken = null;
            return(false);
        }
コード例 #14
0
        public async Task <ActionResult> CreateAccessToken()
        {
            var user = await GetApplicationUser();

            if (user == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            // Tokenの作成
            var token = new UserAccessToken()
            {
                AccessToken = Guid.NewGuid().ToString(),
                User        = user
            };

            db.AccessTokens.Add(token);
            await db.SaveChangesAsync();

            return(RedirectToAction("AccessTokens"));
        }
        public async Task GetUserAccessTokenAsync_WeChatCommunicator()
        {
            //Arrange
            var expected = new UserAccessToken();
            var appid    = "wxf1759596e3365d3e";
            var code     = "123456";
            var secret   = "50d58aee48c9e5cb8a593b93cc182547";

            var service = createService();

            http.Setup(h => h.GetAsync <UserAccessToken>($"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code"))
            .Returns(Task.FromResult(expected));
            config["AppId"]  = appid;
            config["Secret"] = secret;
            //Act
            var actual = await service.GetUserAccessTokenAsync(code);

            //Assert
            http.VerifyAll();
            Assert.True(Jsonning.EqualsOrThrows(expected, actual));
        }
コード例 #16
0
        public async Task <UserAccessToken> GetSpotifyAccessToken(string userId)
        {
            return(await RetryHelper.RetryAsync(async() =>
            {
                // get User Access Tokens from Cache
                var cachedToken = await _cache.Get <UserAccessToken>(Key(userId));

                // Return cached token if hit
                if (cachedToken != null)
                {
                    return cachedToken;
                }

                // Get token from storage
                var storedToken = await _data.GetOrDefault(UserAccessToken.CanonicalId(userId), userId);

                if (storedToken == null)
                {
                    return null;
                }

                // Store AccessToken (only) in Cache.
                // Only store tokens that have not yet expired
                // Set Cache item expiry for when the token is due to expire.
                // DO NOT cache Refresh Tokens
                var expiry = storedToken.Expires.Subtract(DateTimeOffset.UtcNow);

                if (expiry.TotalMilliseconds > 0)
                {
                    await _cache.Set(
                        Key(userId),
                        new UserAccessToken(storedToken),
                        storedToken.Expires.Subtract(DateTimeOffset.UtcNow));
                }

                return storedToken;
            }, waitMs : 10, logger : _logger));
        }
コード例 #17
0
        public void Login_Success()
        {
            var accessTokenProviderMock = new Mock <IUserAccessTokenProvider>();
            var accessTokenProvider     = accessTokenProviderMock.Object;

            var userServiceMock = new Mock <IUserService>();
            var userService     = userServiceMock.Object;

            var userController = new LoginController(userService, accessTokenProvider);

            var loginModel = new LoginViewModel()
            {
                Email    = "testuser",
                Password = "******"
            };

            var credentials = new UserCredentials()
            {
                Email    = loginModel.Email,
                Password = loginModel.Password
            };

            var accessToken = new UserAccessToken("123456");

            userServiceMock.Setup(a => a.Login(credentials)).Returns(accessToken);

            var result = userController.Index(loginModel) as RedirectToRouteResult;

            Assert.IsNotNull(result, "Login Action did not yield a Redirection");
            Assert.AreEqual(result.RouteValues["controller"], "Home");
            Assert.AreEqual(result.RouteValues["action"], "Index");

            //Assert that the controller forwarded the username and password to IUserService correctly
            userServiceMock.Verify(a => a.Login(credentials), Times.Once());

            //Assert that the controller set the session state correctly
            accessTokenProviderMock.Verify(a => a.SetUserAccessToken(accessToken));
        }
        public async Task Handle_GetUserAccessTokenCommand_OpenIdOfUserAccessTokenNotExisted()
        {
            //Arrange
            var expected = new UserAccessToken();
            var db       = new List <UserAccessToken>();

            communicator.Setup(c => c.GetUserAccessTokenAsync("123"))
            .Returns(Task.FromResult(expected));
            context.SetupGet(c => c.UserAccessTokens).Returns(Mocking.GetMockDbSet(db));
            context.Setup(c => c.SaveAsync()).Returns(Task.CompletedTask);

            var command = new GetUserAccessTokenCommand(code: "123");
            var handler = createHandler();

            //Act
            var result = await handler.Handle(command);

            //Assert
            communicator.VerifyAll();
            context.VerifyAll();
            Assert.True(Jsonning.EqualsOrThrows(expected, result));
            Assert.Same(expected, db.FirstOrDefault());
        }
コード例 #19
0
        public void SetUserAccessToken(UserAccessToken accessToken)
        {
            var hash       = GenerateSaltedHash(accessToken.Email + ":" + accessToken.Ticket, GenerateSalt());
            var hashString = Convert.ToBase64String(hash);

            if (!_memcachedClient.Store(StoreMode.Set, hashString, accessToken))
            {
                _logger.Error("Failed to set access token for: " + accessToken.Email);
                throw new UserTokenPersistenceFailedExpcetion();
            }

            CurrentAccessToken = accessToken;

            var cookie = new HttpCookie(_cookieName, hashString)
            {
                Secure   = _useSecureCookie,                    /* Ensures that this cookie is only used on SSL connections - this prevents Man-in-the-middle attacks */
                HttpOnly = true,                                /* Ensures that the cookie cannot be read from JavaScript - this prevents XSS attacks */
            };

            HttpContext.Current.Response.Cookies.Add(cookie);

            _logger.Info("Set access token for: " + accessToken.Email);
        }
コード例 #20
0
        public async Task <UserAccessToken> RefreshSpotifyAccessToken(string userId)
        {
            var refreshToken = await _data.GetOrDefault(UserAccessToken.CanonicalId(userId), userId);

            var now      = DateTimeOffset.UtcNow;
            var newToken = await _userAccounts.RefreshUserAccessToken(refreshToken.RefreshToken);

            refreshToken.ResetAccessToken(newToken, now);

            // Save User Access Tokens to storage
            await _data.Replace(refreshToken, refreshToken.ETag);

            // Store AccessToken (only) in Cache. Set Cache item expiry for when the token is due to expire.
            // DO NOT cache Refresh Tokens
            var userAccessToken = new UserAccessToken(refreshToken);

            await _cache.Set(
                Key(userId),
                userAccessToken,
                userAccessToken.Expires.Subtract(DateTimeOffset.UtcNow));

            return(userAccessToken);
        }
コード例 #21
0
        public static wxPayReturnValue OAuth2_Access_Token(string Code)
        {
            StringBuilder sbCode = new StringBuilder(OAUTH2_ACCESS_TOKEN);

            sbCode.Append("?appid=" + APPID);
            sbCode.Append("&secret=" + APPSECRET);
            sbCode.Append("&code=" + Code);
            sbCode.Append("&grant_type=authorization_code");

            wxPayReturnValue retValue = StreamReaderUtils.StreamReader(sbCode.ToString(), Encoding.UTF8);

            if (retValue.HasError)
            {
                return(retValue);
            }

            try
            {
                UserAccessToken uat = JSONHelper.JSONToObject <UserAccessToken>(retValue.Message);
                retValue.PutValue("Weixin_OpenID", uat.openid);
                retValue.PutValue("Weixin_Token", uat.access_token);

                LogService.Write("openID" + uat.openid + "---" + "Weixin_token" + uat.access_token);
                //retValue.PutValue("Weixin_ExpiresIn", intWeixin_ExpiresIn);
                //retValue.PutValue("Weixin_ExpiresDate", DateTime.Now.AddSeconds(intWeixin_ExpiresIn));
                //retValue.PutValue("refresh_token", StringUtils.GetJsonValue(retValue.Message, "refresh_token").ToString());
                //retValue.PutValue("scope", StringUtils.GetJsonValue(retValue.Message, "scope").ToString());
            }
            catch
            {
                retValue.HasError = true;
                //  retValue.Message = retValue.Message;
                retValue.ErrorCode = "";
            }

            return(retValue);
        }
コード例 #22
0
 public UserListPageDataTransfer(UserListMode mode, UserAccessToken userAccessToken)
 {
     this.mode            = mode;
     this.userAccessToken = userAccessToken;
 }
コード例 #23
0
 public IEnumerable <Movie> Get(UserAccessToken user)
 {
     return(_repo.GetMovies(user));
 }
コード例 #24
0
ファイル: MongoHugService.cs プロジェクト: stawiu/penedating
 public void DismissHugs(UserAccessToken userAccessToken)
 {
     _hugRepository.DismissHugs(userAccessToken.Ticket);
 }
コード例 #25
0
ファイル: LoginController.cs プロジェクト: neilchennan/Xiaolu
        // POST api/login
        public Object Post(LoginApiModel obj)
        {
            string msg;

            try
            {
                if (string.IsNullOrEmpty(obj.UserIdOrMobile))
                {
                    msg = XiaoluResources.MSG_LOGIN_FAIL + string.Format(XiaoluResources.STR_FAIL_RESAON, XiaoluResources.MSG_MOBILE_OR_USERID_IS_NULL);
                    return(new { IsSuccess = false, Message = msg });
                }

                if (string.IsNullOrEmpty(obj.Password) || obj.Password.Trim().Length < 6)
                {
                    msg = XiaoluResources.MSG_LOGIN_FAIL + string.Format(XiaoluResources.STR_FAIL_RESAON, XiaoluResources.MSG_PASSWORD_IS_NOT_VALID);
                    return(new { IsSuccess = false, Message = msg });
                }

                User userInDb  = BusinessService.GetUserByName(obj.UserIdOrMobile);
                User userInDb2 = BusinessService.GetUserByMobile(obj.UserIdOrMobile);
                if (userInDb == null && userInDb2 == null)
                {
                    msg = XiaoluResources.MSG_LOGIN_FAIL + string.Format(XiaoluResources.STR_FAIL_RESAON, XiaoluResources.MSG_CANNOT_FIND_USER);
                    return(new { IsSuccess = false, Message = msg });
                }

                User   findedUser = (userInDb == null) ? userInDb2 : userInDb;
                string md5Pwd     = FormsAuthentication.HashPasswordForStoringInConfigFile(obj.Password, "MD5");
                //验证密码
                if (!string.Equals(md5Pwd, findedUser.Password))
                {
                    findedUser.LastFailLoginTime = DateTime.Now;
                    if (findedUser.ErrLoginTimes == null)
                    {
                        findedUser.ErrLoginTimes = 0;
                    }
                    findedUser.ErrLoginTimes++;
                    BusinessService.UpdateUser(findedUser);

                    msg = XiaoluResources.MSG_LOGIN_FAIL + string.Format(XiaoluResources.STR_FAIL_RESAON, XiaoluResources.MSG_PASSWORD_IS_IN_CORRECT);
                    return(new { IsSuccess = false, Message = msg });
                }
                //密码验证通过,则登录成功
                //写历史记录
                msg = XiaoluResources.MSG_LOGIN_SUCCESS;
                History his = new History()
                {
                    UserId       = findedUser.Name,
                    CreationDate = DateTime.Now,
                    Content      = msg
                };
                BusinessService.CreateHistory(his);

                string          accessToken4User;
                UserAccessToken uatInDb = BusinessService.GetAccessTokenByUserId(findedUser.Name);
                if (uatInDb != null && uatInDb.ExpireDate > DateTime.Now)
                {
                    accessToken4User = uatInDb.AccessToken;
                    return(new { IsSuccess = true, Message = msg, AccessToken = accessToken4User });
                }
                if (uatInDb != null)
                {
                    BusinessService.DeleteUserAccessToken(uatInDb);
                }

                accessToken4User = Guid.NewGuid().ToString();
                UserAccessToken uat = new UserAccessToken()
                {
                    UserId      = findedUser.Name,
                    AccessToken = accessToken4User,
                    WeixinId    = findedUser.WeixinId,
                    ExpireDate  = DateTime.Now.AddSeconds(ACCESS_TOKEN_DURATION_IN_SECONDS)
                };
                BusinessService.CreateUserAccessToken(uat);

                AccessTokenUserPool.AddAccessTokenUserId(accessToken4User, findedUser.Name);
                return(new { IsSuccess = true, Message = msg, AccessToken = accessToken4User });
            }
            catch (Exception e)
            {
                msg = XiaoluResources.MSG_LOGIN_FAIL + string.Format(XiaoluResources.STR_FAIL_RESAON, ExceptionHelper.GetInnerExceptionInfo(e));
                return(new { IsSuccess = false, Message = msg });
            }
        }
コード例 #26
0
        public UserProfile GetUserProfile(UserAccessToken userAccessToken)
        {
            var userProfile = _userProfileRepository.GetUserProfile(userAccessToken.Ticket);

            return(Mapper.Map <UserProfile>(userProfile));
        }
コード例 #27
0
 public void SetUserAccessToken(UserAccessToken accessToken)
 {
     _httpContext.Session[_sessionKeyName] = accessToken;
 }
コード例 #28
0
ファイル: WXIntfBasic.cs プロジェクト: lai123456789/2019-7-17
        public string GetAccessToken(string wxappid, bool refresh = false)
        {
            string result = "";

            int       maxtrytimes = 3;
            int       currtry     = 0;
            string    appsecret   = WXApiInfo.appsecret;
            DateTime  stateupdatetime;
            int       maxfreshingtime = 10;//最大刷新时间(秒),超过则不等待
            OracleDBO mydbo           = new OracleDBO();

            mydbo.AutoClose = false;
            try
            {
                string   token;
                DateTime gettime;
                int      expires_in;
                string   status;

                DataRow dr;
                while (currtry < maxtrytimes)
                {
                    dr = mydbo.GetDataRow("select * from sys_p_wxappaccesstoken t where t.wxappid='" + wxappid + "'");
                    if (dr != null)
                    {
                        token           = dr["access_token"].ToString();
                        gettime         = Convert.ToDateTime(dr["gettime"]);
                        expires_in      = Convert.ToInt32(dr["expires_in"]);
                        status          = dr["state"].ToString();
                        stateupdatetime = Convert.ToDateTime(dr["stateupdatetime"]);
                        if (status == "Normal")
                        {
                            //是否已超时
                            if ((DateTime.Now - gettime).TotalSeconds < (expires_in - 5) && !refresh)
                            {
                                //未超时并且不要求更新
                                result = token;
                                break;
                            }
                            else
                            {
                                #region 更新access_token流程
                                mydbo.BeginTransaction();
                                int effnum = mydbo.ExecuteNonQuery("update sys_p_wxappaccesstoken set state='Refreshing',stateupdatetime=sysdate where WXAppID='" + wxappid + "' and state='Normal' and gettime=to_date('" + gettime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss')");
                                mydbo.Commit();
                                //如果影响数大于零,说明更新状态成功,则即是取得了更新权。
                                if (effnum > 0)
                                {
                                    UserAccessToken tokeninfo = GetNewAccessToken(wxappid, appsecret);
                                    if (tokeninfo.errcode == 0)
                                    {
                                        result = tokeninfo.access_token;
                                        mydbo.BeginTransaction();
                                        mydbo.ExecuteNonQuery("update sys_p_wxappaccesstoken set access_token='" + tokeninfo.access_token + "',expires_in=" + tokeninfo.expires_in.ToString() + ",gettime=to_date('" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss'),state='Normal',stateupdatetime=sysdate where WXAppID='" + wxappid + "'");
                                        mydbo.Commit();
                                        break;
                                    }
                                    else
                                    {
                                        //如果未成功,先将状态改回来
                                        mydbo.BeginTransaction();
                                        mydbo.ExecuteNonQuery("update sys_p_wxappaccesstoken t set t.state='Normal',t.stateupdatetime=sysdate where t.access_token='" + token + "' and t.gettime=to_date('" + gettime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') and t.wxappid='" + wxappid + "'");
                                        mydbo.Commit();
                                    }
                                }
                                else
                                {
                                    //如果不是Normal状态,可能是其他请求正在刷新中,等半秒再取
                                    if ((DateTime.Now - stateupdatetime).TotalSeconds > maxfreshingtime)
                                    {
                                        mydbo.BeginTransaction();
                                        mydbo.ExecuteNonQuery("update sys_p_wxappaccesstoken t set t.state='Normal',t.stateupdatetime=sysdate where t.access_token='" + token + "' and t.gettime=to_date('" + gettime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') and t.wxappid='" + wxappid + "'");
                                        mydbo.Commit();
                                    }
                                    System.Threading.Thread.Sleep(500);
                                }
                                #endregion
                            }
                        }
                        else
                        {
                            //如果不是Normal状态,可能是其他请求正在刷新中,等半秒再取
                            if ((DateTime.Now - stateupdatetime).TotalSeconds > maxfreshingtime)
                            {
                                mydbo.BeginTransaction();
                                mydbo.ExecuteNonQuery("update sys_p_wxappaccesstoken t set t.state='Normal',t.stateupdatetime=sysdate where t.access_token='" + token + "' and t.gettime=to_date('" + gettime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') and t.wxappid='" + wxappid + "'");
                                mydbo.Commit();
                            }
                            System.Threading.Thread.Sleep(500);
                        }
                    }
                    else
                    {
                        UserAccessToken tokeninfo = GetNewAccessToken(wxappid, appsecret);
                        if (tokeninfo.errcode == 0)
                        {
                            result = tokeninfo.access_token;
                            mydbo.BeginTransaction();
                            mydbo.ExecuteNonQuery("insert into sys_p_wxappaccesstoken(WXAppID,access_token,expires_in,state,gettime,stateupdatetime) values('" + wxappid + "','" + tokeninfo.access_token + "'," + tokeninfo.expires_in.ToString() + ",'Normal',to_date('" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "','yyyy-mm-dd hh24:mi:ss'),to_date('" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "','yyyy-mm-dd hh24:mi:ss'))");
                            mydbo.Commit();
                            break;
                        }
                    }
                    currtry++;
                }
            }
            catch (Exception ex)
            {
                LogWriter.WriteLog(ex);
            }
            mydbo.Close();
            return(result);
        }
コード例 #29
0
ファイル: MongoUserService.cs プロジェクト: stawiu/penedating
 public void DeleteUser(UserAccessToken accessToken)
 {
     _userRepository.DeleteUser(accessToken.Ticket);
     _logger.Info("Deleted user account: " + accessToken.Email);
 }
コード例 #30
0
 public void AuthorizeWithUserAccessToken(UserAccessToken accessToken)
 {
     this.AccessToken = accessToken;
 }