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)); } } }
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)); }
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)); }
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)); }
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)); }
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); } }
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)); }
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)); }