public async Task <bool> RequestAccessToken(String code)
        {
            try
            {
                var dic = new Dictionary <String, String>();
                dic["grant_type"]    = "authorization_code";
                dic["client_id"]     = ConsumerKey;
                dic["client_secret"] = ConsumerSecret;
                dic["redirect_uri"]  = "com.playstation.PlayStationApp://redirect";
                dic["state"]         = "x";
                dic["scope"]         = "psn:sceapp";
                dic["code"]          = code;
                var theAuthClient = new HttpClient();
                var header        = new FormUrlEncodedContent(dic);
                var response      = await theAuthClient.PostAsync(OauthToken, header);

                string responseContent = await response.Content.ReadAsStringAsync();

                if (string.IsNullOrEmpty(responseContent))
                {
                    return(false);
                }
                var authEntity = new UserAuthenticationEntity();
                authEntity.Parse(responseContent);
                _localSettings.Values["accessToken"]  = authEntity.AccessToken;
                _localSettings.Values["refreshToken"] = authEntity.RefreshToken;
                _localSettings.Values["expiresIn"]    = authEntity.ExpiresIn;
                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
        public async Task <Result> GetData(Uri uri, UserAuthenticationEntity userAuthenticationEntity, string language = "ja")
        {
            using (var httpClient = new HttpClient())
            {
                try
                {
                    var    authenticationManager = new AuthenticationManager();
                    Result result = new Result(false, "");
                    if (RefreshTime(userAuthenticationEntity.ExpiresInDate))
                    {
                        var tokens = await authenticationManager.RefreshAccessToken(userAuthenticationEntity.RefreshToken);

                        result.Tokens = tokens.Tokens;
                    }
                    httpClient.DefaultRequestHeaders.Add("Origin", "http://psapp.dl.playstation.net");
                    httpClient.DefaultRequestHeaders.Add("Accept-Language", language);
                    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", userAuthenticationEntity.AccessToken);
                    var response = await httpClient.GetAsync(uri);

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

                    result.IsSuccess  = response.IsSuccessStatusCode;
                    result.ResultJson = responseContent;
                    return(result);
                }
                catch (Exception ex)
                {
                    // TODO: Add detail error result to json object.
                    return(new Result(false, string.Empty));
                }
            }
        }
Esempio n. 3
0
        public async Task <Result> GetNicoFeed(string status, string platform, bool titlePreset, int offset,
                                               int limit, string sort, string query,
                                               UserAuthenticationEntity userAuthenticationEntity)
        {
            var url = EndPoints.NicoNicoBaseUrl;

            // Sony's app hardcodes this value to 0.
            // This app could, in theory, allow for more polling of data, so these options are left open to new values and limits.
            if (!string.IsNullOrEmpty(query))
            {
                url += $"keyword={query}&";
            }
            url += $"offset={offset}&";
            url += $"limit={limit}&";
            url += $"status={status}&";
            url += $"sce_platform={platform}&";
            if (titlePreset)
            {
                url += "sce_title_preset=true&";
            }
            url += $"sort={sort}";
            // TODO: Fix this cheap hack to get around caching issue. For some reason, no-cache is not working...
            url += "&r=" + Guid.NewGuid();
            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
Esempio n. 4
0
        public async Task <Result> GetTwitchFeed(int offset, int limit, string platform,
                                                 bool titlePreset, string query, UserAuthenticationEntity userAuthenticationEntity, string language = "ja")
        {
            var url = EndPoints.TwitchBaseUrl;

            // Sony's app hardcodes this value to 0.
            // This app could, in theory, allow for more polling of data, so these options are left open to new values and limits.
            url += $"sce_platform=PS4&offset={offset}&";
            url += $"limit={limit}&";
            if (!string.IsNullOrEmpty(query))
            {
                url += $"q={query}&";
            }
            if (titlePreset)
            {
                url += "sce_title_preset=true";
            }

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.twitchtv.v1+json"));
                httpClient.DefaultRequestHeaders.Add("Platform", "54bd6377db3b48cba9ecc44bff5a410b");
                httpClient.DefaultRequestHeaders.Add("Accept-Language", language);

                var response = await httpClient.GetAsync(new Uri(url));

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

                return(new Result(response.IsSuccessStatusCode, responseContent));
            }
        }
        public async Task <Result> AddEvent(string id, string username, UserAuthenticationEntity userAuthenticationEntity, string region = "ja")
        {
            var url  = string.Format(EndPoints.AddRemoveEvent, region, id, username);
            var json = new StringContent("{\"autoBootPreference\":{\"autoBootFlag\":false,\"key\":\"\"}}", Encoding.UTF8, "application/json");

            return(await _webManager.PutData(new Uri(url), json, userAuthenticationEntity));
        }
Esempio n. 6
0
        public async Task <UserAuthenticationEntity> RequestAccessToken(string code)
        {
            try
            {
                var dic = new Dictionary <String, String>();
                dic["grant_type"]    = "authorization_code";
                dic["client_id"]     = EndPoints.ConsumerKey;
                dic["client_secret"] = EndPoints.ConsumerSecret;
                dic["redirect_uri"]  = "com.playstation.PlayStationApp://redirect";
                dic["state"]         = "x";
                dic["scope"]         = "psn:sceapp";
                dic["code"]          = code;
                var theAuthClient = new HttpClient();
                var header        = new FormUrlEncodedContent(dic);
                var response      = await theAuthClient.PostAsync(EndPoints.OauthToken, header);

                string responseContent = await response.Content.ReadAsStringAsync();

                if (string.IsNullOrEmpty(responseContent))
                {
                    throw new Exception("Failed to get access token");
                }
                var authEntity = new UserAuthenticationEntity();
                authEntity.Parse(responseContent);
                return(authEntity);
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to get access token", ex);
            }
        }
        public async Task <Result> GetMessageGroup(string username, UserAuthenticationEntity userAuthenticationEntity, string region = "jp", string language = "ja")
        {
            var url = string.Format(EndPoints.MessageGroup, region, username, language);

            url += "&r=" + Guid.NewGuid();
            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity, language));
        }
        public async Task <Result> DeleteMessageThread(string messageGroupId, string onlineId,
                                                       UserAuthenticationEntity userAuthenticationEntity, string region = "jp")
        {
            var url = string.Format(EndPoints.DeleteThread, region, messageGroupId, onlineId);

            return(await _webManager.DeleteData(new Uri(url), null, userAuthenticationEntity));
        }
        public async Task <Result> CreatePostWithMedia(string messageUserId, string post, string path, Stream stream,
                                                       UserAuthenticationEntity userAuthenticationEntity, string region = "jp")
        {
            var          url         = string.Format(EndPoints.CreatePost, region, messageUserId);
            const string boundary    = "gc0p4Jq0M2Yt08jU534c0p";
            var          messageJson = new SendMessage
            {
                message = new Message()
                {
                    body           = post,
                    fakeMessageUid = 1234,
                    messageKind    = 3
                }
            };

            var json          = JsonConvert.SerializeObject(messageJson);
            var stringContent = new StringContent(json, Encoding.UTF8, "application/json");

            stringContent.Headers.Add("Content-Description", "message");
            var form = new MultipartContent("mixed", boundary)
            {
                stringContent
            };
            var t = new StreamContent(stream);

            t.Headers.ContentType        = new MediaTypeHeaderValue("image/jpeg");
            t.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
            t.Headers.Add("Content-Description", "image-data-0");
            t.Headers.Add("Content-Transfer-Encoding", "binary");
            t.Headers.ContentLength = stream.Length;
            form.Add(t);

            return(await _webManager.PostData(new Uri(url), form, userAuthenticationEntity));
        }
        public async Task <Result> CreatePost(string messageUserId, string post,
                                              UserAuthenticationEntity userAuthenticationEntity, string region = "jp")
        {
            var          url         = string.Format(EndPoints.CreatePost, region, messageUserId);
            const string boundary    = "gc0p4Jq0M2Yt08jU534c0p";
            var          messageJson = new SendMessage
            {
                message = new Message()
                {
                    body           = post,
                    fakeMessageUid = 1234,
                    messageKind    = 1
                }
            };

            var json          = JsonConvert.SerializeObject(messageJson);
            var stringContent = new StringContent(json, Encoding.UTF8, "application/json");

            stringContent.Headers.Add("Content-Description", "message");
            var form = new MultipartContent("mixed", boundary)
            {
                stringContent
            };

            return(await _webManager.PostData(new Uri(url), form, userAuthenticationEntity));
        }
Esempio n. 11
0
        public async Task <Result> SearchForFriends(string query, UserAuthenticationEntity userAuthenticationEntity,
                                                    string region = "jp", string language = "ja")
        {
            var url = String.Format(EndPoints.FriendFinder, query);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity, language));
        }
        public async Task <Result> GetTrophyDetailList(string gameId, string comparedUser, bool includeHidden,
                                                       UserAuthenticationEntity userAuthenticationEntity, string fromUser, string region = "jp", string language = "ja")
        {
            var url = string.Format(EndPoints.TrophyDetailList, region, gameId, language, comparedUser, fromUser);

            url += "&r=" + Guid.NewGuid();
            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity, language));
        }
        public static void SaveUserCredentials(UserAuthenticationEntity userAuthenticationEntity)
        {
            var vault = new PasswordVault();

            var credential = new PasswordCredential("key",
                                                    "user",
                                                    userAuthenticationEntity.ToString());

            vault.Add(credential);
        }
        public async Task <Result> GetFriendLink(UserAuthenticationEntity userAuthenticationEntity)
        {
            var param = new Dictionary <string, string> {
                { "type", "ONE" }
            };
            var jsonObject    = JsonConvert.SerializeObject(param);
            var stringContent = new StringContent(jsonObject, Encoding.UTF8, "application/json");

            return(await _webManager.PostData(new Uri(EndPoints.FriendMeUrl), stringContent, userAuthenticationEntity));
        }
Esempio n. 15
0
 public async Task <Result> GetUserAvatar(string userName, UserAuthenticationEntity userAuthenticationEntity,
                                          string region = "jp", string language = "ja")
 {
     try
     {
         var url = string.Format(EndPoints.UserAvatars, region, userName);
         return(await _webManager.GetData(new Uri(url), userAuthenticationEntity, language));
     }
     catch (Exception exception)
     {
         throw new Exception("Error getting user avatars", exception);
     }
 }
Esempio n. 16
0
        public async Task <Result> GetActivityFeed(string userName, int?pageNumber, bool storePromo,
                                                   bool isNews, UserAuthenticationEntity userAuthenticationEntity, string region = "jp", string language = "ja")
        {
            var feedNews = isNews ? "news" : "feed";
            var url      = string.Format(EndPoints.RecentActivity, userName, feedNews, pageNumber);

            if (storePromo)
            {
                url += "&filters=STORE_PROMO";
            }
            url += "&r=" + Guid.NewGuid();
            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity, language));
        }
        public async Task <bool> RefreshAccessToken(UserAccountEntity account)
        {
            try
            {
                //var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
                var dic = new Dictionary <String, String>();
                dic["grant_type"]    = "refresh_token";
                dic["client_id"]     = ConsumerKey;
                dic["client_secret"] = ConsumerSecret;
                dic["refresh_token"] = account.GetRefreshToken();
                dic["scope"]         = "psn:sceapp";

                account.SetAccessToken("updating", null);
                account.SetRefreshTime(1000);
                var                 theAuthClient = new HttpClient();
                HttpContent         header        = new FormUrlEncodedContent(dic);
                HttpResponseMessage response      = await theAuthClient.PostAsync(OauthToken, header);

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string responseContent = await response.Content.ReadAsStringAsync();

                    JObject o = JObject.Parse(responseContent);
                    if (string.IsNullOrEmpty(responseContent))
                    {
                        return(false);
                    }
                    account.SetAccessToken((String)o["access_token"], (String)o["refresh_token"]);
                    account.SetRefreshTime(long.Parse((String)o["expires_in"]));

                    UserAuthenticationEntity authEntity = UserAuthenticationEntity.Parse(responseContent);
                    _appSettings["refreshToken"] = authEntity.RefreshToken;
                    _appSettings["accessToken"]  = authEntity.AccessToken;
                    _appSettings.Save();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception)
            {
                return(false);
            }
        }
        public async Task <Result> GetFriendsList(string username, int?offset, bool blockedPlayer,
                                                  bool playedRecently, bool personalDetailSharing, bool friendStatus, bool requesting, bool requested,
                                                  bool onlineFilter, UserAuthenticationEntity userAuthenticationEntity, string region = "jp", string language = "ja")
        {
            var url = string.Format(EndPoints.FriendList, region, username, offset);

            if (onlineFilter)
            {
                url += "&filter=online";
            }
            if (friendStatus && !requesting && !requested)
            {
                url += "&friendStatus=friend&presenceType=primary";
            }
            if (friendStatus && requesting && !requested)
            {
                url += "&friendStatus=requesting";
            }
            if (friendStatus && !requesting && requested)
            {
                url += "&friendStatus=requested";
            }
            if (personalDetailSharing && requested)
            {
                url += "&friendStatus=friend&personalDetailSharing=requested&presenceType=primary";
            }
            if (personalDetailSharing && requesting)
            {
                url += "&friendStatus=friend&personalDetailSharing=requesting&presenceType=primary";
            }
            if (playedRecently)
            {
                url =
                    string.Format(
                        EndPoints.RecentlyPlayed, username);
            }
            if (blockedPlayer)
            {
                url =
                    $"https://{region}-prof.np.community.playstation.net/userProfile/v1/users/{username}/blockList?fields=@default,@profile&offset={offset}";
            }
            url += "&r=" + Guid.NewGuid();
            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity, language));
        }
        public async Task <Result> PostData(Uri uri, StringContent content, UserAuthenticationEntity userAuthenticationEntity, string language = "ja", bool isMessage = false)
        {
            var handler = new HttpClientHandler
            {
                AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
            };

            using (var httpClient = new HttpClient(handler))
            {
                try
                {
                    var    authenticationManager = new AuthenticationManager();
                    Result result = new Result(false, "");
                    if (RefreshTime(userAuthenticationEntity.ExpiresInDate))
                    {
                        var tokens = await authenticationManager.RefreshAccessToken(userAuthenticationEntity.RefreshToken);

                        result.Tokens = tokens.Tokens;
                    }
                    if (isMessage)
                    {
                        httpClient.DefaultRequestHeaders.Add("User-Agent", "PlayStation Messages App/3.20.23");
                    }
                    httpClient.DefaultRequestHeaders.Add("Accept-Language", language);
                    httpClient.DefaultRequestHeaders.Add("Origin", "http://psapp.dl.playstation.net");
                    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", userAuthenticationEntity.AccessToken);
                    var response = await httpClient.PostAsync(uri, content);

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

                    result.IsSuccess  = response.IsSuccessStatusCode;
                    result.ResultJson = responseContent;
                    return(result);
                }
                catch (Exception)
                {
                    return(new Result(false, string.Empty));
                }
            }
        }
        public async Task <Stream> GetMessageContent(string id, string messageUid, UserAuthenticationEntity userAuthenticationEntity, string region = "jp", string language = "ja")
        {
            try
            {
                var    content = "image-data-0";
                string url     =
                    $"https://{region}-gmsg.np.community.playstation.net/groupMessaging/v1/messageGroups/{id}/messages/{messageUid}?contentKey={content}&npLanguage={language}";
                var theAuthClient = new HttpClient();
                var request       = new HttpRequestMessage(HttpMethod.Get, url);
                request.Headers.CacheControl = new CacheControlHeaderValue {
                    NoCache = true
                };
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", userAuthenticationEntity.AccessToken);
                var response = await theAuthClient.SendAsync(request);

                var responseContent = await response.Content.ReadAsStreamAsync();

                return(responseContent);
            }
            catch (Exception)
            {
                return(null);
            }
        }
        public async Task <Result> GetEventLiveBroadcast(string id, UserAuthenticationEntity userAuthenticationEntity)
        {
            var url = string.Format(EndPoints.EventLiveBroadcast, id);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> GetEventDetailFriends(string id, int offset, int limit, UserAuthenticationEntity userAuthenticationEntity,
                                                         string region = "ja")
        {
            var url = string.Format(EndPoints.EventDetailFriends, region, id, offset, limit);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> RemoveEvent(string id, string username, UserAuthenticationEntity userAuthenticationEntity, string region = "ja")
        {
            var url = string.Format(EndPoints.AddRemoveEvent, region, id, username);

            return(await _webManager.DeleteData(new Uri(url), null, userAuthenticationEntity));
        }
        public async Task <Result> GetEventTitleDetails(string id, UserAuthenticationEntity userAuthenticationEntity, string sort = "eventStartDate", string region = "ja")
        {
            var url = string.Format(EndPoints.EventTitleDetails, region, id, sort);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> GetFeaturedEvents(UserAuthenticationEntity userAuthenticationEntity, string sort = "recommendInGame", string region = "ja")
        {
            var url = string.Format(EndPoints.FeaturedEvents, region, sort);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> GetMyEvents(UserAuthenticationEntity userAuthenticationEntity, string targetEvents = "inSessionAndUpcoming", string region = "ja")
        {
            var url = string.Format(EndPoints.MyEvents, region, targetEvents);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> GetFriendRequestMessage(string username, string currentUserOnlineId, UserAuthenticationEntity userAuthenticationEntity, string region = "jp")
        {
            var url = string.Format(EndPoints.RequestMessage, region, currentUserOnlineId, username);

            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> DeleteFriend(string username, string currentUserOnlineId, UserAuthenticationEntity userAuthenticationEntity, string region = "jp", string language = "ja")
        {
            var url    = string.Format(EndPoints.DenyAddFriend, region, currentUserOnlineId, username);
            var result = await _webManager.DeleteData(new Uri(url), null, userAuthenticationEntity, language);

            return(new Result(result.IsSuccess, string.Empty));
        }
Esempio n. 29
0
        public async Task <Result> GetUstreamFeed(int pageNumber, int pageSize, string detailLevel,
                                                  Dictionary <string, string> filterList, string sortBy, string query, UserAuthenticationEntity userAuthenticationEntity)
        {
            var url = EndPoints.UstreamBaseUrl;

            url += $"p={pageNumber}&";
            url += $"pagesize={pageSize}&";
            url += $"detail_level={detailLevel}&";
            foreach (var item in filterList)
            {
                if (item.Key.Equals(EndPoints.UstreamUrlConstants.Interactive))
                {
                    url += string.Format(EndPoints.UstreamUrlConstants.FilterBase, EndPoints.UstreamUrlConstants.PlatformPs4) +
                           "[interactive]=" + item.Value + "&";
                }
                else
                {
                    url += string.Concat(string.Format(EndPoints.UstreamUrlConstants.FilterBase, item.Key), "=", item.Value + "&");
                }
            }
            url += $"sort={sortBy}";
            if (!string.IsNullOrEmpty(query))
            {
                url += $"&q={query}";
            }
            url += "&r=" + Guid.NewGuid();
            return(await _webManager.GetData(new Uri(url), userAuthenticationEntity));
        }
        public async Task <Result> SendNameRequest(string username, string currentUserOnlineId, UserAuthenticationEntity userAuthenticationEntity, string region = "jp")
        {
            var param         = new Dictionary <String, String>();
            var jsonObject    = JsonConvert.SerializeObject(param);
            var stringContent = new StringContent(jsonObject, Encoding.UTF8, "application/json");
            var url           = string.Format(EndPoints.SendNameRequest, region, currentUserOnlineId, username);

            return(await _webManager.PostData(new Uri(url), stringContent, userAuthenticationEntity));
        }