예제 #1
0
        public async Task <AppAccessToken> Handle(GetAppAccessTokenCommand command,
                                                  CancellationToken cancellationToken = default(CancellationToken))
        {
            AppAccessToken accessToken = null;

            var accessTokenInDb = context.AppAccessTokens.FirstOrDefault();

            if (accessTokenInDb != null)
            {
                if (DateTime.Now.Subtract(accessTokenInDb.time_stamp).TotalSeconds > accessTokenInDb.expires_in)
                {
                    accessToken = await communicator.GetAppAccessTokenAsync();

                    accessTokenInDb.access_token = accessToken.access_token;
                    accessTokenInDb.expires_in   = accessToken.expires_in;
                    accessTokenInDb.time_stamp   = accessToken.time_stamp;
                }
                else
                {
                    return(accessTokenInDb);
                }
            }
            else
            {
                accessToken = await communicator.GetAppAccessTokenAsync();

                context.AppAccessTokens.Add(accessToken);
            }
            await context.SaveAsync();

            return(accessToken);
        }
        public async Task <UserAccessToken> Handle(GetUserAccessTokenCommand command,
                                                   CancellationToken cancellationToken = default(CancellationToken))
        {
            var userAccessToken = await communicator.GetUserAccessTokenAsync(command.Code);

            var tokenInDb = await context.UserAccessTokens.FirstOrDefaultAsync(t => t.openid == userAccessToken.openid);

            if (tokenInDb == null)
            {
                context.UserAccessTokens.Add(userAccessToken);
            }
            else
            {
                tokenInDb.access_token  = userAccessToken.access_token;
                tokenInDb.expires_in    = userAccessToken.expires_in;
                tokenInDb.refresh_token = userAccessToken.refresh_token;
                tokenInDb.scope         = userAccessToken.scope;
            }
            await context.SaveAsync();

            return(userAccessToken);
        }