Example #1
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var scope = KeyStorage.Get("mail.googleScopes");
                var token = GoogleLoginProvider.Auth(HttpContext.Current, scope);

                var email = GetEmail(token.AccessToken);

                var emailInfo = new EmailAccessInfo
                {
                    Email        = email,
                    RefreshToken = token.RefreshToken
                };
                SubmitEmailInfo(emailInfo);
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                ErrorScope = ex.Message;
                SubmitEmailInfo(new EmailAccessInfo());
            }
        }
Example #2
0
 public GoogleDriveApp(
     PathProvider pathProvider,
     TenantUtil tenantUtil,
     AuthContext authContext,
     SecurityContext securityContext,
     UserManager userManager,
     UserManagerWrapper userManagerWrapper,
     CookiesManager cookiesManager,
     MessageService messageService,
     Global global,
     GlobalStore globalStore,
     EmailValidationKeyProvider emailValidationKeyProvider,
     FilesLinkUtility filesLinkUtility,
     SettingsManager settingsManager,
     PersonalSettingsHelper personalSettingsHelper,
     BaseCommonLinkUtility baseCommonLinkUtility,
     IOptionsMonitor <ILog> option,
     FileUtility fileUtility,
     FilesSettingsHelper filesSettingsHelper,
     IOptionsSnapshot <AccountLinker> snapshot,
     SetupInfo setupInfo,
     GoogleLoginProvider googleLoginProvider,
     TokenHelper tokenHelper,
     DocumentServiceConnector documentServiceConnector,
     ThirdPartyAppHandler thirdPartyAppHandler,
     IServiceProvider serviceProvider,
     TenantManager tenantManager,
     CoreBaseSettings coreBaseSettings,
     CoreSettings coreSettings,
     IConfiguration configuration,
     ICacheNotify <ConsumerCacheItem> cache,
     string name, int order, Dictionary <string, string> additional)
     : base(tenantManager, coreBaseSettings, coreSettings, configuration, cache, name, order, additional)
 {
     Logger                     = option.CurrentValue;
     PathProvider               = pathProvider;
     TenantUtil                 = tenantUtil;
     AuthContext                = authContext;
     SecurityContext            = securityContext;
     UserManager                = userManager;
     UserManagerWrapper         = userManagerWrapper;
     CookiesManager             = cookiesManager;
     MessageService             = messageService;
     Global                     = global;
     GlobalStore                = globalStore;
     EmailValidationKeyProvider = emailValidationKeyProvider;
     FilesLinkUtility           = filesLinkUtility;
     SettingsManager            = settingsManager;
     PersonalSettingsHelper     = personalSettingsHelper;
     BaseCommonLinkUtility      = baseCommonLinkUtility;
     FileUtility                = fileUtility;
     FilesSettingsHelper        = filesSettingsHelper;
     Snapshot                   = snapshot;
     SetupInfo                  = setupInfo;
     GoogleLoginProvider        = googleLoginProvider;
     TokenHelper                = tokenHelper;
     DocumentServiceConnector   = documentServiceConnector;
     ThirdPartyAppHandler       = thirdPartyAppHandler;
     ServiceProvider            = serviceProvider;
 }
Example #3
0
        public MailAccountData CreateAccountOAuth(string code, byte type)
        {
            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentException(@"Empty oauth code", "code");
            }

            var oAuthToken = OAuth20TokenHelper.GetAccessToken(GoogleLoginProvider.GoogleOauthTokenUrl,
                                                               GoogleLoginProvider.GoogleOAuth20ClientId,
                                                               GoogleLoginProvider.GoogleOAuth20ClientSecret,
                                                               GoogleLoginProvider.GoogleOAuth20RedirectUrl,
                                                               code);

            if (oAuthToken == null)
            {
                throw new Exception(@"Empty oauth token");
            }

            var loginProfile = new GoogleLoginProvider().GetLoginProfile(oAuthToken.AccessToken);
            var email        = loginProfile.EMail;

            if (string.IsNullOrEmpty(email))
            {
                throw new Exception(@"Empty email");
            }

            var beginDate = DateTime.UtcNow.Subtract(new TimeSpan(MailBox.DefaultMailLimitedTimeDelta));

            var mboxImap = MailBoxManager.ObtainMailboxSettings(TenantId, Username, email, "", (AuthorizationServiceType)type, true, false);

            mboxImap.OAuthToken = oAuthToken.ToJson();
            mboxImap.BeginDate  = beginDate; // Apply restrict for download

            try
            {
                MailBoxManager.SaveMailBox(mboxImap, (AuthorizationServiceType)type);
                MailBoxManager.CachedAccounts.Clear(Username);

                if (IsSignalRAvailable)
                {
                    MailBoxManager.UpdateUserActivity(TenantId, Username);
                }

                var account = new AccountInfo(mboxImap.MailBoxId, mboxImap.EMailView, mboxImap.Name, mboxImap.Enabled, mboxImap.QuotaError,
                                              MailBox.AuthProblemType.NoProblems, new MailSignature(mboxImap.MailBoxId, TenantId, "", false),
                                              new MailAutoreply(mboxImap.MailBoxId, TenantId, false, false, false, DateTime.MinValue,
                                                                DateTime.MinValue, String.Empty, String.Empty), true, mboxImap.EMailInFolder, false, false);

                return(account.ToAddressData().FirstOrDefault());
            }
            catch (Exception imapException)
            {
                throw new Exception(GetFormattedTextError(imapException, MailServerType.ImapOAuth, imapException is ImapConnectionTimeoutException));
            }
        }
Example #4
0
        public async Task <MethodResult <bool> > DoLogin(ISettings settings)
        {
            SetSettings(settings);
            Configuration.Hasher            = new PokeHashHasher(Settings.AuthAPIKey);
            Configuration.HasherUrl         = new Uri(Settings.HashHost.ToString());
            Configuration.IgnoreHashVersion = true;

            ILoginProvider loginProvider;

            switch (Settings.AuthType)
            {
            case AuthType.Google:
                loginProvider = new GoogleLoginProvider(Settings.GoogleUsername, Settings.GooglePassword);
                break;

            case AuthType.Ptc:
                loginProvider = new PtcLoginProvider(Settings.PtcUsername, Settings.PtcPassword);
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
            }

            ClientSession = await GetSession(loginProvider, Settings.DefaultLatitude, Settings.DefaultLongitude, true);

            SaveAccessToken(ClientSession.AccessToken);

            ClientSession.AccessTokenUpdated += SessionOnAccessTokenUpdated;
            ClientSession.InventoryUpdate    += InventoryOnUpdate;
            ClientSession.MapUpdate          += MapOnUpdate;
            ClientSession.CaptchaReceived    += SessionOnCaptchaReceived;

            // Send initial requests and start HeartbeatDispatcher.
            // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
            string msgStr = null;

            if (!await ClientSession.StartupAsync())
            {
                msgStr   = "Session couldn't start up.";
                LoggedIn = false;
            }
            else
            {
                LoggedIn = true;
                msgStr   = "Successfully logged into server.";
            }
            return(new MethodResult <bool>()
            {
                Success = LoggedIn,
                Message = msgStr
            });
        }
 public ThirdpartyConfiguration(
     IConfiguration configuration,
     IDaoFactory daoFactory,
     ConsumerFactory consumerFactory)
 {
     Configuration         = configuration;
     DaoFactory            = daoFactory;
     BoxLoginProvider      = consumerFactory.Get <BoxLoginProvider>();
     DropboxLoginProvider  = consumerFactory.Get <DropboxLoginProvider>();
     OneDriveLoginProvider = consumerFactory.Get <OneDriveLoginProvider>();
     DocuSignLoginProvider = consumerFactory.Get <DocuSignLoginProvider>();
     GoogleLoginProvider   = consumerFactory.Get <GoogleLoginProvider>();
 }
Example #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var token = GoogleLoginProvider.Auth(HttpContext.Current, GoogleLoginProvider.GoogleScopeContacts);

                ImportContacts(token);
                Master.SubmitContacts();
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Master.SubmitError(ex.Message);
            }
        }
 public ThirdpartyConfiguration(
     IConfiguration configuration,
     IDaoFactory daoFactory,
     BoxLoginProvider boxLoginProvider,
     DropboxLoginProvider dropboxLoginProvider,
     OneDriveLoginProvider oneDriveLoginProvider,
     DocuSignLoginProvider docuSignLoginProvider,
     GoogleLoginProvider googleLoginProvider)
 {
     Configuration         = configuration;
     DaoFactory            = daoFactory;
     BoxLoginProvider      = boxLoginProvider;
     DropboxLoginProvider  = dropboxLoginProvider;
     OneDriveLoginProvider = oneDriveLoginProvider;
     DocuSignLoginProvider = docuSignLoginProvider;
     GoogleLoginProvider   = googleLoginProvider;
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var token = GoogleLoginProvider.Auth(HttpContext.Current, GoogleContactsScope);

                ImportContacts(token);
                SubmitData();
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                ErrorScope = ex.Message;
                SubmitData();
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                var token = GoogleLoginProvider.Auth(HttpContext.Current, string.Concat(GoogleLoginProvider.GoogleScopeMail, " ", GoogleLoginProvider.GoogleScopeProfile));

                var loginProfile = new GoogleLoginProvider().GetLoginProfile(token == null ? null : token.AccessToken);

                var emailInfo = ToJson(new
                {
                    Email        = loginProfile.EMail,
                    RefreshToken = token.RefreshToken
                });
                SubmitData(emailInfo);
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                SubmitError(ex.Message);
            }
        }
Example #10
0
        public async Task <MethodResult <bool> > DoLogin(Manager manager)
        {
            SetSettings(manager);
            // TODO: see how do this only once better.
            if (!(Configuration.Hasher is PokeHashHasher))
            {
                // By default Configuration.Hasher is LegacyHasher type  (see Configuration.cs in the pogolib source code)
                // -> So this comparation only will run once.
                if (Settings.UseOnlyOneKey)
                {
                    Configuration.Hasher       = new PokeHashHasher(Settings.AuthAPIKey);
                    Configuration.HasherUrl    = Settings.HashHost;
                    Configuration.HashEndpoint = Settings.HashEndpoint;
                }
                else
                {
                    Configuration.Hasher = new PokeHashHasher(Settings.HashKeys.ToArray());
                }

                // TODO: make this configurable. To avoid bans (may be with a checkbox in hash keys tab).
                //Configuration.IgnoreHashVersion = true;
                VersionStr = Configuration.Hasher.PokemonVersion;
                //Revise sleeping line 118
                //((PokeHashHasher)Configuration.Hasher).PokehashSleeping += OnPokehashSleeping;
            }
            // *****

            ILoginProvider loginProvider;

            switch (Settings.AuthType)
            {
            case AuthType.Google:
                loginProvider = new GoogleLoginProvider(Settings.Username, Settings.Password);
                break;

            case AuthType.Ptc:
                loginProvider = new PtcLoginProvider(Settings.Username, Settings.Password, Proxy.AsWebProxy());
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
            }

            ClientSession = await GetSession(loginProvider, Settings.DefaultLatitude, Settings.DefaultLongitude, true);

            // Send initial requests and start HeartbeatDispatcher.
            // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
            string msgStr = null;

            if (!await ClientSession.StartupAsync())
            {
                msgStr   = "Session couldn't start up.";
                LoggedIn = false;
            }
            else
            {
                LoggedIn = true;
                msgStr   = "Successfully logged into server.";

                ClientSession.AccessTokenUpdated         += SessionOnAccessTokenUpdated;
                ClientSession.CaptchaReceived            += SessionOnCaptchaReceived;
                ClientSession.InventoryUpdate            += SessionInventoryUpdate;
                ClientSession.MapUpdate                  += MapUpdate;
                ClientSession.CheckAwardedBadgesReceived += OnCheckAwardedBadgesReceived;
                ClientSession.HatchedEggsReceived        += OnHatchedEggsReceived;

                SaveAccessToken(ClientSession.AccessToken);
            }

            return(new MethodResult <bool>()
            {
                Success = LoggedIn,
                Message = msgStr
            });
        }
Example #11
0
        public MailAccountData UpdateAccountOAuth(string code, byte type, int mailboxId)
        {
            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentException(@"Empty oauth code", "code");
            }

            var oAuthToken = OAuth20TokenHelper.GetAccessToken(GoogleLoginProvider.GoogleOauthTokenUrl,
                                                               GoogleLoginProvider.GoogleOAuth20ClientId,
                                                               GoogleLoginProvider.GoogleOAuth20ClientSecret,
                                                               GoogleLoginProvider.GoogleOAuth20RedirectUrl,
                                                               code);

            if (oAuthToken == null)
            {
                throw new Exception(@"Empty oauth token");
            }

            var loginProfile = new GoogleLoginProvider().GetLoginProfile(oAuthToken.AccessToken);
            var email        = loginProfile.EMail;

            if (string.IsNullOrEmpty(email))
            {
                throw new Exception(@"Empty email");
            }

            try
            {
                var mbox = MailBoxManager.GetMailBox(mailboxId);

                if (null == mbox)
                {
                    throw new ArgumentException("Mailbox with specified email doesn't exist.");
                }

                if (mbox.IsTeamlab || !mbox.IsOAuth)
                {
                    throw new ArgumentException("Mailbox with specified email can't be updated");
                }

                if (!mbox.EMail.Address.Equals(email, StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new ArgumentException("Mailbox with specified email can't be updated");
                }

                mbox.OAuthToken           = oAuthToken.ToJson();
                mbox.AccessTokenRefreshed = true;

                MailBoxManager.SaveMailBox(mbox, (AuthorizationServiceType)type);
                MailBoxManager.CachedAccounts.Clear(Username);

                if (IsSignalRAvailable)
                {
                    MailBoxManager.UpdateUserActivity(TenantId, Username);
                }

                var accountInfo = new AccountInfo(mbox.MailBoxId, mbox.EMailView, mbox.Name, mbox.Enabled, mbox.QuotaError,
                                                  MailBox.AuthProblemType.NoProblems, new MailSignature(mbox.MailBoxId, TenantId, "", false),
                                                  new MailAutoreply(mbox.MailBoxId, TenantId, false, false, false, DateTime.MinValue,
                                                                    DateTime.MinValue, String.Empty, String.Empty), false, mbox.EMailInFolder, false, false);

                return(accountInfo.ToAddressData().FirstOrDefault());
            }
            catch (Exception imapException)
            {
                throw new Exception(GetFormattedTextError(imapException, MailServerType.ImapOAuth, imapException is ImapConnectionTimeoutException));
            }
        }
Example #12
0
        private static async Task Run(string[] args)
        {
            // Configure Logger
            Logger.RegisterLogOutput((logLevel, message) => {
                if (logLevel < LoggerConfiguration.MinimumLogLevel)
                {
                    return;
                }

                var foregroundColor = LoggerConfiguration.DefaultForegroundColor;
                var backgroundColor = LoggerConfiguration.DefaultBackgroundColor;
                var timestamp       = DateTime.Now.ToString("HH:mm:ss");

                if (LoggerConfiguration.LogLevelColors.ContainsKey(logLevel))
                {
                    var colors = LoggerConfiguration.LogLevelColors[logLevel];

                    foregroundColor = colors.ForegroundColor;
                    backgroundColor = colors.BackgroundColor;
                }

                Console.ForegroundColor = foregroundColor;
                Console.BackgroundColor = backgroundColor;
                Console.WriteLine($"{timestamp,-10}{logLevel,-8}{message}");
                Console.ResetColor();
            });

            // Initiate console
            Logger.Info("Booting up.");
            Logger.Info("Type 'q', 'quit' or 'exit' to exit.");
            Console.Title = "POGO Demo";

            // Settings
            var loginProviderStr = "ptc";
            var usernameStr      = Environment.GetEnvironmentVariable("PTC_USERNAME") ?? ""; // Your PTC username
            var passwordStr      = Environment.GetEnvironmentVariable("PTC_PASSWORD") ?? ""; // Your PTC password

            // Login
            ILoginProvider loginProvider;

            switch (loginProviderStr)
            {
            case "google":
                loginProvider = new GoogleLoginProvider(usernameStr, passwordStr);
                break;

            case "ptc":
                loginProvider = new PtcLoginProvider(usernameStr, passwordStr);
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
            }

            var locRandom = new Random();
            var latitude  = 51.507352 + locRandom.NextDouble(-0.000030, 0.000030); // Somewhere in London
            var longitude = -0.127758 + locRandom.NextDouble(-0.000030, 0.000030);
            var session   = await GetSession(loginProvider, latitude, longitude, true);

            SaveAccessToken(session.AccessToken);

            session.AccessTokenUpdated      += SessionOnAccessTokenUpdated;
            session.Player.Inventory.Update += InventoryOnUpdate;
            session.Map.Update += MapOnUpdate;

            // Send initial requests and start HeartbeatDispatcher.
            // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
            if (!await session.StartupAsync())
            {
                throw new Exception("Session couldn't start up.");
            }

            // Retrieve the closest fort to your current player coordinates.
            var closestFort = session.Map.GetFortsSortedByDistance().FirstOrDefault();

            if (closestFort != null)
            {
                var fortDetailsBytes = await session.RpcClient.SendRemoteProcedureCallAsync(new Request
                {
                    RequestType    = RequestType.FortDetails,
                    RequestMessage = new FortDetailsMessage
                    {
                        FortId    = closestFort.Id,
                        Latitude  = closestFort.Latitude,
                        Longitude = closestFort.Longitude
                    }.ToByteString()
                });

                var fortDetailsResponse = FortDetailsResponse.Parser.ParseFrom(fortDetailsBytes);

                Console.WriteLine(JsonConvert.SerializeObject(fortDetailsResponse, Formatting.Indented));
            }
            else
            {
                Logger.Info("No fort found nearby.");
            }

            // Handle quit commands.
            HandleCommands();
        }
Example #13
0
        private static void Run(IEnumerable <Account> accounts)
        {
            foreach (var account in accounts)
            {
                Task.Run(async() =>
                {
                    try
                    {
                        // Login
                        ILoginProvider loginProvider;

                        switch (account.LoginProvider)
                        {
                        case "google":
                            loginProvider = new GoogleLoginProvider(account.Username, account.Password);
                            break;

                        default:
                            throw new ArgumentException("Login provider must be either \"google\".");
                        }

                        var locRandom = new Random();
                        var latitude  = 51.507352 + locRandom.NextDouble(-0.000030, 0.000030); // Somewhere in London
                        var longitude = -0.127758 + locRandom.NextDouble(-0.000030, 0.000030);
                        var session   = await GetSession(loginProvider, latitude, longitude, true);
                        session.Logger.RegisterLogOutput((level, message) =>
                        {
                            switch (level)
                            {
                            case LogLevel.Debug:
                                Logger.Debug(message);
                                break;

                            case LogLevel.Info:
                                Logger.Info(message);
                                break;

                            case LogLevel.Notice:
                            case LogLevel.Warn:
                                Logger.Warn(message);
                                break;

                            case LogLevel.Error:
                                Logger.Error(message);
                                break;

                            default:
                                throw new ArgumentOutOfRangeException(nameof(level), level, null);
                            }
                        });
                        SaveAccessToken(session.AccessToken);

                        // Send initial requests and start HeartbeatDispatcher.
                        // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
                        if (!await session.StartupAsync())
                        {
                            throw new Exception("Session couldn't start up.");
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Error($"Username '{account.Username}' had exception: {e.Message}");
                    }
                }, CancellationTokenSource.Token);
            }
        }
Example #14
0
        private static async Task Run(string[] args)
        {
            // Configure Logger
            LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(Directory.GetCurrentDirectory(), "nlog.config"));


            // Initiate console
            Logger.Info("Booting up.");
            Logger.Info("Type 'q', 'quit' or 'exit' to exit.");
            Console.Title = "WU Demo";

            Configuration.Hasher = new LegacyHasher();
            // Configuration.IgnoreHashVersion = true;

            // Settings
            var loginProviderStr = "google";
            var usernameStr      = Environment.GetEnvironmentVariable("UNITE_USERNAME") ?? ""; // Your UNITE username
            var passwordStr      = Environment.GetEnvironmentVariable("UNITE_PASSWORD") ?? ""; // Your UNITE password

            // Login
            ILoginProvider loginProvider;

            switch (loginProviderStr)
            {
            case "google":
                loginProvider = new GoogleLoginProvider(usernameStr, passwordStr);
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\".");
            }

            var locRandom = new Random();
            var latitude  = 51.507352 + locRandom.NextDouble(-0.000030, 0.000030); // Somewhere in London
            var longitude = -0.127758 + locRandom.NextDouble(-0.000030, 0.000030);
            var session   = await GetSession(loginProvider, latitude, longitude, true);

            session.Logger.RegisterLogOutput((level, message) =>
            {
                switch (level)
                {
                case LogLevel.Debug:
                    Logger.Debug(message);
                    break;

                case LogLevel.Info:
                    Logger.Info(message);
                    break;

                case LogLevel.Notice:
                case LogLevel.Warn:
                    Logger.Warn(message);
                    break;

                case LogLevel.Error:
                    Logger.Error(message);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(level), level, null);
                }
            });

            SaveAccessToken(session.AccessToken);

            // Send initial requests and start HeartbeatDispatcher.
            // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
            if (!await session.StartupAsync())
            {
                throw new Exception("Session couldn't start up.");
            }

            // Handle quit commands.
            HandleCommands();
        }
Example #15
0
        private static async Task Run()
        {
            if (cooldown > POGOLib.Official.Util.TimeUtil.GetCurrentTimestampInMilliseconds())
            {
                Console.WriteLine("======> cool down");
                return;
            }

            var pokeHashAuthKey = config.hashkey;

            Configuration.Hasher = new PokeHashHasher(pokeHashAuthKey);
            // Configuration.IgnoreHashVersion = true;

            // Settings
            var loginProviderStr = config.auth_service;
            var usernameStr      = config.username;
            var passwordStr      = config.password;

            // Login
            ILoginProvider loginProvider;

            switch (loginProviderStr)
            {
            case "google":
                loginProvider = new GoogleLoginProvider(usernameStr, passwordStr);
                break;

            case "ptc":
                loginProvider = new PtcLoginProvider(usernameStr, passwordStr);
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
            }

            var         locRandom = new Random();
            var         latitude  = pokemon.Latitude;
            var         longitude = pokemon.Longtitude;
            CultureInfo culture   = (CultureInfo)CultureInfo.CurrentCulture.Clone();

            culture.NumberFormat.NumberDecimalSeparator = ".";
            double start_latitude   = Convert.ToDouble(Regex.Split(config.startlocation, ",")[0], culture);
            double start_longtitude = Convert.ToDouble(Regex.Split(config.startlocation, ",")[1], culture);

            if (session == null)
            {
                //Console.WriteLine("==>Creating session/logging in. ");
                session = await GetSession(loginProvider, start_latitude, start_longtitude, true);

                SaveAccessToken(session.AccessToken);
                session.AccessTokenUpdated += SessionOnAccessTokenUpdated;
                //session.Player.Inventory.Update += InventoryOnUpdate;
                session.Map.Update += MapOnUpdate;
                Console.WriteLine("connecting to PokemonGo servers through hashing servers");
                // Send initial requests and start HeartbeatDispatcher.
                // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
                if (!await session.StartupAsync())
                {
                    throw new Exception("Session couldn't start up.");
                }
            }
            //Console.WriteLine("==>Teleporting to pokemon");
            session.Player.SetCoordinates(latitude, longitude);
            System.Threading.Thread.Sleep(3000);
            //var closestFort = session.Map.GetFortsSortedByDistance().FirstOrDefault();
            int i = 1;
            //do {
            //Console.Write(String.Format("\rPokemon {0} attemp {1} of {2}",pokemon.PokemonName, i.ToString(),config.tryforseconds.ToString()));
            await session.RpcClient.RefreshMapObjectsAsync();

            // Retrieve the closest fort to your current player coordinates.
            var closestFort = session.Map.GetFortsSortedByDistance().FirstOrDefault();

            if (closestFort != null)
            {
                //Console.Write(String.Format("\rPokemon {0} attemp {1} of {2}",pokemon.PokemonName, i.ToString(),config.tryforseconds.ToString()));
                cooldown = closestFort.CooldownCompleteTimestampMs;
                IEnumerable <POGOProtos.Map.Pokemon.MapPokemon> catchable = session.Map.Cells.SelectMany(c => c.CatchablePokemons);
                SearchForPokemon(catchable).GetAwaiter().GetResult();
                if (pokemon.EncounterId == 0)
                {
                    //int i=1;
                    do
                    {
                        //System.Threading.Thread.Sleep(5000);
                        Console.Write(String.Format("\rPokemon {0} attemp {1} of {2}", pokemon.PokemonName, i.ToString(), config.tryforseconds.ToString()));
                        await session.RpcClient.RefreshMapObjectsAsync();

                        catchable = session.Map.Cells.SelectMany(c => c.CatchablePokemons);
                        SearchForPokemon(catchable).GetAwaiter().GetResult();
                        i++;
                    } while    (i <= config.tryforseconds & (pokemon.EncounterId == 0));
                    //} while    (pokemon.EncounterId==0 );
                }
                //i++;
                //} while  (i<=config.tryforseconds & (pokemon.EncounterId==0) );
            }
            else
            // if (closestFort == null)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine();
                Console.WriteLine("======> No Fort data found. Captcha soft/ip/hard ban? Check account, take a rest , etc. ");
                Console.ForegroundColor = ConsoleColor.White;
                //session.Player.SetCoordinates (start_latitude,start_longtitude);
                //session.Shutdown();
                //session.Dispose();
                //session = null;
            }
            //Console.WriteLine("Teleporting back to startup");
            session.Player.SetCoordinates(start_latitude, start_longtitude);
            System.Threading.Thread.Sleep(500);
            //session.Shutdown();
            //session.Dispose();

            // Handle quit commands.
            //HandleCommands();
        }
Example #16
0
        private static void Run(IEnumerable <Account> accounts)
        {
            foreach (var account in accounts)
            {
                Task.Run(async() =>
                {
                    try
                    {
                        // Login
                        ILoginProvider loginProvider;

                        switch (account.LoginProvider)
                        {
                        case "google":
                            loginProvider = new GoogleLoginProvider(account.Username, account.Password);
                            break;

                        case "ptc":
                            loginProvider = new PtcLoginProvider(account.Username, account.Password);
                            break;

                        default:
                            throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
                        }

                        var locRandom = new Random();
                        var latitude  = 51.507352 + locRandom.NextDouble(-0.000030, 0.000030); // Somewhere in London
                        var longitude = -0.127758 + locRandom.NextDouble(-0.000030, 0.000030);
                        var session   = await GetSession(loginProvider, latitude, longitude, true);

                        SaveAccessToken(session.AccessToken);

                        session.AccessTokenUpdated += SessionOnAccessTokenUpdated;
                        session.InventoryUpdate    += InventoryOnUpdate;
                        session.MapUpdate          += MapOnUpdate;

                        // Send initial requests and start HeartbeatDispatcher.
                        // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
                        if (!await session.StartupAsync())
                        {
                            throw new Exception("Session couldn't start up.");
                        }

                        // Retrieve the closest fort to your current player coordinates.
                        var closestFort = session.Map.GetFortsSortedByDistance().FirstOrDefault();
                        if (closestFort != null)
                        {
                            for (var i = 0; i < 50; i++)
                            {
                                Task.Run(async() =>
                                {
                                    var request = new Request
                                    {
                                        RequestType    = RequestType.FortDetails,
                                        RequestMessage = new FortDetailsMessage
                                        {
                                            FortId    = closestFort.Id,
                                            Latitude  = closestFort.Latitude,
                                            Longitude = closestFort.Longitude
                                        }.ToByteString()
                                    };

                                    await session.RpcClient.GetRequestEnvelopeAsync(new[] { request }, true);
                                });
                            }
                        }
                        else
                        {
                            Logger.Info("No fort found nearby.");
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Error($"Username '{account.Username}' had exception: {e.Message}");
                    }
                }, CancellationTokenSource.Token);
            }
        }
Example #17
0
        public async Task <MethodResult <bool> > DoLogin(Manager manager)
        {
            SetSettings(manager);
            // TODO: see how do this only once better.
            if (!(Configuration.Hasher is PokeHashHasher))
            {
                // By default Configuration.Hasher is LegacyHasher type  (see Configuration.cs in the pogolib source code)
                // -> So this comparation only will run once.
                if (ClientManager.UserSettings.UseOnlyOneKey)
                {
                    Configuration.Hasher       = new PokeHashHasher(ClientManager.UserSettings.AuthAPIKey);
                    Configuration.HasherUrl    = ClientManager.UserSettings.HashHost;
                    Configuration.HashEndpoint = ClientManager.UserSettings.HashEndpoint;
                }
                else
                {
                    Configuration.Hasher = new PokeHashHasher(ClientManager.UserSettings.HashKeys.ToArray());
                }

                // TODO: make this configurable. To avoid bans (may be with a checkbox in hash keys tab).
                //Configuration.IgnoreHashVersion = true;
                VersionStr = Configuration.Hasher.PokemonVersion;
                AppVersion = Configuration.Hasher.AppVersion;
                // TODO: Revise sleeping
                // Used on Windows phone background app
                //((PokeHashHasher)Configuration.Hasher).PokehashSleeping += OnPokehashSleeping;
            }
            // *****

            ILoginProvider loginProvider;

            switch (ClientManager.UserSettings.AuthType)
            {
            case AuthType.Google:
                loginProvider = new GoogleLoginProvider(ClientManager.UserSettings.Username, ClientManager.UserSettings.Password);
                break;

            case AuthType.Ptc:
                loginProvider = new PtcLoginProvider(ClientManager.UserSettings.Username, ClientManager.UserSettings.Password, Proxy.AsWebProxy());
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
            }

            ClientSession = await GetSession(loginProvider, ClientManager.UserSettings.Location.Latitude, ClientManager.UserSettings.Location.Longitude, true);

            // Send initial requests and start HeartbeatDispatcher.
            // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
            var msgStr = "Session couldn't start up.";

            LoggedIn = false;
            try
            {
                ClientSession.AssetDigestUpdated         += OnAssetDisgestReceived;
                ClientSession.ItemTemplatesUpdated       += OnItemTemplatesReceived;
                ClientSession.UrlsUpdated                += OnDownloadUrlsReceived;
                ClientSession.RemoteConfigVersionUpdated += OnLocalConfigVersionReceived;
                ClientSession.AccessTokenUpdated         += SessionAccessTokenUpdated;
                ClientSession.CaptchaReceived            += SessionOnCaptchaReceived;
                ClientSession.InventoryUpdate            += SessionInventoryUpdate;
                ClientSession.MapUpdate += SessionMapUpdate;
                ClientSession.CheckAwardedBadgesReceived += OnCheckAwardedBadgesReceived;
                ClientSession.HatchedEggsReceived        += OnHatchedEggsReceived;
                ClientSession.Logger.RegisterLogOutput(LoggerFucntion);

                if (await ClientSession.StartupAsync(ClientManager.UserSettings.DownloadResources))
                {
                    LoggedIn = true;
                    msgStr   = "Successfully logged into server.";

                    ClientManager.LogCaller(new LoggerEventArgs("Succefully added all events to the client.", LoggerTypes.Debug));

                    if (ClientSession.Player.Warn)
                    {
                        ClientManager.AccountState = AccountState.Flagged;
                        ClientManager.LogCaller(new LoggerEventArgs("The account is flagged.", LoggerTypes.Warning));

                        if (ClientManager.UserSettings.StopAtMinAccountState == AccountState.Flagged)
                        {
                            //Remove proxy
                            ClientManager.RemoveProxy();
                            ClientManager.Stop();

                            msgStr = "The account is flagged.";
                        }
                    }


                    //Closes bot on captcha received need utils for solve
                    if (ClientManager.AccountState == AccountState.CaptchaReceived)
                    {
                        ClientManager.LogCaller(new LoggerEventArgs("Captcha ceceived.", LoggerTypes.Warning));

                        //Remove proxy
                        ClientManager.RemoveProxy();

                        ClientManager.Stop();

                        msgStr = "Captcha ceceived.";
                    }

                    SaveAccessToken(ClientSession.AccessToken);
                }
                else
                {
                    if (ClientSession.Player.Banned)
                    {
                        ClientManager.AccountState = AccountState.PermanentBan;
                        ClientManager.LogCaller(new LoggerEventArgs("The account is banned.", LoggerTypes.FatalError));

                        //Remove proxy
                        ClientManager.RemoveProxy();

                        ClientManager.Stop();

                        msgStr = "The account is banned.";
                    }
                    if (ClientSession.State == SessionState.TemporalBanned)
                    {
                        ClientManager.AccountState = AccountState.TemporalBan;
                        ClientManager.LogCaller(new LoggerEventArgs("The account is temporal banned.", LoggerTypes.FatalError));

                        //Remove proxy
                        ClientManager.RemoveProxy();

                        ClientManager.Stop();

                        msgStr = "The account is temporal banned.";
                    }
                }
            }
            catch (PtcOfflineException)
            {
                ClientManager.Stop();

                ClientManager.LogCaller(new LoggerEventArgs("Ptc server offline. Please try again later.", LoggerTypes.Warning));

                msgStr = "Ptc server offline.";
            }
            catch (AccountNotVerifiedException)
            {
                ClientManager.Stop();
                ClientManager.RemoveProxy();

                ClientManager.LogCaller(new LoggerEventArgs("Account not verified. Stopping ...", LoggerTypes.Warning));

                ClientManager.AccountState = Enums.AccountState.NotVerified;

                msgStr = "Account not verified.";
            }
            catch (WebException ex)
            {
                ClientManager.Stop();

                if (ex.Status == WebExceptionStatus.Timeout)
                {
                    if (String.IsNullOrEmpty(ClientManager.Proxy))
                    {
                        ClientManager.LogCaller(new LoggerEventArgs("Login request has timed out.", LoggerTypes.Warning));
                    }
                    else
                    {
                        ClientManager._proxyIssue = true;
                        ClientManager.LogCaller(new LoggerEventArgs("Login request has timed out. Possible bad proxy.", LoggerTypes.ProxyIssue));
                    }

                    msgStr = "Request has timed out.";
                }

                if (!String.IsNullOrEmpty(ClientManager.Proxy))
                {
                    if (ex.Status == WebExceptionStatus.ConnectionClosed)
                    {
                        ClientManager._proxyIssue = true;
                        ClientManager.LogCaller(new LoggerEventArgs("Potential http proxy detected. Only https proxies will work.", LoggerTypes.ProxyIssue));

                        msgStr = "Http proxy detected";
                    }
                    else if (ex.Status == WebExceptionStatus.ConnectFailure || ex.Status == WebExceptionStatus.ProtocolError || ex.Status == WebExceptionStatus.ReceiveFailure ||
                             ex.Status == WebExceptionStatus.ServerProtocolViolation)
                    {
                        ClientManager._proxyIssue = true;
                        ClientManager.LogCaller(new LoggerEventArgs("Proxy is offline", LoggerTypes.ProxyIssue));

                        msgStr = "Proxy is offline";
                    }
                }

                ClientManager._proxyIssue |= !String.IsNullOrEmpty(ClientManager.Proxy);

                ClientManager.LogCaller(new LoggerEventArgs("Failed to login due to request error", LoggerTypes.Exception, ex.InnerException));

                msgStr = "Failed to login due to request error";
            }
            catch (TaskCanceledException)
            {
                ClientManager.Stop();

                if (String.IsNullOrEmpty(ClientManager.Proxy))
                {
                    ClientManager.LogCaller(new LoggerEventArgs("Login request has timed out", LoggerTypes.Warning));
                }
                else
                {
                    ClientManager._proxyIssue = true;
                    ClientManager.LogCaller(new LoggerEventArgs("Login request has timed out. Possible bad proxy", LoggerTypes.ProxyIssue));
                }

                msgStr = "Login request has timed out";
            }
            catch (InvalidCredentialsException ex)
            {
                //Puts stopping log before other log.
                ClientManager.Stop();
                ClientManager.RemoveProxy();

                ClientManager.LogCaller(new LoggerEventArgs("Invalid credentials or account lockout. Stopping bot...", LoggerTypes.Warning, ex));

                msgStr = "Username or password incorrect";
            }
            catch (IPBannedException)
            {
                if (ClientManager.UserSettings.StopOnIPBan)
                {
                    ClientManager.Stop();
                }

                string message = String.Empty;

                if (!String.IsNullOrEmpty(ClientManager.Proxy))
                {
                    if (ClientManager.CurrentProxy != null)
                    {
                        ClientManager.ProxyHandler.MarkProxy(ClientManager.CurrentProxy, true);
                    }

                    message = "Proxy IP is banned.";
                }
                else
                {
                    message = "IP address is banned.";
                }

                ClientManager._proxyIssue = true;

                ClientManager.LogCaller(new LoggerEventArgs(message, LoggerTypes.ProxyIssue));

                msgStr = message;
            }
            catch (GoogleLoginException ex)
            {
                ClientManager.Stop();
                ClientManager.RemoveProxy();

                ClientManager.LogCaller(new LoggerEventArgs(ex.Message, LoggerTypes.Warning));

                msgStr = "Failed to login";
            }
            catch (PokeHashException phe)
            {
                ClientManager.AccountState = AccountState.HashIssues;

                msgStr = "Hash issues";
                ClientManager.LogCaller(new LoggerEventArgs(phe.Message, LoggerTypes.FatalError, phe));
            }
            catch (Exception ex)
            {
                ClientManager.Stop();
                //RemoveProxy();

                ClientManager.LogCaller(new LoggerEventArgs("Failed to login", LoggerTypes.Exception, ex));

                msgStr = "Failed to login";
            }

            return(new MethodResult <bool>()
            {
                Success = LoggedIn,
                Message = msgStr
            });
        }
Example #18
0
        private static UserInfo GetUserInfo(Token token, out bool isNew)
        {
            isNew = false;
            if (token == null)
            {
                Global.Logger.Error("GoogleDriveApp: token is null");
                throw new SecurityException("Access token is null");
            }

            LoginProfile loginProfile = null;

            try
            {
                loginProfile = new GoogleLoginProvider().GetLoginProfile(token.ToString());
            }
            catch (Exception ex)
            {
                Global.Logger.Error("GoogleDriveApp: userinfo request", ex);
            }

            if (loginProfile == null)
            {
                Global.Logger.Error("Error in userinfo request");
                return(null);
            }

            var userInfo = CoreContext.UserManager.GetUserByEmail(loginProfile.EMail);

            if (Equals(userInfo, Constants.LostUser))
            {
                userInfo = LoginWithThirdParty.ProfileToUserInfo(loginProfile);

                var cultureName = loginProfile.Locale;
                if (string.IsNullOrEmpty(cultureName))
                {
                    cultureName = Thread.CurrentThread.CurrentUICulture.Name;
                }

                var cultureInfo = SetupInfo.EnabledCultures.Find(c => String.Equals(c.Name, cultureName, StringComparison.InvariantCultureIgnoreCase));
                if (cultureInfo != null)
                {
                    userInfo.CultureName = cultureInfo.Name;
                }
                else
                {
                    Global.Logger.DebugFormat("From google app new personal user '{0}' without culture {1}", userInfo.Email, cultureName);
                }

                try
                {
                    SecurityContext.AuthenticateMe(ASC.Core.Configuration.Constants.CoreSystem);
                    userInfo = UserManagerWrapper.AddUser(userInfo, UserManagerWrapper.GeneratePassword());
                }
                finally
                {
                    SecurityContext.Logout();
                }

                isNew = true;

                Global.Logger.Debug("GoogleDriveApp: new user " + userInfo.ID);
            }

            return(userInfo);
        }
Example #19
0
        private static async Task Run(string[] args)
        {
            // Configure Logger
            LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(Directory.GetCurrentDirectory(), "nlog.config"));

            Logging.Logger.RegisterLogOutput((level, message) =>
            {
                switch (level)
                {
                case LogLevel.Debug:
                    Logger.Debug(message);
                    break;

                case LogLevel.Info:
                    Logger.Info(message);
                    break;

                case LogLevel.Notice:
                case LogLevel.Warn:
                    Logger.Warn(message);
                    break;

                case LogLevel.Error:
                    Logger.Error(message);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(level), level, null);
                }
            });

            // Initiate console
            Logger.Info("Booting up.");
            Logger.Info("Type 'q', 'quit' or 'exit' to exit.");
            Console.Title = "POGO Demo";

            // Configure hasher - DO THIS BEFORE ANYTHING ELSE!!
            //
            //  If you want to use the latest POGO version, you have
            //  to use the PokeHashHasher. For more information:
            //  https://talk.pogodev.org/d/51-api-hashing-service-by-pokefarmer
            //
            //  You may also not use the PokeHashHasher, it will then use
            //  the built-in hasher which was made for POGO 0.45.0.
            //  Don't forget to use "Configuration.IgnoreHashVersion = true;" too.
            //
            //  Expect some captchas in that case..

            var pokeHashAuthKey = Environment.GetEnvironmentVariable("POKEHASH_AUTHKEY") ?? "";

            Configuration.Hasher = new PokeHashHasher(pokeHashAuthKey);
            // Configuration.IgnoreHashVersion = true;

            // Settings
            var loginProviderStr = "ptc";
            var usernameStr      = Environment.GetEnvironmentVariable("PTC_USERNAME") ?? ""; // Your PTC username
            var passwordStr      = Environment.GetEnvironmentVariable("PTC_PASSWORD") ?? ""; // Your PTC password

            // Login
            ILoginProvider loginProvider;

            switch (loginProviderStr)
            {
            case "google":
                loginProvider = new GoogleLoginProvider(usernameStr, passwordStr);
                break;

            case "ptc":
                loginProvider = new PtcLoginProvider(usernameStr, passwordStr);
                break;

            default:
                throw new ArgumentException("Login provider must be either \"google\" or \"ptc\".");
            }

            var locRandom = new Random();
            var latitude  = 51.507352 + locRandom.NextDouble(-0.000030, 0.000030); // Somewhere in London
            var longitude = -0.127758 + locRandom.NextDouble(-0.000030, 0.000030);
            var session   = await GetSession(loginProvider, latitude, longitude, true);

            SaveAccessToken(session.AccessToken);

            session.AccessTokenUpdated += SessionOnAccessTokenUpdated;
            session.InventoryUpdate    += InventoryOnUpdate;
            session.MapUpdate          += MapOnUpdate;
            session.CaptchaReceived    += SessionOnCaptchaReceived;

            // Send initial requests and start HeartbeatDispatcher.
            // This makes sure that the initial heartbeat request finishes and the "session.Map.Cells" contains stuff.
            if (!await session.StartupAsync())
            {
                throw new Exception("Session couldn't start up.");
            }

            // Retrieve the closest fort to your current player coordinates.
            var closestFort = session.Map.GetFortsSortedByDistance().FirstOrDefault();

            if (closestFort != null)
            {
                var fortDetailsBytes = await session.RpcClient.SendRemoteProcedureCallAsync(new Request
                {
                    RequestType    = RequestType.FortDetails,
                    RequestMessage = new FortDetailsMessage
                    {
                        FortId    = closestFort.Id,
                        Latitude  = closestFort.Latitude,
                        Longitude = closestFort.Longitude
                    }.ToByteString()
                });

                if (fortDetailsBytes != null)
                {
                    var fortDetailsResponse = FortDetailsResponse.Parser.ParseFrom(fortDetailsBytes);

                    Console.WriteLine(JsonConvert.SerializeObject(fortDetailsResponse, Formatting.Indented));
                }
                else
                {
                    Console.WriteLine("Couldn't print fort info, we probably had a captcha.");
                }
            }
            else
            {
                Logger.Info("No fort found nearby.");
            }

            // Handle quit commands.
            HandleCommands();
        }