diff --git a/assets/web/apps.html b/assets/web/apps.html index 6a5056d8..038ad3a8 100644 --- a/assets/web/apps.html +++ b/assets/web/apps.html @@ -1,95 +1,110 @@ -
-
+
+

Applications

-
Applications are refreshed only when Client is restarted
+

Create, edit and delete applications from this page. Changes are applied immediately, but you may need to restart Moonlight to see the changes.

-
+
- - + + - - +
NameActionsApplicationQuick actions
{{app.name}} - + {{app.name}} +
+ + +
+

+ +

-
-
- -
- - -
Application Name, as shown on Moonlight
-
- -
- - -
The file where the output of the command is stored, if it is not - specified, the output is ignored
-
- -
- -
A list of commands to be run before/after the application.
If any of the - prep-commands fail, starting the application is aborted
- - - - - - - - - - - - - -
DoUndo
- -
- -
- -
-
{{c}}
- -
-
- - -
-
A list of commands to be run and forgotten about
-
- -
- - -
The main application, if it is not specified, a processs is started that - sleeps indefinitely
-
- -
- - -
+
+ +
+ + +
Application Name, as shown on Moonlight
+
+ +
+ + +
The file where the output of the command is stored, if it is not + specified, the output is ignored
+
+ +
+ +
A list of commands to be run before/after the application.
If any of the + prep-commands fail, starting the application is aborted
+ + + + + + + + + + + + + + + +
Do commandUndo commandQuick actions
+ +
+ +
+ +
+ +

These commands are executed when the app starts but are immediately forgotten by Sunshine, so when they exit it won't terminate the stream

+ + + + + + + + + + + + + + + + + +
CommandQuick actions
{{c}}
+
+ +
+ + +
The main application, if it is not specified, a processs is started that + sleeps indefinitely
+
+ +
+ +
-
- -
-
+
- - \ No newline at end of file + \ No newline at end of file diff --git a/assets/web/clients.html b/assets/web/clients.html index c2d03025..09610d12 100644 --- a/assets/web/clients.html +++ b/assets/web/clients.html @@ -1,3 +1,14 @@ -
-

Clients

-
\ No newline at end of file +
+
+
+

Clients

+
+
+
+
+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi, perspiciatis possimus cupiditate repellat + ducimus, accusantium, voluptatem recusandae ipsa non commodi aliquam fugit reprehenderit nostrum soluta + tenetur molestias corporis quia! Debitis!

+
+
+
\ No newline at end of file diff --git a/assets/web/config.html b/assets/web/config.html index f9c5380f..4bd1d295 100644 --- a/assets/web/config.html +++ b/assets/web/config.html @@ -1,467 +1,496 @@ -
-

Configuration

-
- - - -
- -
- - -
The name displayed by Moonlight. If not specified, the PC's hostname is used -
-
- -
- - -
The minimum log level printed to standard out
-
- -
- - -
The origin of the remote endpoint address that is not denied access to Web UI -
-
- -
- - -
Automatically configure port forwarding
-
- -
- - -
How long to wait in milliseconds for data from moonlight before shutting down the - stream
-
- -
- -
- -
-
- {{r}} - × +
+
+
+

Configuration

+
+
+
+
+
+ + + +
+ +
+ + +
The name displayed by Moonlight. If not specified, the PC's hostname is + used
-
- - -
-
-
- -
-
- {{f}} - × + +
+ + +
The minimum log level printed to standard out
+
+ +
+ + +
The origin of the remote endpoint address that is not denied access to + Web UI +
+
+ +
+ + +
Automatically configure port forwarding
+
+ +
+ + +
How long to wait in milliseconds for data from moonlight before shutting + down the + stream
+
+ +
+ +
+ +
+
+ {{r}} + × +
+
+ + +
+
+
+
+ +
+
+ {{f}} + × +
+
+ + +
+
+
+
+ The display modes advertised by Sunshine
+ Some versions of Moonlight, such as Moonlight-nx (Switch), + rely on this list to ensure that the requested resolutions and fps + are supported.
-
- - -
-
- The display modes advertised by Sunshine
- Some versions of Moonlight, such as Moonlight-nx (Switch), - rely on this list to ensure that the requested resolutions and fps - are supported. -
-
-
- -
- -
- - -
The private key must be 2048 bits
-
- -
- - -
The certificate must be signed with a 2048 bit key
-
+ +
+ +
+ + +
The private key must be 2048 bits
+
+ +
+ + +
The certificate must be signed with a 2048 bit key
+
- -
- - -
The file where current state of Sunshine is stored
-
- -
- - -
The file where current apps of Sunshine are stored
-
-
-
- -
- - -
- The back/select button on the controller.
- On the Shield, the home and powerbutton are not passed to Moonlight.
- If, after the timeout, the back button is still pressed down, Home/Guide button press is - emulated.
- If back_button_timeout < 0, then the Home/Guide button will not be emulated
-
-
- -
- - -
- Control how fast keys will repeat themselves
- The initial delay in milliseconds before repeating keys -
-
- -
- - -
- How often keys repeat every second
- This configurable option supports decimals -
-
-
- -
- -
- - -
- The name of the audio sink used for Audio Loopback
- You can find the name of the audio sink using the following command:
-
tools\audio-info.exe
-
-
-
- - -
- The name of the audio sink used for Audio Loopback
- If you do not specify this variable, pulseaudio will select the default monitor device.
-
- You can find the name of the audio sink using either command:
-
pacmd list-sinks | grep "name:"
-
pactl info | grep Source

-
-
- -
- - -
- The virtual sink, is the audio device that's virtual (Like Steam Streaming Speakers), it allows - Sunshine - to stream audio, while muting the speakers. -
-
- -
- - -
- You can select the video card you want to stream:
- The appropriate values can be found using the following command:
-
tools\dxgi-info.exe
-
-
- -
- - -
- You can select the video card you want to stream:
- The appropriate values can be found using the following command:
- tools\dxgi-info.exe

-
-
-
- - -
- xrandr --listmonitors
- Example output: -
   0: +HDMI-1 1920/518x1200/324+0+0 HDMI-1
-
-
-
-
- -
- - -
- Set the familly of ports used by Sunshine -
-
- -
- - -
- Constant Rate Factor. Between 1 and 52. It allows QP to go up during motion and down with still - image, - resulting in constant perceived quality
- Higher value means more compression, but less quality
- If crf == 0, then use QP directly instead + +
+ + +
The file where current state of Sunshine is stored
+
+ +
+ + +
The file where current apps of Sunshine are stored
+
-
- -
- - -
- Quantitization Parameter
- Higher value means more compression, but less quality
- If crf != 0, then this parameter is ignored +
+ +
+ + +
+ The back/select button on the controller.
+ On the Shield, the home and powerbutton are not passed to Moonlight.
+ If, after the timeout, the back button is still pressed down, Home/Guide button press is + emulated.
+ If back_button_timeout < 0, then the Home/Guide button will not be emulated
+
+
+ +
+ + +
+ Control how fast keys will repeat themselves
+ The initial delay in milliseconds before repeating keys +
+
+ +
+ + +
+ How often keys repeat every second
+ This configurable option supports decimals +
+
-
- -
- - -
- Minimum number of threads used by ffmpeg to encode the video.
- Increasing the value slightly reduces encoding efficiency, but the tradeoff is usually
- worth it to gain the use of more CPU cores for encoding. The ideal value is the lowest
- value that can reliably encode at your desired streaming settings on your hardware. + +
+ +
+ + +
+ The name of the audio sink used for Audio Loopback
+ You can find the name of the audio sink using the following command:
+
tools\audio-info.exe
+
+
+
+ + +
+ The name of the audio sink used for Audio Loopback
+ If you do not specify this variable, pulseaudio will select the default monitor device.
+
+ You can find the name of the audio sink using either command:
+
pacmd list-sinks | grep "name:"
+
pactl info | grep Source

+
+
+ +
+ + +
+ The virtual sink, is the audio device that's virtual (Like Steam Streaming Speakers), it + allows + Sunshine + to stream audio, while muting the speakers. +
+
+ +
+ + +
+ You can select the video card you want to stream:
+ The appropriate values can be found using the following command:
+
tools\dxgi-info.exe
+
+
+ +
+ + +
+ You can select the video card you want to stream:
+ The appropriate values can be found using the following command:
+ tools\dxgi-info.exe

+
+
+
+ + +
+ xrandr --listmonitors
+ Example output: +
   0: +HDMI-1 1920/518x1200/324+0+0 HDMI-1
+
+
-
- -
- - -
- Allows the client to request HEVC Main or HEVC Main10 video streams.
- HEVC is more CPU-intensive to encode, so enabling this may reduce performance when using - software - encoding. +
+ +
+ + +
+ Set the familly of ports used by Sunshine +
+
+ +
+ + +
+ Constant Rate Factor. Between 1 and 52. It allows QP to go up during motion and down with + still + image, + resulting in constant perceived quality
+ Higher value means more compression, but less quality
+ If crf == 0, then use QP directly instead +
+
+ +
+ + +
+ Quantitization Parameter
+ Higher value means more compression, but less quality
+ If crf != 0, then this parameter is ignored +
+
+ +
+ + +
+ Minimum number of threads used by ffmpeg to encode the video.
+ Increasing the value slightly reduces encoding efficiency, but the tradeoff is usually
+ worth it to gain the use of more CPU cores for encoding. The ideal value is the lowest
+ value that can reliably encode at your desired streaming settings on your hardware. +
+
+ +
+ + +
+ Allows the client to request HEVC Main or HEVC Main10 video streams.
+ HEVC is more CPU-intensive to encode, so enabling this may reduce performance when using + software + encoding. +
+
+ +
+ + +
+ Force a specific encoder, otherwise Sunshine will use the first encoder that is available +
+
+ +
+ + +
+ Percentage of error correcting packets per data packet in each video frame.
+ Higher values can correct for more network packet loss, but at the cost of increasing + bandwidth usage.
+ The default value of 20 is what GeForce Experience uses. +
+
+ +
+ + +
+ When multicasting, it could be useful to have different configurations for each connected + Client. + For example: +
    +
  • Clients connected through WAN and LAN have different bitrate contstraints.
  • +
  • Decoders may require different settings for color
  • +
+ Unlike simply broadcasting to multiple Client, this will generate distinct video + streams.
+ Note, CPU usage increases for each distinct video stream generated +
+
+ +
+ + +
+ Store Username/Password seperately from Sunshine's state file. +
+
+ +
+ + +
The origin of the remote endpoint address that is not denied for HTTP + method /pin +
+
+ +
+ + +
If no external IP address is given, Sunshine will automatically detect + external + IP
+
-
- -
- - -
- Force a specific encoder, otherwise Sunshine will use the first encoder that is available + +
+
+ + +
+
+ + +
-
- -
- - -
- Percentage of error correcting packets per data packet in each video frame.
- Higher values can correct for more network packet loss, but at the cost of increasing bandwidth usage.
- The default value of 20 is what GeForce Experience uses. + +
+ +
+ + +
+
+ + +
+
+ + +
-
- -
- - -
- When multicasting, it could be useful to have different configurations for each connected - Client. - For example: -
    -
  • Clients connected through WAN and LAN have different bitrate contstraints.
  • -
  • Decoders may require different settings for color
  • -
- Unlike simply broadcasting to multiple Client, this will generate distinct video streams.
- Note, CPU usage increases for each distinct video stream generated + +
+ +
+ + +
+
+ + +
+
+ + +
-
- -
- - -
- Store Username/Password seperately from Sunshine's state file. +
+
- -
- - -
The origin of the remote endpoint address that is not denied for HTTP method /pin +
+
+ Loading...
- -
- - -
If no external IP address is given, Sunshine will automatically detect external - IP
-
-
- -
-
- - -
-
- - -
-
- -
- -
- - -
-
- - -
-
- - -
-
- -
- -
- - -
-
- - -
-
- - -
-
-
- +
Success! Restart Sunshine to apply changes
+
-
Success! Restart Sunshine to apply changes
-
- -
-
+
- + + + diff --git a/assets/web/index.html b/assets/web/index.html index 4b02f845..8643a4ff 100644 --- a/assets/web/index.html +++ b/assets/web/index.html @@ -1,9 +1,13 @@ -
-
-
-

Hello, Sunshine!

-

Sunshine is a Gamestream host for Moonlight

- Official GitHub Repository +
+
+
+
+
+

Hello, Sunshine!

+

Sunshine is a Gamestream host for Moonlight

+

Official GitHub Repository

+
+
-
\ No newline at end of file + \ No newline at end of file diff --git a/assets/web/password.html b/assets/web/password.html index 3e3f2140..4206b16d 100644 --- a/assets/web/password.html +++ b/assets/web/password.html @@ -1,97 +1,115 @@ -
-

Password Change

-
-
-
-

Current Credentials

-
- - -
 
-
-
- - -
-
-
-

New Credentials

-
- - -
If not specified, the username will not change +
+
+
+

Update credentials

+

Update the credentials used to connect to this web interface, including the username and + password.

+
+
+
+
+ +
+
+ + +
+
+

Current credentials

+

You need to enter your current credentials to change them, you need to enter both the + username and password.

+
+ + +
+
+ + +
+
+
+

New credentials

+

Enter the new credentials you want to use, if you just want to change the password you can + leave the username field empty.

+
+ + +
+
+ + +
+
+ + +
+
+
+
-
- - -
-
- - -
-
-
-
Error: {{error}}
-
Success! This page will reload soon, your browser will ask you for the new credentials
-
- +
- -
+
+ - - \ No newline at end of file + body: JSON.stringify(this.passwordData), + }) + .then((r) => { + this.isLoading = false; + if (r.status == 200) { + r.json().then((rj) => { + if (rj.status.toString() === "true") { + this.success = true; + setTimeout(() => { + document.location.reload(); + }, 5000); + } else { + this.error = rj.error; + } + }); + } else { + this.error = "Internal Server Error"; + } + }) + .catch((err) => { + this.isLoading = false; + console.error(err); + }); + }, + }, + }); + \ No newline at end of file diff --git a/assets/web/pin.html b/assets/web/pin.html index 89e5b704..d4beec11 100644 --- a/assets/web/pin.html +++ b/assets/web/pin.html @@ -1,31 +1,64 @@ - -
-

PIN Pairing

-
-
- - -
-
- Warning! Make sure you have access to the client you are pairing with.
- This software can give total control to your computer, so be careful! +
+
+
+

Pair a new device

+

Allow a new client to connect to this computer by entering the PIN code given by Moonlight here. +

+
+
+
+
+
+
+ + +
+ + +
Pairing successful! Please check Moonlight to continue!
+
The given PIN code doesn't match, please check that it's typed correctly. +
+
+ +
-
- -
+
+
+
+ \ No newline at end of file diff --git a/sunshine/confighttp.cpp b/sunshine/confighttp.cpp index b21c7571..ce833c78 100644 --- a/sunshine/confighttp.cpp +++ b/sunshine/confighttp.cpp @@ -132,7 +132,8 @@ void getIndexPage(resp_https_t response, req_https_t request) { std::string header = read_file(WEB_DIR "header.html"); std::string content = read_file(WEB_DIR "index.html"); - response->write(header + content); + std::string footer = read_file(WEB_DIR "footer.html"); + response->write(header + content + footer); } void getPinPage(resp_https_t response, req_https_t request) { @@ -142,7 +143,8 @@ void getPinPage(resp_https_t response, req_https_t request) { std::string header = read_file(WEB_DIR "header.html"); std::string content = read_file(WEB_DIR "pin.html"); - response->write(header + content); + std::string footer = read_file(WEB_DIR "footer.html"); + response->write(header + content + footer); } void getAppsPage(resp_https_t response, req_https_t request) { @@ -152,7 +154,8 @@ void getAppsPage(resp_https_t response, req_https_t request) { std::string header = read_file(WEB_DIR "header.html"); std::string content = read_file(WEB_DIR "apps.html"); - response->write(header + content); + std::string footer = read_file(WEB_DIR "footer.html"); + response->write(header + content + footer); } void getClientsPage(resp_https_t response, req_https_t request) { @@ -162,7 +165,8 @@ void getClientsPage(resp_https_t response, req_https_t request) { std::string header = read_file(WEB_DIR "header.html"); std::string content = read_file(WEB_DIR "clients.html"); - response->write(header + content); + std::string footer = read_file(WEB_DIR "footer.html"); + response->write(header + content + footer); } void getConfigPage(resp_https_t response, req_https_t request) { @@ -172,7 +176,8 @@ void getConfigPage(resp_https_t response, req_https_t request) { std::string header = read_file(WEB_DIR "header.html"); std::string content = read_file(WEB_DIR "config.html"); - response->write(header + content); + std::string footer = read_file(WEB_DIR "footer.html"); + response->write(header + content + footer); } void getPasswordPage(resp_https_t response, req_https_t request) { @@ -182,7 +187,8 @@ void getPasswordPage(resp_https_t response, req_https_t request) { std::string header = read_file(WEB_DIR "header.html"); std::string content = read_file(WEB_DIR "password.html"); - response->write(header + content); + std::string footer = read_file(WEB_DIR "footer.html"); + response->write(header + content + footer); } void getApps(resp_https_t response, req_https_t request) {