Commit Graph

36 Commits

Author SHA1 Message Date
Lorenzo Blasa
17cfa0e571 Session Id moved to server config
Summary:
Session Id should be shared between client and server, but it was defined deep in the client (redux store).

The proposed solution presented below is to move the session id to the server configuration. By doing this, it becomes available to both server and client VERY early in the application life-cycle for both Electron and non-Electron builds.

Reviewed By: LukeDefeo

Differential Revision: D48520367

fbshipit-source-id: ca959b27ab18b1a2e4cd2fac1d28545664f1b514
2023-08-22 05:16:20 -07:00
Lorenzo Blasa
3f37d29b95 Reintroduce timeout and is production check
Summary:
For dev, let's not kill the server.
Also, reintroduce a timeout of 60 seconds before disconnecting.

Reviewed By: antonk52

Differential Revision: D48432317

fbshipit-source-id: bac6f67101e5be481af06a5ea6ccb3b3134c4075
2023-08-17 13:46:08 -07:00
Lorenzo Blasa
b5ed57b7d0 Remove UDS and thus the need for a proxy server
Summary: This change removes the UDS support and thus the need for having a proxy server.

Reviewed By: antonk52

Differential Revision: D48265244

fbshipit-source-id: c76bb4afba63959ddd17901b3887aa278b000beb
2023-08-11 08:19:51 -07:00
Lorenzo Blasa
7f3f1c0507 TCP is the only option so remove unused branches
Summary: As TCP is the only option, remove all branches.

Reviewed By: passy

Differential Revision: D48265093

fbshipit-source-id: 174527f05d8a841797fd95256e77fdeb9b2e6ad5
2023-08-11 08:19:51 -07:00
Lorenzo Blasa
bdc2d5f6eb If there are no connected clients, shutdown immediately
Summary: Instead of delaying the shutdown by a set timer, immediately shutdown.

Reviewed By: antonk52

Differential Revision: D48264571

fbshipit-source-id: 5e6556f2ecafb7cf9a19b3075e72f2be1abf9f95
2023-08-11 08:19:51 -07:00
Andrey Goncharov
3b99e386a2 Fix comment
Reviewed By: LukeDefeo

Differential Revision: D48191671

fbshipit-source-id: 6978e831f48ffe4e8a8c6e71b819205cb3868966
2023-08-09 14:15:33 -07:00
Luke De Feo
eaf5b4c246 Dont kill flipper server when no clients connect and is dev
Summary: This is quite annoying and causes may un needed reboots of flipper server while developing

Reviewed By: antonk52

Differential Revision: D47949842

fbshipit-source-id: c2f18e16a4933e4209e74f51978cb7d05b80ee11
2023-08-01 10:32:29 -07:00
Sanjaiyan Parthipan
7cef8286f9 Concurrent Function Upgrade for Enhanced Performance (#4918)
Summary:
Republishing sanjaiyan-dev's PR https://github.com/facebook/flipper/pull/4889 running `git rebase` because of a conflict.

Pull Request resolved: https://github.com/facebook/flipper/pull/4918

Reviewed By: lblasa

Differential Revision: D47294545

Pulled By: passy

fbshipit-source-id: 74904ec6179ed5a3bab6f9b701c3cd769ecad3bf
2023-07-17 04:43:14 -07:00
Lorenzo Blasa
f404827c69 Exit if proxy fails
Summary:
If the proxy fails, exit.

The proxy server is the one listening on the supplied TCP port, used by PWA.

If it has failed, then quit the process.

Reviewed By: aigoncharov

Differential Revision: D47433631

fbshipit-source-id: 55750db5bf3e00876074a6b403747ec07718878c
2023-07-13 03:59:58 -07:00
Lorenzo Blasa
fc38355eee Centralise logging
Summary:
Centralise connectivity logging into a single place. By having all logs go through a single interface, then it becomes trivial to manipulate them as needed.

In this change, this is not done.

In subsequent diffs, logs will be dispatched via an event and will be visualised in the Connectivity Hub.

Reviewed By: passy

Differential Revision: D47185054

fbshipit-source-id: fb5eab98895be0c8f61fb9a77d3e66d6a8dbcb27
2023-07-10 04:14:14 -07:00
Lorenzo Blasa
f63e5d440a Move certificate exchange bits to app-connectivity
Summary: Bit of reorganising as utils is a bit too generic and crowded.

Reviewed By: passy

Differential Revision: D47186536

fbshipit-source-id: 7b1dd26db95aef00778ff4f23d91f7371c4d07ad
2023-07-04 02:19:58 -07:00
Lorenzo Blasa
62cb33b763 comms: app-connectivity
Summary: It doesn't get more generic than 'comms'. So, narrow it down: app-connectivity.

Reviewed By: passy

Differential Revision: D47185255

fbshipit-source-id: 87e9c2487c9b07603d14e856de670757078c0da1
2023-07-03 09:40:26 -07:00
Lorenzo Blasa
8f70cf14a4 Kill server after 30 seconds
Summary: Bring timeout from 15min to 30seconds.

Reviewed By: passy

Differential Revision: D46726959

fbshipit-source-id: cae1fdd4668fc5237ad0f187385f3a63a51c4797
2023-06-14 09:59:21 -07:00
Lorenzo Blasa
146a5cf666 Move server started analytics
Summary: This is a better place as it takes place once the server starts listening.

Reviewed By: passy

Differential Revision: D46558350

fbshipit-source-id: f586defecc8e16d8f0b285615803662d8b6b75fb
2023-06-08 11:03:44 -07:00
Lorenzo Blasa
85f5c6f893 Close server if no clients are connected
Summary: If after 15min there are no connected clients, close flipper server.

Reviewed By: antonk52

Differential Revision: D46519563

fbshipit-source-id: c3396ed8987be8ca7075c644734793e4ebceba18
2023-06-07 10:46:15 -07:00
Lorenzo Blasa
80c201b10f Add localhost as a valid host
Summary: ^

Reviewed By: passy

Differential Revision: D46393661

fbshipit-source-id: eeaa0971a747d6435a10c3eb27969bb452cd73a7
2023-06-02 09:35:32 -07:00
Lorenzo Blasa
e7806d5be7 Track server start
Summary:
Need to answer:

- How many starts a day over time

Reviewed By: antonk52

Differential Revision: D46219995

fbshipit-source-id: bffaeadf684a2d34c6e145784c5a86dbaf5f532a
2023-05-26 08:02:12 -07:00
Lorenzo Blasa
29510f66c8 Track proxy errors
Summary:
Need to answer:
- Proxy errors rate over time

Reviewed By: antonk52

Differential Revision: D46219927

fbshipit-source-id: 1ad8cc60303ed3aa34828b9ff87009ff7754a146
2023-05-26 08:02:12 -07:00
Lorenzo Blasa
6936cb34ac Track socket already in use
Summary:
Some times the socket can already be in use by an existing process. Track it as to quantify how likely this is found in production. May remove later.

Need to answer:
- Socket already in use rate over time

Reviewed By: antonk52

Differential Revision: D46219768

fbshipit-source-id: 27da82cddb707f729a1d43079e84c221bb544a82
2023-05-26 08:02:12 -07:00
Lorenzo Blasa
694f6f284e Define a tracker interface and replace auth token tracking
Summary:
Define the tracker interface and replace the existing authentication token verification tracking.

Subsequent diffs will add analytics for remaining connectivity areas.

Need to answer:
- No tokens rate over time
- Unable to verify tokens rate over time

Reviewed By: antonk52

Differential Revision: D46219661

fbshipit-source-id: dfc41cae664bc1ef211d312990120111fca3808b
2023-05-26 08:02:12 -07:00
Lorenzo Blasa
4704c177ec Check if server is already listening
Summary:
Right now, this simply avoids trying to create a server instance if one appears to be already running.

In a future change, we may decide to kill the existing instance and replace it with a new one.

But, in this case, running this as is will be useful as it will provide the connection URL with the auth token.

Also remove flipper server dependency from finding installation. In this case, we don't need it and can use `os.getPlatform()` instead.

Reviewed By: antonk52

Differential Revision: D46144843

fbshipit-source-id: 2922843b916d37e0126e43ae65a622f87a6920ec
2023-05-24 06:50:05 -07:00
Andrey Goncharov
d078a89e83 Skip token verification if a special env variable is passed
Summary: Recently , we started verifying a special token for every websocket connection. It made e2e tests fail. We are going to use this bypass flag in jest e2e envs.

Reviewed By: lblasa

Differential Revision: D46025343

fbshipit-source-id: c2e6e0b561286fb8b571565243a45cdfb56a54a9
2023-05-19 10:19:10 -07:00
Lorenzo Blasa
7386608a53 Track token validation
Summary: ^

Reviewed By: antonk52

Differential Revision: D45864358

fbshipit-source-id: c043555c5dd3050503115a22982162ec16aba40f
2023-05-16 04:32:47 -07:00
Lorenzo Blasa
a96caacb2b EnvironmentInfo as argument to start server
Summary:
Clean initialisation by passing down the environment info to start server.

(Also rename dir to path as that's the name used in other places)

Reviewed By: passy

Differential Revision: D45731751

fbshipit-source-id: a60fdd49c567fc312d1f8da72db3a46a0828c140
2023-05-11 04:10:16 -07:00
Lorenzo Blasa
b94f6b6152 Set the right environment info for headless builds
Summary: The isHeadlessBuild flag was not properly set.

Reviewed By: antonk52

Differential Revision: D45728435

fbshipit-source-id: 3616c4358114d4f3d96372766dabf48b27b44333
2023-05-10 04:35:17 -07:00
Lorenzo Blasa
238f40f55d Mandate auth token to connect over TCP
Summary:
Until now, launching flipper-server with TCP would accept any incoming connection as long as it comes from the same origin (localhost) using web socket host origin verification.

This is not entirely secure as origin can be spoofed with tools like curl.

Our team created a security review and a proposal was written:
https://docs.google.com/document/d/16iXypCQibPiner061SoaQUFUY9tLVAEpkKfV_hUXI7c/

Effectively, Flipper can generate a token which is then used by the client to authenticate.

This diff contains the changes required to generate, obtain, and validate authentication tokens from clients connecting to flipper over TCP connections.

The token itself is a JWT token. JWT was chosen because it is a simple industry standard which offers three features which can immediately benefit us:

- Expiration handling. No need for Flipper to store this information anywhere.
- Payload. Payload can be used to push any data we deem relevant i.e. unix username.
- Signing. Signed and verified using the same server key pair which is already in place for certificate exchange.

Additionally, the token is stored in the Flipper static folder. This ensures that the browser and PWA clients have access to it.

Reviewed By: mweststrate

Differential Revision: D45179654

fbshipit-source-id: 6761bcb24f4ba30b67d1511cde8fe875158d78af
2023-05-05 07:52:13 -07:00
Andrey Goncharov
3e88a53a3f Fix WebSocket server not starting on Windows
Summary: When Flipper starts with Flipper Server enabled, on Windows we forgot to attach the WebSocket handler. It led to a white screen on Electron or to connection timeout messages on Flipper Server.

Reviewed By: passy, lblasa

Differential Revision: D40679781

fbshipit-source-id: 1c8df8012efc54077409eb8891b1d82ddaf16689
2022-10-26 03:36:04 -07:00
Lorenzo Blasa
18854ce5fc Install plugin from marketplace if not available
Summary: For the Flipper Server Companion, if a plugin is being requested which is not yet installed, try to install it first from the marketplace.

Reviewed By: passy

Differential Revision: D37716962

fbshipit-source-id: d618fbc597f82b540dbb02e8ffc296dcee9e1eb9
2022-07-11 07:04:55 -07:00
Lorenzo Blasa
646b9d5a5d UDS/TCP options
Summary:
Provide an option to enable/disable TCP connections on flipper-server.

The only change at this stage is that Flipper Desktop will use UDS to connect to flipper-server.

Reviewed By: passy

Differential Revision: D37519656

fbshipit-source-id: 3d02084666fde532ec76134edf8cf6a231060a48
2022-06-29 15:01:05 -07:00
Lorenzo Blasa
335dec1a08 Adds some settings to check flipper-server state
Summary:
There's one setting: to enable or disable flipper-server.

However, I've added some current running state to it. If there's a better way of doing this, please do let me know.

Reviewed By: aigoncharov

Differential Revision: D37276670

fbshipit-source-id: f6c941cf0cfe55c267b9bcb9f799934fba1e28ef
2022-06-22 05:26:11 -07:00
Lorenzo Blasa
8c67b049ab Attach connection handler earlier
Summary:
This change attaches our event handlers as soon as the ws is created.

As a consequence, we need to wait until the server has created any necessary instances required to process incoming requests.

To achieve this, I created a type called `Lazy`.

This type wraps around a value and a promise to that value. Callers can check if the value is set. If not, callers can wait for it.

Ultimately, the value can be set outside of the promise itself.

Reviewed By: passy

Differential Revision: D37284939

fbshipit-source-id: 17dec548d7155a3d65440c9584cec07cbb826c37
2022-06-21 12:48:43 -07:00
Andrey Goncharov
115a4b7997 Use AbstractPluginInitializer from flipper-frontend-core in flipper-ui-core
Summary: See D37139129

Reviewed By: passy

Differential Revision: D37238571

fbshipit-source-id: 39d6bb87d6beacc793ef5acd71097fcc4e82969d
2022-06-20 12:18:40 -07:00
Lorenzo Blasa
b6bf7c6ee7 Close servers on exit
Summary: On exit, close the servers explicitly.

Reviewed By: lawrencelomax

Differential Revision: D37206986

fbshipit-source-id: 7f4313cce1db18e1fb1320993a58c440af2cc7e0
2022-06-20 03:27:19 -07:00
Lorenzo Blasa
747b91da5f Add file:// as possible origin
Summary:
For Flipper Desktop, Electron based, the origin maybe file:// as shown in tests:

```
Refused socket connection from cross domain request, origin: file://, host: localhost:52342.

Expected origins: http://localhost:52342 or http://[::1]:52342 or http://::1:52342 or http://localhost:3000.
Expected hosts: localhost:52342 or [::1]:52342 or ::1:52342 or localhost:3000
```

This change effectively adds `file://` as a valid origin.

Reviewed By: passy

Differential Revision: D37212809

fbshipit-source-id: 311a93bb8872587d15c6be4329238af6b0f6988d
2022-06-16 10:45:08 -07:00
Lorenzo Blasa
8a1e484d0c Handle ws operations in a safe manner
Summary:
After doing some tests, any error thrown during ws events can result in flipper-server shutting down.

To avoid this, effectively, errors throughout should be properly handled.

The problem is that there's no guarantees this is or will be the case.

Instead, wrap the event handlers in a safe function execution wrapper. Any errors will be caught and logged.

Reviewed By: aigoncharov

Differential Revision: D37206923

fbshipit-source-id: 6f7cadc297ac39768030962c6eaadde55048fd21
2022-06-16 10:35:17 -07:00
Lorenzo Blasa
9cc8e4076f flipper-server refactor
Summary:
This changes moves most of the functionality found in flipper-server to flipper-server-core.

flipper-server will mostly be a package that wraps around flipper-server-core. Staying in flipper-server:
- Command line args
- Orchestration to start the necessary servers

Reviewed By: aigoncharov

Differential Revision: D36807087

fbshipit-source-id: f29002c7cc5d08b8c5184fdaaa02ba22562a9f45
2022-06-07 02:42:16 -07:00