mirror of
https://github.com/chuot/rdio-scanner.git
synced 2026-08-13 16:33:01 -06:00
Version 6.1.13
This commit is contained in:
parent
2d28bf0428
commit
e09a227590
|
|
@ -80,6 +80,12 @@ _v6.1.12_
|
||||||
- Fix too many open files (issue #129).
|
- Fix too many open files (issue #129).
|
||||||
- Cosmetic: AVOID and PATCH flags now only appear when needed.
|
- Cosmetic: AVOID and PATCH flags now only appear when needed.
|
||||||
|
|
||||||
|
_v6.1.13_
|
||||||
|
|
||||||
|
- Better handling of dead client connections.
|
||||||
|
- Fix too many open files (issue #129).
|
||||||
|
- Remove net.http error messages from the output (issue #131).
|
||||||
|
|
||||||
## Version 6.0
|
## Version 6.0
|
||||||
|
|
||||||
- Backend server rewritten in Go for better performance and ease of installation.
|
- Backend server rewritten in Go for better performance and ease of installation.
|
||||||
|
|
|
||||||
16
COMPILING.md
16
COMPILING.md
|
|
@ -24,13 +24,13 @@ Clone the official repository on your computer and start the build process.
|
||||||
|
|
||||||
When finished, you will find the precompiled versions for various platforms in the `dist` folder.
|
When finished, you will find the precompiled versions for various platforms in the `dist` folder.
|
||||||
|
|
||||||
rdio-scanner-darwin-amd64-v6.1.12.zip
|
rdio-scanner-darwin-amd64-v6.1.13.zip
|
||||||
rdio-scanner-darwin-arm64-v6.1.12.zip
|
rdio-scanner-darwin-arm64-v6.1.13.zip
|
||||||
rdio-scanner-freebsd-amd64-v6.1.12.zip
|
rdio-scanner-freebsd-amd64-v6.1.13.zip
|
||||||
rdio-scanner-linux-386-v6.1.12.zip
|
rdio-scanner-linux-386-v6.1.13.zip
|
||||||
rdio-scanner-linux-amd64-v6.1.12.zip
|
rdio-scanner-linux-amd64-v6.1.13.zip
|
||||||
rdio-scanner-linux-arm64-v6.1.12.zip
|
rdio-scanner-linux-arm64-v6.1.13.zip
|
||||||
rdio-scanner-linux-arm-v6.1.12.zip
|
rdio-scanner-linux-arm-v6.1.13.zip
|
||||||
rdio-scanner-windows-amd64-v6.1.12.zip
|
rdio-scanner-windows-amd64-v6.1.13.zip
|
||||||
|
|
||||||
**Happy Rdio scanning !**
|
**Happy Rdio scanning !**
|
||||||
4
Makefile
4
Makefile
|
|
@ -16,8 +16,8 @@
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
app := rdio-scanner
|
app := rdio-scanner
|
||||||
date := 2022/02/14
|
date := 2022/02/17
|
||||||
ver := 6.1.12
|
ver := 6.1.13
|
||||||
|
|
||||||
client := $(wildcard client/*.json client/*.ts)
|
client := $(wildcard client/*.json client/*.ts)
|
||||||
server := $(wildcard server/*.go)
|
server := $(wildcard server/*.go)
|
||||||
|
|
|
||||||
|
|
@ -38,5 +38,5 @@
|
||||||
"build": "ng build --base-href ./ --configuration production",
|
"build": "ng build --base-href ./ --configuration production",
|
||||||
"start": "ng serve"
|
"start": "ng serve"
|
||||||
},
|
},
|
||||||
"version": "6.1.12"
|
"version": "6.1.13"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
rdio@macos ~ % mkdir rdio-scanner
|
rdio@macos ~ % mkdir rdio-scanner
|
||||||
rdio@macos ~ % cd rdio-scanner
|
rdio@macos ~ % cd rdio-scanner
|
||||||
rdio@macos rdio-scanner % unzip \
|
rdio@macos rdio-scanner % unzip \
|
||||||
> ~/Downloads/rdio-scanner-darwin-arm64-v6.1.12.zip
|
> ~/Downloads/rdio-scanner-darwin-arm64-v6.1.13.zip
|
||||||
Archive: /Users/rdio/Downloads/rdio-scanner-darwin-arm64-v6.1.12.zip
|
Archive: /Users/rdio/Downloads/rdio-scanner-darwin-arm64-v6.1.13.zip
|
||||||
inflating: rdio-scanner
|
inflating: rdio-scanner
|
||||||
inflating: rdio-scanner.pdf
|
inflating: rdio-scanner.pdf
|
||||||
|
|
||||||
|
|
@ -51,11 +51,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
|
|
||||||
rdio@macos rdio-scanner % ./rdio-scanner
|
rdio@macos rdio-scanner % ./rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 08:38:06 server started
|
2022/02/17 08:38:06 server started
|
||||||
2022/02/14 08:38:06 main interface at http://macos.local:3000
|
2022/02/17 08:38:06 main interface at http://macos.local:3000
|
||||||
2022/02/14 08:38:06 admin interface at http://macos.local:3000/admin
|
2022/02/17 08:38:06 admin interface at http://macos.local:3000/admin
|
||||||
|
|
||||||
4. Access the administrative dashboard to finalize the configuration.
|
4. Access the administrative dashboard to finalize the configuration.
|
||||||
|
|
||||||
|
|
@ -77,11 +77,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
||||||
|
|
||||||
rdio@macos rdio-scanner % ./rdio-scanner --listen :80
|
rdio@macos rdio-scanner % ./rdio-scanner --listen :80
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 08:48:03 server started
|
2022/02/17 08:48:03 server started
|
||||||
2022/02/14 08:48:03 main interface at http://macos.local
|
2022/02/17 08:48:03 main interface at http://macos.local
|
||||||
2022/02/14 08:48:03 admin interface at http://macos.local/admin
|
2022/02/17 08:48:03 admin interface at http://macos.local/admin
|
||||||
|
|
||||||
## Listening with SSL with self-signed certificates
|
## Listening with SSL with self-signed certificates
|
||||||
|
|
||||||
|
|
@ -90,8 +90,8 @@ It is advised to share your [Rdio Scanner](https://github.com/chuot/rdio-scanner
|
||||||
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
||||||
|
|
||||||
rdio@macos rdio-scanner % ./rdio-scanner -ssl_create
|
rdio@macos rdio-scanner % ./rdio-scanner -ssl_create
|
||||||
2022/02/14 08:49:16 generating ssl certificate files
|
2022/02/17 08:49:16 generating ssl certificate files
|
||||||
2022/02/14 08:49:17 ssl files created
|
2022/02/17 08:49:17 ssl files created
|
||||||
|
|
||||||
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
||||||
|
|
||||||
|
|
@ -108,12 +108,12 @@ Now we use the self-signed server certificate to run our instance.
|
||||||
> -ssl_key_file server.key \
|
> -ssl_key_file server.key \
|
||||||
> -ssl_listen :443
|
> -ssl_listen :443
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 08:50:58 server started
|
2022/02/17 08:50:58 server started
|
||||||
2022/02/14 08:50:58 main interface at http://macos.local
|
2022/02/17 08:50:58 main interface at http://macos.local
|
||||||
2022/02/14 08:50:58 main interface at https://macos.local
|
2022/02/17 08:50:58 main interface at https://macos.local
|
||||||
2022/02/14 08:50:58 admin interface at https://macos.local/admin
|
2022/02/17 08:50:58 admin interface at https://macos.local/admin
|
||||||
|
|
||||||
## Save your advanced configuration to a config file
|
## Save your advanced configuration to a config file
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
||||||
> -ssl_key_file server.key \
|
> -ssl_key_file server.key \
|
||||||
> -ssl_listen :443 \
|
> -ssl_listen :443 \
|
||||||
> -config_save
|
> -config_save
|
||||||
2022/02/14 08:52:24 rdio-scanner.ini file created
|
2022/02/17 08:52:24 rdio-scanner.ini file created
|
||||||
|
|
||||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||||
|
|
||||||
|
|
@ -140,12 +140,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
||||||
|
|
||||||
rdio@macos rdio-scanner % ./rdio-scanner
|
rdio@macos rdio-scanner % ./rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 08:54:08 server started
|
2022/02/17 08:54:08 server started
|
||||||
2022/02/14 08:54:08 main interface at http://macos.local
|
2022/02/17 08:54:08 main interface at http://macos.local
|
||||||
2022/02/14 08:54:08 main interface at https://macos.local
|
2022/02/17 08:54:08 main interface at https://macos.local
|
||||||
2022/02/14 08:54:08 admin interface at https://macos.local/admin
|
2022/02/17 08:54:08 admin interface at https://macos.local/admin
|
||||||
|
|
||||||
## Install Rdio Scanner as a service
|
## Install Rdio Scanner as a service
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
rdio@pc-freebsd:~ $ mkdir rdio-scanner
|
rdio@pc-freebsd:~ $ mkdir rdio-scanner
|
||||||
rdio@pc-freebsd:~ $ cd rdio-scanner
|
rdio@pc-freebsd:~ $ cd rdio-scanner
|
||||||
rdio@pc-freebsd:~/rdio-scanner $ unzip \
|
rdio@pc-freebsd:~/rdio-scanner $ unzip \
|
||||||
> ~/rdio-scanner-freebsd-amd64-v6.1.12.zip
|
> ~/rdio-scanner-freebsd-amd64-v6.1.13.zip
|
||||||
Archive: ../rdio-scanner-freebsd-amd64-v6.1.12.zip
|
Archive: ../rdio-scanner-freebsd-amd64-v6.1.13.zip
|
||||||
extracting: rdio-scanner
|
extracting: rdio-scanner
|
||||||
extracting: rdio-scanner.pdf
|
extracting: rdio-scanner.pdf
|
||||||
|
|
||||||
|
|
@ -51,11 +51,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
|
|
||||||
rdio@pc-freebsd:~/rdio-scanner $ ./rdio-scanner
|
rdio@pc-freebsd:~/rdio-scanner $ ./rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 08:16:36 server started
|
2022/02/17 08:16:36 server started
|
||||||
2022/02/14 08:16:36 main interface at http://pc-freebsd:3000
|
2022/02/17 08:16:36 main interface at http://pc-freebsd:3000
|
||||||
2022/02/14 08:16:36 admin interface at http://pc-freebsd:3000/admin
|
2022/02/17 08:16:36 admin interface at http://pc-freebsd:3000/admin
|
||||||
|
|
||||||
4. Access the administrative dashboard to finalize the configuration.
|
4. Access the administrative dashboard to finalize the configuration.
|
||||||
|
|
||||||
|
|
@ -81,11 +81,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
||||||
Password:
|
Password:
|
||||||
root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner -listen :80
|
root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner -listen :80
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 08:19:38 server started
|
2022/02/17 08:19:38 server started
|
||||||
2022/02/14 08:19:38 main interface at http://pc-freebsd
|
2022/02/17 08:19:38 main interface at http://pc-freebsd
|
||||||
2022/02/14 08:19:38 admin interface at http://pc-freebsd/admin
|
2022/02/17 08:19:38 admin interface at http://pc-freebsd/admin
|
||||||
|
|
||||||
## Listening with SSL with self-signed certificates
|
## Listening with SSL with self-signed certificates
|
||||||
|
|
||||||
|
|
@ -94,8 +94,8 @@ It is advised to share your [Rdio Scanner](https://github.com/chuot/rdio-scanner
|
||||||
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
||||||
|
|
||||||
rdio@pc-freebsd:~/rdio-scanner $ ./rdio-scanner -ssl_create
|
rdio@pc-freebsd:~/rdio-scanner $ ./rdio-scanner -ssl_create
|
||||||
2022/02/14 10:32:17 generating ssl certificate files
|
2022/02/17 10:32:17 generating ssl certificate files
|
||||||
2022/02/14 10:32:19 ssl files created
|
2022/02/17 10:32:19 ssl files created
|
||||||
|
|
||||||
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
||||||
|
|
||||||
|
|
@ -114,12 +114,12 @@ Now we use the self-signed server certificate to run our instance.
|
||||||
> -ssl_key_file server.key \
|
> -ssl_key_file server.key \
|
||||||
> -ssl_listen :443
|
> -ssl_listen :443
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 10:34:29 server started
|
2022/02/17 10:34:29 server started
|
||||||
2022/02/14 10:34:29 main interface at http://pc-freebsd
|
2022/02/17 10:34:29 main interface at http://pc-freebsd
|
||||||
2022/02/14 10:34:29 main interface at https://pc-freebsd
|
2022/02/17 10:34:29 main interface at https://pc-freebsd
|
||||||
2022/02/14 10:34:29 admin interface at https://pc-freebsd/admin
|
2022/02/17 10:34:29 admin interface at https://pc-freebsd/admin
|
||||||
|
|
||||||
## Save your advanced configuration to a config file
|
## Save your advanced configuration to a config file
|
||||||
|
|
||||||
|
|
@ -131,7 +131,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
||||||
> -ssl_key_file server.key \
|
> -ssl_key_file server.key \
|
||||||
> -ssl_listen :443 \
|
> -ssl_listen :443 \
|
||||||
> -config_save
|
> -config_save
|
||||||
2022/02/14 10:37:00 rdio-scanner.ini file created
|
2022/02/17 10:37:00 rdio-scanner.ini file created
|
||||||
|
|
||||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||||
|
|
||||||
|
|
@ -148,12 +148,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
||||||
Password:
|
Password:
|
||||||
root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner
|
root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 10:38:28 server started
|
2022/02/17 10:38:28 server started
|
||||||
2022/02/14 10:38:29 main interface at http://pc-freebsd
|
2022/02/17 10:38:29 main interface at http://pc-freebsd
|
||||||
2022/02/14 10:38:29 main interface at https://pc-freebsd
|
2022/02/17 10:38:29 main interface at https://pc-freebsd
|
||||||
2022/02/14 10:38:29 admin interface at https://pc-freebsd/admin
|
2022/02/17 10:38:29 admin interface at https://pc-freebsd/admin
|
||||||
|
|
||||||
## Install Rdio Scanner as a service
|
## Install Rdio Scanner as a service
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
[rdio@pc-linux ~]$ mkdir rdio-scanner
|
[rdio@pc-linux ~]$ mkdir rdio-scanner
|
||||||
[rdio@pc-linux ~]$ cd rdio-scanner
|
[rdio@pc-linux ~]$ cd rdio-scanner
|
||||||
[rdio@pc-linux rdio-scanner]$ unzip \
|
[rdio@pc-linux rdio-scanner]$ unzip \
|
||||||
> ~/Downloads/rdio-scanner-linux-amd64-v6.1.12.zip
|
> ~/Downloads/rdio-scanner-linux-amd64-v6.1.13.zip
|
||||||
Archive: /home/rdio/Downloads/rdio-scanner-linux-amd64-v6.1.12.zip
|
Archive: /home/rdio/Downloads/rdio-scanner-linux-amd64-v6.1.13.zip
|
||||||
inflating: rdio-scanner
|
inflating: rdio-scanner
|
||||||
inflating: rdio-scanner.pdf
|
inflating: rdio-scanner.pdf
|
||||||
|
|
||||||
|
|
@ -51,11 +51,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
|
|
||||||
[rdio@pc-linux rdio-scanner]$ ./rdio-scanner
|
[rdio@pc-linux rdio-scanner]$ ./rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 09:11:48 server started
|
2022/02/17 09:11:48 server started
|
||||||
2022/02/14 09:11:48 main interface at http://pc-linux:3000
|
2022/02/17 09:11:48 main interface at http://pc-linux:3000
|
||||||
2022/02/14 09:11:48 admin interface at http://pc-linux:3000/admin
|
2022/02/17 09:11:48 admin interface at http://pc-linux:3000/admin
|
||||||
|
|
||||||
4. Access the administrative dashboard to finalize the configuration.
|
4. Access the administrative dashboard to finalize the configuration.
|
||||||
|
|
||||||
|
|
@ -78,11 +78,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
||||||
[rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner -listen :80
|
[rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner -listen :80
|
||||||
[sudo] password for rdio:
|
[sudo] password for rdio:
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 09:14:00 server started
|
2022/02/17 09:14:00 server started
|
||||||
2022/02/14 09:14:00 main interface at http://pc-linux
|
2022/02/17 09:14:00 main interface at http://pc-linux
|
||||||
2022/02/14 09:14:00 admin interface at http://pc-linux/admin
|
2022/02/17 09:14:00 admin interface at http://pc-linux/admin
|
||||||
|
|
||||||
## Listening with SSL with self-signed certificates
|
## Listening with SSL with self-signed certificates
|
||||||
|
|
||||||
|
|
@ -91,8 +91,8 @@ It is advised to share your [Rdio Scanner](https://github.com/chuot/rdio-scanner
|
||||||
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
||||||
|
|
||||||
[rdio@pc-linux rdio-scanner]$ ./rdio-scanner -ssl_create
|
[rdio@pc-linux rdio-scanner]$ ./rdio-scanner -ssl_create
|
||||||
2022/02/14 09:15:03 generating ssl certificate files
|
2022/02/17 09:15:03 generating ssl certificate files
|
||||||
2022/02/14 09:15:05 ssl files created
|
2022/02/17 09:15:05 ssl files created
|
||||||
|
|
||||||
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
||||||
|
|
||||||
|
|
@ -110,12 +110,12 @@ Now we use the self-signed server certificate to run our instance.
|
||||||
> -ssl_listen :443
|
> -ssl_listen :443
|
||||||
[sudo] password for rdio:
|
[sudo] password for rdio:
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 09:16:47 server started
|
2022/02/17 09:16:47 server started
|
||||||
2022/02/14 09:16:47 main interface at http://pc-linux
|
2022/02/17 09:16:47 main interface at http://pc-linux
|
||||||
2022/02/14 09:16:47 main interface at https://pc-linux
|
2022/02/17 09:16:47 main interface at https://pc-linux
|
||||||
2022/02/14 09:16:47 admin interface at https://pc-linux/admin
|
2022/02/17 09:16:47 admin interface at https://pc-linux/admin
|
||||||
|
|
||||||
## Save your advanced configuration to a config file
|
## Save your advanced configuration to a config file
|
||||||
|
|
||||||
|
|
@ -127,7 +127,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
||||||
> -ssl_key_file server.key \
|
> -ssl_key_file server.key \
|
||||||
> -ssl_listen :443 \
|
> -ssl_listen :443 \
|
||||||
> -config_save
|
> -config_save
|
||||||
2022/02/14 09:19:29 rdio-scanner.ini file created
|
2022/02/17 09:19:29 rdio-scanner.ini file created
|
||||||
|
|
||||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||||
|
|
||||||
|
|
@ -143,12 +143,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
||||||
[rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner
|
[rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner
|
||||||
[sudo] Mot de passe de rdio :
|
[sudo] Mot de passe de rdio :
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 09:20:40 server started
|
2022/02/17 09:20:40 server started
|
||||||
2022/02/14 09:20:40 main interface at http://pc-linux
|
2022/02/17 09:20:40 main interface at http://pc-linux
|
||||||
2022/02/14 09:20:40 main interface at https://pc-linux
|
2022/02/17 09:20:40 main interface at https://pc-linux
|
||||||
2022/02/14 09:20:40 admin interface at https://pc-linux/admin
|
2022/02/17 09:20:40 admin interface at https://pc-linux/admin
|
||||||
|
|
||||||
## Install Rdio Scanner as a service
|
## Install Rdio Scanner as a service
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
C:\Users\rdio> cd rdio-scanner
|
C:\Users\rdio> cd rdio-scanner
|
||||||
|
|
||||||
C:\Users\rdio\rdio-scanner> tar -xvf ^
|
C:\Users\rdio\rdio-scanner> tar -xvf ^
|
||||||
..\downloads\rdio-scanner-windows-amd64-v6.1.12.zip
|
..\downloads\rdio-scanner-windows-amd64-v6.1.13.zip
|
||||||
x rdio-scanner.exe
|
x rdio-scanner.exe
|
||||||
x rdio-scanner.pdf
|
x rdio-scanner.pdf
|
||||||
|
|
||||||
|
|
@ -52,11 +52,11 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd
|
||||||
|
|
||||||
C:\Users\rdio\rdio-scanner>rdio-scanner
|
C:\Users\rdio\rdio-scanner>rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 13:48:48 server started
|
2022/02/17 13:48:48 server started
|
||||||
2022/02/14 13:48:48 main interface at http://pc-windows:3000
|
2022/02/17 13:48:48 main interface at http://pc-windows:3000
|
||||||
2022/02/14 13:48:48 admin interface at http://pc-windows:3000/admin
|
2022/02/17 13:48:48 admin interface at http://pc-windows:3000/admin
|
||||||
|
|
||||||
4. Access the administrative dashboard to finalize the configuration.
|
4. Access the administrative dashboard to finalize the configuration.
|
||||||
|
|
||||||
|
|
@ -78,11 +78,11 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance
|
||||||
|
|
||||||
C:\Users\rdio\rdio-scanner>rdio-scanner -listen :80
|
C:\Users\rdio\rdio-scanner>rdio-scanner -listen :80
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 10:53:31 server started
|
2022/02/17 10:53:31 server started
|
||||||
2022/02/14 10:53:31 main interface at http://pc-windows
|
2022/02/17 10:53:31 main interface at http://pc-windows
|
||||||
2022/02/14 10:53:31 admin interface at http://pc-windows/admin
|
2022/02/17 10:53:31 admin interface at http://pc-windows/admin
|
||||||
|
|
||||||
## Listening with SSL with self-signed certificates
|
## Listening with SSL with self-signed certificates
|
||||||
|
|
||||||
|
|
@ -91,8 +91,8 @@ It is advised to share your [Rdio Scanner](https://github.com/chuot/rdio-scanner
|
||||||
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
We can create such self-signed certificates by running [Rdio Scanner](https://github.com/chuot/rdio-scanner) with the **-ssl_create** argument.
|
||||||
|
|
||||||
C:\Users\rdio\rdio-scanner>rdio-scanner -ssl_create
|
C:\Users\rdio\rdio-scanner>rdio-scanner -ssl_create
|
||||||
2022/02/14 10:58:51 generating ssl certificate files
|
2022/02/17 10:58:51 generating ssl certificate files
|
||||||
2022/02/14 10:58:54 ssl files created
|
2022/02/17 10:58:54 ssl files created
|
||||||
|
|
||||||
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
This has generated these files in the same folder as your [Rdio Scanner](https://github.com/chuot/rdio-scanner) executable.
|
||||||
|
|
||||||
|
|
@ -109,12 +109,12 @@ Now we use the self-signed server certificate to run our instance.
|
||||||
-ssl_key_file server.key ^
|
-ssl_key_file server.key ^
|
||||||
-ssl_listen :443
|
-ssl_listen :443
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 11:05:43 server started
|
2022/02/17 11:05:43 server started
|
||||||
2022/02/14 11:05:43 main interface at http://pc-windows
|
2022/02/17 11:05:43 main interface at http://pc-windows
|
||||||
2022/02/14 11:05:43 main interface at https://pc-windows
|
2022/02/17 11:05:43 main interface at https://pc-windows
|
||||||
2022/02/14 11:05:43 admin interface at https://pc-windows/admin
|
2022/02/17 11:05:43 admin interface at https://pc-windows/admin
|
||||||
|
|
||||||
## Save your advanced configuration to a config file
|
## Save your advanced configuration to a config file
|
||||||
|
|
||||||
|
|
@ -126,7 +126,7 @@ You don't want to have to type everytime a long list of arguments. No problem, y
|
||||||
-ssl_key_file server.key ^
|
-ssl_key_file server.key ^
|
||||||
-ssl_listen :443 ^
|
-ssl_listen :443 ^
|
||||||
-config_save
|
-config_save
|
||||||
2022/02/14 11:08:28 rdio-scanner.ini file created
|
2022/02/17 11:08:28 rdio-scanner.ini file created
|
||||||
|
|
||||||
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
All of your parameters passed as arguments to [Rdio Scanner](https://github.com/chuot/rdio-scanner) have been saved to an INI file which has the same arguments/values list.
|
||||||
|
|
||||||
|
|
@ -141,12 +141,12 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an
|
||||||
|
|
||||||
C:\Users\rdio\rdio-scanner>rdio-scanner
|
C:\Users\rdio\rdio-scanner>rdio-scanner
|
||||||
|
|
||||||
Rdio Scanner v6.1.12
|
Rdio Scanner v6.1.13
|
||||||
----------------------------------
|
----------------------------------
|
||||||
2022/02/14 11:11:28 server started
|
2022/02/17 11:11:28 server started
|
||||||
2022/02/14 11:11:28 main interface at http://pc-windows
|
2022/02/17 11:11:28 main interface at http://pc-windows
|
||||||
2022/02/14 11:11:28 main interface at https://pc-windows
|
2022/02/17 11:11:28 main interface at https://pc-windows
|
||||||
2022/02/14 11:11:28 admin interface at https://pc-windows/admin
|
2022/02/17 11:11:28 admin interface at https://pc-windows/admin
|
||||||
|
|
||||||
\pagebreak{}
|
\pagebreak{}
|
||||||
|
|
||||||
|
|
@ -206,9 +206,7 @@ To get the whole list of arguments you can pass to [Rdio Scanner](https://github
|
||||||
listening address for ssl
|
listening address for ssl
|
||||||
-version
|
-version
|
||||||
show application version
|
show application version
|
||||||
|
|
||||||
C:\Users\rdio\rdio-scanner>
|
C:\Users\rdio\rdio-scanner>
|
||||||
|
|
||||||
\pagebreak{}
|
\pagebreak{}
|
||||||
|
|
||||||
# Need help ?
|
# Need help ?
|
||||||
|
|
|
||||||
|
|
@ -30,14 +30,6 @@ import (
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
AdminUrlConfig = "api/admin/config"
|
|
||||||
AdminUrlLogin = "api/admin/login"
|
|
||||||
AdminUrlLogout = "api/admin/logout"
|
|
||||||
AdminUrlLogs = "api/admin/logs"
|
|
||||||
AdminUrlPassword = "api/admin/password"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Admin struct {
|
type Admin struct {
|
||||||
Attempts AdminLoginAttempts
|
Attempts AdminLoginAttempts
|
||||||
AttemptsMax uint
|
AttemptsMax uint
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
ApiUrlCallUpload = "api/call-upload"
|
|
||||||
ApiUrlTrunkRecorderCallUpload = "api/trunk-recorder-call-upload"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Api struct {
|
type Api struct {
|
||||||
Controller *Controller
|
Controller *Controller
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,13 @@ type Client struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (client *Client) Init(controller *Controller, conn *websocket.Conn) error {
|
func (client *Client) Init(controller *Controller, conn *websocket.Conn) error {
|
||||||
|
const (
|
||||||
|
pongWait = 60 * time.Second
|
||||||
|
pingPeriod = pongWait / 10 * 9
|
||||||
|
writeWait = 10 * time.Second
|
||||||
|
closeWait = 10 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
if client.initialized {
|
if client.initialized {
|
||||||
return errors.New("client.init: already initialized")
|
return errors.New("client.init: already initialized")
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +63,17 @@ func (client *Client) Init(controller *Controller, conn *websocket.Conn) error {
|
||||||
controller.Register <- client
|
controller.Register <- client
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
client.Conn.SetReadDeadline(time.Time{})
|
defer func() {
|
||||||
|
controller.Unregister <- client
|
||||||
|
client.Conn.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
|
client.Conn.SetReadDeadline(time.Now().Add(pongWait))
|
||||||
|
|
||||||
|
client.Conn.SetPongHandler(func(string) error {
|
||||||
|
client.Conn.SetReadDeadline(time.Now().Add(pongWait))
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
for {
|
for {
|
||||||
_, b, err := client.Conn.ReadMessage()
|
_, b, err := client.Conn.ReadMessage()
|
||||||
|
|
@ -75,28 +92,43 @@ func (client *Client) Init(controller *Controller, conn *websocket.Conn) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
controller.Unregister <- client
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
ticker := time.NewTicker(30 * time.Second)
|
ticker := time.NewTicker(pingPeriod)
|
||||||
|
|
||||||
|
timer := time.AfterFunc(writeWait, func() {
|
||||||
|
client.Conn.Close()
|
||||||
|
})
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
ticker.Stop()
|
|
||||||
controller.Unregister <- client
|
controller.Unregister <- client
|
||||||
|
|
||||||
|
ticker.Stop()
|
||||||
|
timer.Stop()
|
||||||
|
|
||||||
|
client.Conn.SetWriteDeadline(time.Now().Add(writeWait))
|
||||||
|
client.Conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
|
||||||
|
|
||||||
|
time.Sleep(closeWait)
|
||||||
|
|
||||||
client.Conn.Close()
|
client.Conn.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
Loop:
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case message, ok := <-client.Send:
|
case message, ok := <-client.Send:
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
break Loop
|
||||||
}
|
}
|
||||||
|
|
||||||
if client.Conn == nil {
|
if client.Conn == nil {
|
||||||
return
|
break Loop
|
||||||
|
}
|
||||||
|
|
||||||
|
if message.Command == MessageCommandConfig {
|
||||||
|
timer.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
b, err := message.ToJson()
|
b, err := message.ToJson()
|
||||||
|
|
@ -104,18 +136,16 @@ func (client *Client) Init(controller *Controller, conn *websocket.Conn) error {
|
||||||
log.Println(fmt.Errorf("client.message.tojson: %v", err))
|
log.Println(fmt.Errorf("client.message.tojson: %v", err))
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
client.Conn.SetWriteDeadline(time.Now().Add(30 * time.Second))
|
client.Conn.SetWriteDeadline(time.Now().Add(writeWait))
|
||||||
|
|
||||||
if err = client.Conn.WriteMessage(websocket.TextMessage, b); err != nil {
|
if err = client.Conn.WriteMessage(websocket.TextMessage, b); err != nil {
|
||||||
return
|
break Loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
client.Conn.SetWriteDeadline(time.Now().Add(30 * time.Second))
|
if err := client.Conn.WriteControl(websocket.PingMessage, []byte{}, time.Now().Add(writeWait)); err != nil {
|
||||||
|
break Loop
|
||||||
if err := client.Conn.WriteMessage(websocket.PingMessage, nil); err != nil {
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
|
|
@ -647,6 +648,15 @@ func (controller *Controller) Start() error {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
var timer *time.Timer
|
||||||
|
|
||||||
|
logClientsCount := func() {
|
||||||
|
if timer != nil {
|
||||||
|
timer.Stop()
|
||||||
|
}
|
||||||
|
timer = time.AfterFunc(time.Second, controller.LogClientsCount)
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case call := <-controller.Ingest:
|
case call := <-controller.Ingest:
|
||||||
|
|
@ -654,13 +664,13 @@ func (controller *Controller) Start() error {
|
||||||
|
|
||||||
case client := <-controller.Register:
|
case client := <-controller.Register:
|
||||||
controller.Clients[client] = true
|
controller.Clients[client] = true
|
||||||
controller.LogClientsCount()
|
logClientsCount()
|
||||||
|
|
||||||
case client := <-controller.Unregister:
|
case client := <-controller.Unregister:
|
||||||
if _, ok := controller.Clients[client]; ok {
|
if _, ok := controller.Clients[client]; ok {
|
||||||
delete(controller.Clients, client)
|
delete(controller.Clients, client)
|
||||||
close(client.Send)
|
close(client.Send)
|
||||||
controller.LogClientsCount()
|
logClientsCount()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ func NewDatabase(config *Config) *Database {
|
||||||
case DbTypeSqlite:
|
case DbTypeSqlite:
|
||||||
database.DateTimeFormat = "2006-01-02 15:04:05.000 -07:00"
|
database.DateTimeFormat = "2006-01-02 15:04:05.000 -07:00"
|
||||||
|
|
||||||
dsn := fmt.Sprintf("file:%s", config.GetDbFilePath())
|
dsn := fmt.Sprintf("file:%s?_pragma=busy_timeout%%3d10000", config.GetDbFilePath())
|
||||||
|
|
||||||
if database.Sql, err = sql.Open("sqlite", dsn); err != nil {
|
if database.Sql, err = sql.Open("sqlite", dsn); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
@ -61,10 +61,9 @@ func NewDatabase(config *Config) *Database {
|
||||||
log.Fatalf("unknown database type %s\n", config.DbType)
|
log.Fatalf("unknown database type %s\n", config.DbType)
|
||||||
}
|
}
|
||||||
|
|
||||||
database.Sql.SetConnMaxIdleTime(time.Second * 5)
|
database.Sql.SetConnMaxLifetime(5 * time.Minute)
|
||||||
database.Sql.SetConnMaxLifetime(0)
|
database.Sql.SetMaxIdleConns(25)
|
||||||
database.Sql.SetMaxIdleConns(64)
|
database.Sql.SetMaxOpenConns(25)
|
||||||
database.Sql.SetMaxOpenConns(64)
|
|
||||||
|
|
||||||
if err = database.migrate(); err != nil {
|
if err = database.migrate(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ require (
|
||||||
github.com/google/uuid v1.3.0
|
github.com/google/uuid v1.3.0
|
||||||
github.com/gorilla/websocket v1.4.2
|
github.com/gorilla/websocket v1.4.2
|
||||||
github.com/kardianos/service v1.2.1
|
github.com/kardianos/service v1.2.1
|
||||||
golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2
|
golang.org/x/crypto v0.0.0-20220213190939-1e6e3497d506
|
||||||
gopkg.in/ini.v1 v1.66.4
|
gopkg.in/ini.v1 v1.66.4
|
||||||
modernc.org/sqlite v1.14.6
|
modernc.org/sqlite v1.14.6
|
||||||
)
|
)
|
||||||
|
|
@ -21,7 +21,7 @@ require (
|
||||||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
|
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
|
||||||
github.com/stretchr/testify v1.7.0 // indirect
|
github.com/stretchr/testify v1.7.0 // indirect
|
||||||
golang.org/x/mod v0.5.1 // indirect
|
golang.org/x/mod v0.5.1 // indirect
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect
|
||||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
|
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect
|
||||||
golang.org/x/text v0.3.7 // indirect
|
golang.org/x/text v0.3.7 // indirect
|
||||||
golang.org/x/tools v0.1.9 // indirect
|
golang.org/x/tools v0.1.9 // indirect
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2 h1:XdAboW3BNMv9ocSCOk/u1MFioZGzCNkiJZ19v9Oe3Ig=
|
golang.org/x/crypto v0.0.0-20220213190939-1e6e3497d506 h1:EuGTJDfeg/PGZJp3gq1K+14eSLFTsrj1eg8KQuiUyKg=
|
||||||
golang.org/x/crypto v0.0.0-20220210151621-f4118a5b28e2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220213190939-1e6e3497d506/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
|
golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38=
|
||||||
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||||
|
|
@ -46,9 +46,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
|
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
|
@ -65,11 +64,9 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
|
golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c=
|
||||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
|
|
||||||
133
server/main.go
133
server/main.go
|
|
@ -16,13 +16,16 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"mime"
|
"mime"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"golang.org/x/crypto/acme/autocert"
|
"golang.org/x/crypto/acme/autocert"
|
||||||
|
|
@ -101,76 +104,66 @@ func main() {
|
||||||
sslAddr = defaultAddr
|
sslAddr = defaultAddr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
http.HandleFunc("/api/admin/config", controller.Admin.ConfigHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/api/admin/login", controller.Admin.LoginHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/api/admin/logout", controller.Admin.LogoutHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/api/admin/logs", controller.Admin.LogsHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/api/admin/password", controller.Admin.PasswordHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/api/call-upload", controller.Api.CallUploadHandler)
|
||||||
|
|
||||||
|
http.HandleFunc("/api/trunk-recorder-call-upload", controller.Api.TrunkRecorderCallUploadHandler)
|
||||||
|
|
||||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
url := r.URL.Path[1:]
|
url := r.URL.Path[1:]
|
||||||
|
|
||||||
switch url {
|
if strings.EqualFold(r.Header.Get("upgrade"), "websocket") {
|
||||||
case AdminUrlConfig:
|
upgrader := websocket.Upgrader{
|
||||||
controller.Admin.ConfigHandler(w, r)
|
CheckOrigin: func(r *http.Request) bool {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
case AdminUrlLogin:
|
conn, err := upgrader.Upgrade(w, r, nil)
|
||||||
controller.Admin.LoginHandler(w, r)
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
case AdminUrlLogout:
|
client := &Client{}
|
||||||
controller.Admin.LogoutHandler(w, r)
|
if err = client.Init(controller, conn); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
case AdminUrlLogs:
|
} else {
|
||||||
controller.Admin.LogsHandler(w, r)
|
if url == "" {
|
||||||
|
url = "index.html"
|
||||||
|
}
|
||||||
|
|
||||||
case AdminUrlPassword:
|
if b, err := webapp.ReadFile(path.Join("webapp", url)); err == nil {
|
||||||
controller.Admin.PasswordHandler(w, r)
|
var t string
|
||||||
|
switch path.Ext(url) {
|
||||||
case ApiUrlCallUpload:
|
case ".js":
|
||||||
controller.Api.CallUploadHandler(w, r)
|
t = "text/javascript" // see https://github.com/golang/go/issues/32350
|
||||||
|
default:
|
||||||
case ApiUrlTrunkRecorderCallUpload:
|
t = mime.TypeByExtension(path.Ext(url))
|
||||||
controller.Api.TrunkRecorderCallUploadHandler(w, r)
|
|
||||||
|
|
||||||
default:
|
|
||||||
if strings.EqualFold(r.Header.Get("upgrade"), "websocket") {
|
|
||||||
upgrader := websocket.Upgrader{
|
|
||||||
CheckOrigin: func(r *http.Request) bool {
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
w.Header().Set("Content-Type", t)
|
||||||
|
w.Write(b)
|
||||||
|
|
||||||
conn, err := upgrader.Upgrade(w, r, nil)
|
} else if url[:len(url)-1] != "/" {
|
||||||
if err != nil {
|
if b, err := webapp.ReadFile("webapp/index.html"); err == nil {
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
client := &Client{}
|
|
||||||
if err = client.Init(controller, conn); err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if url == "" {
|
|
||||||
url = "index.html"
|
|
||||||
}
|
|
||||||
|
|
||||||
if b, err := webapp.ReadFile(path.Join("webapp", url)); err == nil {
|
|
||||||
var t string
|
|
||||||
switch path.Ext(url) {
|
|
||||||
case ".js":
|
|
||||||
t = "text/javascript" // see https://github.com/golang/go/issues/32350
|
|
||||||
default:
|
|
||||||
t = mime.TypeByExtension(path.Ext(url))
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", t)
|
|
||||||
w.Write(b)
|
w.Write(b)
|
||||||
|
|
||||||
} else if url[:len(url)-1] != "/" {
|
|
||||||
if b, err := webapp.ReadFile("webapp/index.html"); err == nil {
|
|
||||||
w.Write(b)
|
|
||||||
|
|
||||||
} else {
|
|
||||||
w.WriteHeader(http.StatusNotFound)
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
w.WriteHeader(http.StatusNotFound)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -192,6 +185,21 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newServer := func(addr string, tlsConfig *tls.Config) *http.Server {
|
||||||
|
s := &http.Server{
|
||||||
|
Addr: addr,
|
||||||
|
TLSConfig: tlsConfig,
|
||||||
|
ReadTimeout: 60 * time.Second,
|
||||||
|
WriteTimeout: 60 * time.Second,
|
||||||
|
IdleTimeout: 120 * time.Second,
|
||||||
|
ErrorLog: log.New(ioutil.Discard, "", 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
s.SetKeepAlivesEnabled(true)
|
||||||
|
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
if len(controller.Config.SslCertFile) > 0 && len(controller.Config.SslKeyFile) > 0 {
|
if len(controller.Config.SslCertFile) > 0 && len(controller.Config.SslKeyFile) > 0 {
|
||||||
go func() {
|
go func() {
|
||||||
sslPrintInfo()
|
sslPrintInfo()
|
||||||
|
|
@ -199,7 +207,9 @@ func main() {
|
||||||
sslCert := controller.Config.GetSslCertFilePath()
|
sslCert := controller.Config.GetSslCertFilePath()
|
||||||
sslKey := controller.Config.GetSslKeyFilePath()
|
sslKey := controller.Config.GetSslKeyFilePath()
|
||||||
|
|
||||||
if err := http.ListenAndServeTLS(fmt.Sprintf("%s:%s", sslAddr, sslPort), sslCert, sslKey, nil); err != nil {
|
server := newServer(fmt.Sprintf("%s:%s", sslAddr, sslPort), nil)
|
||||||
|
|
||||||
|
if err := server.ListenAndServeTLS(sslCert, sslKey); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
@ -214,10 +224,7 @@ func main() {
|
||||||
HostPolicy: autocert.HostWhitelist(controller.Config.SslAutoCert),
|
HostPolicy: autocert.HostWhitelist(controller.Config.SslAutoCert),
|
||||||
}
|
}
|
||||||
|
|
||||||
server := &http.Server{
|
server := newServer(fmt.Sprintf("%s:%s", sslAddr, sslPort), manager.TLSConfig())
|
||||||
Addr: fmt.Sprintf("%s:%s", sslAddr, sslPort),
|
|
||||||
TLSConfig: manager.TLSConfig(),
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := server.ListenAndServeTLS("", ""); err != nil {
|
if err := server.ListenAndServeTLS("", ""); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
@ -231,7 +238,9 @@ func main() {
|
||||||
log.Printf("admin interface at http://%s:%s/admin", hostname, port)
|
log.Printf("admin interface at http://%s:%s/admin", hostname, port)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := http.ListenAndServe(fmt.Sprintf("%s:%s", addr, port), nil); err != nil {
|
server := newServer(fmt.Sprintf("%s:%s", addr, port), nil)
|
||||||
|
|
||||||
|
if err := server.ListenAndServe(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,4 +15,4 @@
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
const Version = "6.1.12"
|
const Version = "6.1.13"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue