Package: ibeam
This library is currently being beta-tested. See something that's broken? Did we get something
wrong?Create an issue and let us know!IBeam is an authentication and maintenance tool used for
theInteractive Brokers Client Portal Web API Gateway.Features:Facilitates continuous headless run of the Gateway.No physical display required- virtual display buffer can be used instead.No interaction from the user required- automated injection of IBKR credentials into the authentication page used
by the Gateway.TLS certificate support- you can provide your own certificates.Containerised using Docker- it's a plug and play image, although IBeam can be used as standalone too.Not so secure- Yupp, you'll need to store the credentials somewhere, and that's a risk. Read more about it
inSecurity.NOTE: IBeam is not designed to automate logging into TWS or IB Gateway (also known as TWS Gateway). UseIBCfor that.
There are alsoDocker image projects that include TWS/Gateway and IBC.Documentation:SetupInstallation and StartupRuntime EnvironmentAdvancedInputs And OutputsIBeam ConfigurationGateway ConfigurationTLS Certificates and HTTPSTwo Factor AuthenticationMoreTroubleshootingQuick startInstallationDocker Image (Recommended):dockerpullvoyz/ibeamStandalone:pipinstallibeamStartupDockerdockerrun--envIBEAM_ACCOUNT=your_account123--envIBEAM_PASSWORD=your_password123-p5000:5000voyz/ibeamdocker-compose:Create adocker-compose.ymlfile with the following contents:version:"2.1"services:ibeam:image:voyz/ibeamcontainer_name:ibeamenv_file:-env.listports:-5000:5000-5001:5001network_mode:bridge# Required due to clientportal.gw IP whitelistrestart:'no'# Prevents IBEAM_MAX_FAILED_AUTH from being exceededCreate anenv.listfile in the same directory with the following contents:IBEAM_ACCOUNT=your_account123IBEAM_PASSWORD=your_password123Run the following command:docker-composeup-dStandalone:pythonibeam_starter.pyOnce started, verify the Gateway is running by calling:curl-XGET"https://localhost:5000/v1/api/one/user"-kRead more inInstallation and StartupandAdvanced Secrets.How does IBeam work?In a standard startup IBeam performs the following:Copy inputsfrom the Inputs Directory to Gateway'srootfolder (if provided).Ensure the Gateway is runningby calling the tickle endpoint. If not:Start the Gateway in a new shell.Ensure the Gateway has an active session that is authenticatedby calling the tickle endpoint. If not:Create a new Chrome Driver instance usingselenium.Start a virtual display usingpyvirtualdisplay.Access the Gateway's authentication website.Once loaded, input username and password and submit the form.Wait for the login confirmation and quit the website.Verify once again if Gateway is running and authenticated.Start the maintenance, attempting to keep the Gateway alive and authenticated. Will repeat login if finds no
active session or the session is not authenticated.SecurityPlease feel free to suggest improvements to the security risks currently present in IBeam and the Gateway
byopening an issueon GitHub.CredentialsThe Gateway requires credentials to be provided on a regular basis. The only way to avoid manually having to input them
every time is to store the credentials somewhere. This alone is a security risk.By default, IBeam expects the credentials to be available as environment variables during runtime. Whether running IBeam
in a container or directly on a host machine, an unwanted user may gain access to these credentials. If your setup is
exposed to a risk of someone unauthorised reading the credentials, you may want to look for other solutions than IBeam
or use the Gateway standalone and authenticate manually each time.There are currently two proposed solutions to this problem:Docker SwarmYou can remove one of the attack vectors by using a locked Docker Swarm instance, installing your credentials into it using Docker Secrets, and telling IBeam to read the secrets from the container's in-memory/runfilesystem.
This configuration allows the credentials to be encrypted when at rest.
But the credentials are still accessible in plaintext via the running container, so if a security issue arises where an exploit exists for the port 5000 API, or if your host is compromised and an attacker can access your running container, then the secret could be exposed.GCP Secret ManagerIf you're deploying IBeam on Google Cloud Platform, you can securely use the Service Account's credentials to accessGCP Secret Manager. This is possible since all types of GCP deployment (currently: Compute Engine, Kubernetes, Cloud Run and Cloud Functions) are running within a context that has a Service Account available. IBeam can query Google's metadata server when running on GCP for the Service Account's access token, and use that to read secrets from the Secret Manager.SeeAdvanced Secretsfor more information.RoadmapIBeam was built by traders just like you. We made it open source in order to collectively build a reliable solution. If
you enjoy using IBeam, we encourage you to attempt implementing one of the following tasks:Include TLS certificates.Two Factor Authentictaion.Remove necessity to install Java.Remove necessity to install Chrome or find a lighter replacement.Add usage examples.Full test coverage.Improve the security issues.Find a lighter replacement to using ChromiumRead theCONTRIBUTINGguideline to get started.LicenceSeeLICENSEDisclaimerIBeam is not built, maintained, or endorsed by the Interactive Brokers.Use at own discretion. IBeam and its authors give no guarantee of uninterrupted run of and access to the Interactive
Brokers Client Portal Web API Gateway. You should prepare for breaks in connectivity to IBKR servers and should not
depend on continuous uninterrupted run of the Gateway. IBeam requires your private credentials to be exposed to a
security risk, potentially resulting in, although not limited to interruptions, loss of capital and loss of access to
your account. To partially reduce the potential risk use Paper Account credentials.IBeam is provided on an AS IS and AS AVAILABLE basis without any representation or endorsement made and without warranty
of any kind whether express or implied, including but not limited to the implied warranties of satisfactory quality,
fitness for a particular purpose, non-infringement, compatibility, security and accuracy. To the extent permitted by
law, IBeam's authors will not be liable for any indirect or consequential loss or damage whatever (including without
limitation loss of business, opportunity, data, profits) arising out of or in connection with the use of IBeam. IBeam's
authors make no warranty that the functionality of IBeam will be uninterrupted or error free, that defects will be
corrected or that IBeam or the server that makes it available are free of viruses or anything else which may be harmful
or destructive.Built by VoyHi! Thanks for checking out and using this library. If you are interested in discussing your project, require
mentorship, consider hiring me, or just wanna chat - I'm happy to talk.You can send me an email to get in touch:hello@voyzan.comOr if you'd just want to give something back, I've got a Buy Me A Coffee account:Thanks and have an awesome day ðŸ‘‹