public void StoreAccessToken(JsonWebToken token, int userId)
        {
            if (token != null || userId > 0)
            {
                var aToken = _tokenRepo.GetAccessToken(userId);

                if (aToken != null)
                {
                    _tokenRepo.DeleteToken(aToken);
                }

                _tokenRepo.StoreAccessToken(token, userId);
            }
        }
Пример #2
0
        public async Task <IActionResult> SearchTrackAsync(string artist, string track)
        {
            var tokenEntity = await _accessTokenRepository.GetAccessToken();

            tokenEntity = _accessTokenRepository.ValidateToken(tokenEntity);
            if (string.IsNullOrEmpty(tokenEntity.Token))
            {
                return(Unauthorized());
            }

            var query = $"q=track:\"{track}\"%20artist:\"{artist}\"&type=track";

            query = System.Web.HttpUtility.UrlEncode(query);

            // Set bearer auth
            var client   = _authService.GetClientWithBearerAuth(tokenEntity);
            var response = await client.GetAsync($"{_trackUriBase}?{query}");

            if (!response.IsSuccessStatusCode)
            {
                return(BadRequest());
            }

            var content = await response.Content.ReadAsStringAsync();

            var trackOverview = JsonConvert.DeserializeObject <TrackOverview>(content);

            //_logger.Log(trackOverview.tracks.items[0].uri);

            return(Ok(trackOverview));
        }
Пример #3
0
        public async Task <ActionResult> GetPlaylistsAsync()
        {
            var tokenEntity = await _accessTokenRepository.GetAccessToken();

            tokenEntity = _accessTokenRepository.ValidateToken(tokenEntity);
            if (string.IsNullOrEmpty(tokenEntity.Token))
            {
                return(Unauthorized());
            }

            // Set bearer auth
            var client   = _authService.GetClientWithBearerAuth(tokenEntity);
            var response = await client.GetAsync($"{_playlistUriBase}{_playlistUri}");

            var playlistsString = await response.Content.ReadAsStringAsync();

            return(Ok(JsonConvert.DeserializeObject <PlaylistOverview>(playlistsString)));
        }
Пример #4
0
        /// <summary>
        /// 获取当前账号的AccessToken
        /// </summary>
        /// <param name="wid"></param>
        /// <param name="errorMessage"></param>
        /// <returns></returns>
        public AccessToken GetAccessToken(int wid, out string errorMessage)
        {
            lock (_obj)
            {
                try
                {
                    var appInfo = _appInfoRepository.GetAppInfo(wid);
                    if (appInfo == null)
                    {
                        errorMessage = string.Format("当前系统无wid为{0}相应公众号的配置", wid);
                        return(null);
                    }
                    if (string.IsNullOrEmpty(appInfo.AppId) || string.IsNullOrEmpty(appInfo.AppSecret))
                    {
                        errorMessage = string.Format("当前系统wid为{0}相应公众号的配置不完整,AppId或者AppSecret未填写完全,请在[我的公众帐号]里补全信息!",
                                                     wid);
                        return(null);
                    }

                    //从数据库中获取Token
                    var tokenFromDb = _accessTokenRepository.GetAccessToken(appInfo.Id);
                    //如果不存在
                    if (tokenFromDb == null || tokenFromDb.IsExpired())
                    {
                        //设置已存的AccessToken过期
                        _accessTokenRepository.SetAccessTokenExpire(tokenFromDb);

                        //从微信重新获取AccessToken
                        var accessTokenResult = CommonApi.GetToken(appInfo.AppId, appInfo.AppSecret);
                        var newAccessToken    = new AccessToken
                        {
                            Id          = Guid.NewGuid(),
                            AppId       = appInfo.Id,
                            SysDateTime = DateTime.Now,
                            Ticket      = accessTokenResult.access_token,
                            Expires     = accessTokenResult.expires_in
                        };

                        //缓存新获取到的AccessToken到数据库
                        _accessTokenRepository.Add(newAccessToken);

                        errorMessage = string.Empty;
                        return(newAccessToken);
                    }

                    errorMessage = string.Empty;

                    return(tokenFromDb);
                }
                catch (Exception exception)
                {
                    errorMessage = exception.Message;
                    return(null);
                }
            }
        }
        private async void DeleteToken()
        {
            var tokenEntity = await _accessTokenRepository.GetAccessToken();

            try
            {
                _accessTokenRepository.DeleteToken(tokenEntity);
            }
            catch (Exception ex)
            {
                _logger.LogError("Deleting an old access token failed.", ex);
            }
        }
Пример #6
0
        public bool TryValidateToken(string authorizationParameter, out Audience audience)
        {
            audience = null;
            var token = _accessTokenRepository.GetAccessToken(Guid.Parse(authorizationParameter));
            var valid = Validate(token);

            if (!valid)
            {
                return(false);
            }
            var resourceId = token.AudienceId;

            //update the accesstoken expiredOn
            _accessTokenRepository.UpdateToken(token);
            audience = UserAudienceMapper(_accessTokenRepository.GetUser(long.Parse(resourceId)));
            return(true);
        }