/// <summary> /// Login with a stored <see cref="AccessToken" />. /// </summary> /// <param name="loginProvider">The OAuth provider you use to authenticate.</param> /// <param name="accessToken">The <see cref="AccessToken"/> you want to re-use.</param> /// <param name="coordinate">The initial coordinate you will spawn at after logging into PokémonGo.</param> /// <param name="deviceWrapper">The <see cref="DeviceWrapper"/> used by the <see cref="Session"/>, keep null if you want a randomly generated <see cref="DeviceWrapper"/>.</param> /// <param name = "playerLocale"></param> /// <returns></returns> public static Session GetSession(ILoginProvider loginProvider, AccessToken accessToken, GeoCoordinate coordinate, DeviceWrapper deviceWrapper = null, GetPlayerMessage.Types.PlayerLocale playerLocale = null) { DeviceWrapper device = deviceWrapper ?? DeviceInfoUtil.GetRandomDevice(); GetPlayerMessage.Types.PlayerLocale locale = playerLocale ?? new GetPlayerMessage.Types.PlayerLocale { Country = "US", Language = "en", Timezone = "America/New_York" }; string language = locale.Language + "-" + locale.Country; if (accessToken.IsExpired) { accessToken = loginProvider.GetAccessToken(device.UserAgent, language).Result; //throw new ArgumentException($"{nameof(accessToken)} is expired."); } var session = new Session(loginProvider, accessToken, coordinate, device, locale); session.Logger.Debug("Authenticated from cache."); if (loginProvider is PtcLoginProvider) { session.Logger.Debug("Authenticated through PTC."); } else { session.Logger.Debug("Authenticated through Google."); } return(session); }
internal Player(Session session, GeoCoordinate coordinate, GetPlayerMessage.Types.PlayerLocale playerLocale) { Coordinate = coordinate; PlayerLocale = playerLocale; Inventory = new Inventory(session); session.InventoryUpdate += InventoryOnUpdate; }
public static Request GetPlayerMessageRequest(string country = "", string language = "", string zone = "") { var locale = new GetPlayerMessage.Types.PlayerLocale(); locale.Country = country; locale.Language = language; locale.Timezone = zone; var req = new Request { RequestType = RequestType.GetPlayer, RequestMessage = new GetPlayerMessage { PlayerLocale = locale }.ToByteString() }; return(req); }
public void SetSettings(Manager manager) { Settings = manager.UserSettings; ClientManager = manager; int osId = OsVersions[Settings.FirmwareType.Length].Length; var firmwareUserAgentPart = OsUserAgentParts[osId]; var firmwareType = OsVersions[osId]; Proxy = new ProxyEx { Address = Settings.ProxyIP, Port = Settings.ProxyPort, Username = Settings.ProxyUsername, Password = Settings.ProxyPassword }; ClientDeviceWrapper = new DeviceWrapper { UserAgent = $"pokemongo/1 {firmwareUserAgentPart}", DeviceInfo = new DeviceInfo { DeviceId = Settings.DeviceId, DeviceBrand = Settings.DeviceBrand, DeviceModelBoot = Settings.DeviceModelBoot, HardwareModel = Settings.HardwareModel, HardwareManufacturer = Settings.HardwareManufacturer, FirmwareBrand = Settings.FirmwareBrand, FirmwareType = Settings.FirmwareType, AndroidBoardName = Settings.AndroidBoardName, AndroidBootloader = Settings.AndroidBootloader, DeviceModel = Settings.DeviceModel, DeviceModelIdentifier = Settings.DeviceModelIdentifier, FirmwareFingerprint = Settings.FirmwareFingerprint, FirmwareTags = Settings.FirmwareTags }, Proxy = Proxy.AsWebProxy() }; PlayerLocale = new GetPlayerMessage.Types.PlayerLocale { Country = Settings.Country, Language = Settings.Language, Timezone = Settings.TimeZone }; }
public void SetSettings(Manager manager) { ClientManager = manager; Proxy = new ProxyEx { Address = ClientManager.UserSettings.ProxyIP, Port = ClientManager.UserSettings.ProxyPort, Username = ClientManager.UserSettings.ProxyUsername, Password = ClientManager.UserSettings.ProxyPassword }; Dictionary <string, string> Header = new Dictionary <string, string>() { { "11.1.0", "CFNetwork/889.3 Darwin/17.2.0" }, { "11.2.0", "CFNetwork/893.10 Darwin/17.3.0" }, { "11.2.5", "CFNetwork/893.14.2 Darwin/17.4.0" } }; ClientDeviceWrapper = new DeviceWrapper { UserAgent = $"pokemongo/1 {Header[ClientManager.UserSettings.FirmwareType]}", DeviceInfo = new DeviceInfo { DeviceId = ClientManager.UserSettings.DeviceId, DeviceBrand = ClientManager.UserSettings.DeviceBrand, DeviceModel = ClientManager.UserSettings.DeviceModel, DeviceModelBoot = ClientManager.UserSettings.DeviceModelBoot, HardwareManufacturer = ClientManager.UserSettings.HardwareManufacturer, HardwareModel = ClientManager.UserSettings.HardwareModel, FirmwareBrand = ClientManager.UserSettings.FirmwareBrand, FirmwareType = ClientManager.UserSettings.FirmwareType }, Proxy = Proxy.AsWebProxy() }; PlayerLocale = new GetPlayerMessage.Types.PlayerLocale { Country = ClientManager.UserSettings.Country, Language = ClientManager.UserSettings.Language, Timezone = ClientManager.UserSettings.TimeZone }; }
/// <summary> /// Login through OAuth with PTC / Google. /// </summary> /// <param name="loginProvider">The OAuth provider you use to authenticate.</param> /// <param name="initialLatitude">The initial latitude you will spawn at after logging into PokémonGo.</param> /// <param name="initialLongitude">The initial longitude you will spawn at after logging into PokémonGo.</param> /// <param name="deviceWrapper">The <see cref="DeviceWrapper"/> used by the <see cref="Session"/>, keep null if you want a randomly generated <see cref="DeviceWrapper"/>.</param> /// <param name = "playerLocale"></param> /// <returns></returns> public static async Task <Session> GetSession(ILoginProvider loginProvider, double initialLatitude, double initialLongitude, DeviceWrapper deviceWrapper = null, GetPlayerMessage.Types.PlayerLocale playerLocale = null) { DeviceWrapper device = deviceWrapper ?? DeviceInfoUtil.GetRandomDevice(); GetPlayerMessage.Types.PlayerLocale locale = playerLocale ?? new GetPlayerMessage.Types.PlayerLocale { Country = "US", Language = "en", Timezone = "America/New_York" }; string language = locale.Language + "-" + locale.Country; var session = new Session(loginProvider, await loginProvider.GetAccessToken(device.UserAgent, language), new GeoCoordinate(initialLatitude, initialLongitude), device, locale); if (loginProvider is PtcLoginProvider) { session.Logger.Debug("Authenticated through PTC."); } else { session.Logger.Debug("Authenticated through Google."); } return(session); }
public void SetSettings(Manager manager) { ClientManager = manager; int osId = OsVersions[ClientManager.UserSettings.DeviceInfo.FirmwareType.Length].Length; var firmwareUserAgentPart = OsUserAgentParts[osId]; var firmwareType = OsVersions[osId]; Proxy = new ProxyEx { Address = ClientManager.UserSettings.ProxyIP, Port = ClientManager.UserSettings.ProxyPort, Username = ClientManager.UserSettings.ProxyUsername, Password = ClientManager.UserSettings.ProxyPassword }; ClientDeviceWrapper = new DeviceWrapper { UserAgent = $"pokemongo/1 {firmwareUserAgentPart}", DeviceInfo = new DeviceInfo { DeviceId = ClientManager.UserSettings.DeviceInfo.DeviceId, DeviceBrand = ClientManager.UserSettings.DeviceInfo.DeviceBrand, DeviceModel = ClientManager.UserSettings.DeviceInfo.DeviceModel, DeviceModelBoot = ClientManager.UserSettings.DeviceInfo.DeviceModelBoot, HardwareManufacturer = ClientManager.UserSettings.DeviceInfo.HardwareManufacturer, HardwareModel = ClientManager.UserSettings.DeviceInfo.HardwareModel, FirmwareBrand = ClientManager.UserSettings.DeviceInfo.FirmwareBrand, FirmwareType = ClientManager.UserSettings.DeviceInfo.FirmwareType }, Proxy = Proxy.AsWebProxy() }; PlayerLocale = new GetPlayerMessage.Types.PlayerLocale { Country = ClientManager.UserSettings.PlayerLocale.Country, Language = ClientManager.UserSettings.PlayerLocale.Language, Timezone = ClientManager.UserSettings.PlayerLocale.Timezone }; }
private void SetSettings() { int osId = OsVersions[UserSettings.FirmwareType.Length].Length; var firmwareUserAgentPart = OsUserAgentParts[osId]; var firmwareType = OsVersions[osId]; ClientDeviceWrapper = new DeviceWrapper { UserAgent = $"pokemongo/1 {firmwareUserAgentPart}", DeviceInfo = new DeviceInfo { DeviceId = UserSettings.DeviceId, DeviceBrand = UserSettings.DeviceBrand, DeviceModelBoot = UserSettings.DeviceModelBoot, HardwareModel = UserSettings.HardwareModel, HardwareManufacturer = UserSettings.HardwareManufacturer, FirmwareBrand = UserSettings.FirmwareBrand, FirmwareType = UserSettings.FirmwareType, AndroidBoardName = UserSettings.AndroidBoardName, AndroidBootloader = UserSettings.AndroidBootloader, DeviceModel = UserSettings.DeviceModel, DeviceModelIdentifier = UserSettings.DeviceModelIdentifier, FirmwareFingerprint = UserSettings.FirmwareFingerprint, FirmwareTags = UserSettings.FirmwareTags }, //TODO: New in pogolib need port and user data! //ProxyAddress = UserSettings.ProxyIP }; PlayerLocale = new GetPlayerMessage.Types.PlayerLocale { Country = UserSettings.Country, Language = UserSettings.Language, Timezone = UserSettings.TimeZone }; }
/// <summary> /// Login with a stored <see cref="AccessToken" />. /// </summary> /// <param name="loginProvider"></param> /// <param name="accessToken"></param> /// <param name="initialLatitude">The initial latitude you will spawn at after logging into PokémonGo.</param> /// <param name="initialLongitude">The initial longitude you will spawn at after logging into PokémonGo.</param> /// <param name="deviceWrapper">The <see cref="DeviceWrapper"/> used by the <see cref="Session"/>, keep null if you want a randomly generated <see cref="DeviceWrapper"/>.</param> /// <param name = "playerLocale"></param> /// <returns></returns> public static async Task <Session> GetSession(ILoginProvider loginProvider, AccessToken accessToken, double initialLatitude, double initialLongitude, DeviceWrapper deviceWrapper = null, GetPlayerMessage.Types.PlayerLocale playerLocale = null) { DeviceWrapper device = deviceWrapper ?? DeviceInfoUtil.GetRandomDevice(); GetPlayerMessage.Types.PlayerLocale locale = playerLocale ?? new GetPlayerMessage.Types.PlayerLocale { Country = "US", Language = "en", Timezone = "America/New_York" }; string language = locale.Language + "-" + locale.Country; if (accessToken == null || string.IsNullOrEmpty(accessToken.Token) || accessToken.IsExpired) { accessToken = await loginProvider.GetAccessToken(device.UserAgent, language); if (accessToken == null || string.IsNullOrEmpty(accessToken.Token) || accessToken.IsExpired) { throw new SessionStateException($"{nameof(accessToken)} is expired."); } } var session = new Session(loginProvider, accessToken, new GeoCoordinate(initialLatitude, initialLongitude), device, locale); session.Logger.Debug("Authenticated from cache."); return(session); }
public async Task <GetPlayerResponse> GetPlayer(bool addCommonRequests = true, bool addChallengeRequests = false) { var locale = new GetPlayerMessage.Types.PlayerLocale { Country = LocaleInfo.Country, Language = LocaleInfo.Language, Timezone = LocaleInfo.TimeZone }; var getPlayerRequest = new Request { RequestType = RequestType.GetPlayer, RequestMessage = new GetPlayerMessage() { PlayerLocale = locale }.ToByteString() }; if (addCommonRequests) { var requestEnvelope = await GetRequestBuilder().GetRequestEnvelope(CommonRequest.FillRequest(getPlayerRequest, Client)).ConfigureAwait(false); Tuple <GetPlayerResponse, CheckChallengeResponse, GetHatchedEggsResponse, GetHoloInventoryResponse, CheckAwardedBadgesResponse, DownloadSettingsResponse, GetBuddyWalkedResponse> response = await PostProtoPayload <Request, GetPlayerResponse, CheckChallengeResponse, GetHatchedEggsResponse, GetHoloInventoryResponse, CheckAwardedBadgesResponse, DownloadSettingsResponse, GetBuddyWalkedResponse>(requestEnvelope).ConfigureAwait(false); GetPlayerResponse getPlayerResponse = response.Item1; CommonRequest.ProcessGetPlayerResponse(Client, getPlayerResponse); CheckChallengeResponse checkChallengeResponse = response.Item2; CommonRequest.ProcessCheckChallengeResponse(Client, checkChallengeResponse); GetHoloInventoryResponse getHoloInventoryResponse = response.Item4; CommonRequest.ProcessGetHoloInventoryResponse(Client, getHoloInventoryResponse); DownloadSettingsResponse downloadSettingsResponse = response.Item6; CommonRequest.ProcessDownloadSettingsResponse(Client, downloadSettingsResponse); return(response.Item1); } if (addChallengeRequests) { var challengeRequest = new Request { RequestType = RequestType.CheckChallenge, RequestMessage = new CheckChallengeMessage().ToByteString() }; var requestEnvelope = await GetRequestBuilder().GetRequestEnvelope(new Request[] { getPlayerRequest, challengeRequest }).ConfigureAwait(false); Tuple <GetPlayerResponse, CheckChallengeResponse> response = await PostProtoPayload <Request, GetPlayerResponse, CheckChallengeResponse>(requestEnvelope).ConfigureAwait(false); CommonRequest.ProcessGetPlayerResponse(Client, response.Item1); return(response.Item1); } else { var requestEnvelope = await GetRequestBuilder().GetRequestEnvelope(new Request[] { getPlayerRequest }).ConfigureAwait(false); GetPlayerResponse getPlayerResponse = await PostProtoPayload <Request, GetPlayerResponse>(requestEnvelope).ConfigureAwait(false); CommonRequest.ProcessGetPlayerResponse(Client, getPlayerResponse); return(getPlayerResponse); } }
/// <summary> /// Stores data like assets and item templates. Defaults to an in-memory cache, but can be implemented as writing to disk by the platform /// </summary> // public IDataCache DataCache { get; set; } = new MemoryDataCache(); // public Templates Templates { get; private set; } internal Session(ILoginProvider loginProvider, AccessToken accessToken, GeoCoordinate geoCoordinate, DeviceWrapper deviceWrapper, GetPlayerMessage.Types.PlayerLocale playerLocale) { if (!ValidLoginProviders.Contains(loginProvider.ProviderId)) { throw new ArgumentException("LoginProvider ID must be one of the following: " + string.Join(", ", ValidLoginProviders)); } Logger = new Logger(); State = SessionState.Stopped; Device = deviceWrapper; var handler = new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, UseProxy = Device.Proxy != null, Proxy = Device.Proxy }; HttpClient = new HttpClient(handler); HttpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(Constants.ApiUserAgent); HttpClient.DefaultRequestHeaders.ExpectContinue = false; AccessToken = accessToken; if (IsValidAccessToken()) { OnAccessTokenUpdated(); } else { throw new SessionStateException("INVALID AUTH TOKEN"); } LoginProvider = loginProvider; Player = new Player(this, geoCoordinate, playerLocale); Map = new Map(this); Templates = new Templates(this); RpcClient = new RpcClient(this); if (Configuration.EnableHeartbeat) { Heartbeat = new HeartbeatDispatcher(this); } }