From a46ae01d9ce7a40db6d6bd6960d88ef615c3d391 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Fri, 13 Oct 2023 11:50:11 -0400 Subject: [PATCH 1/4] add support for JAMBONES_HTTP_PROXY_IP and JAMBONES_HTTP_PROXY_PORT for azure tts --- lib/synth-audio.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/synth-audio.js b/lib/synth-audio.js index f07e14b..72de1c1 100644 --- a/lib/synth-audio.js +++ b/lib/synth-audio.js @@ -400,6 +400,12 @@ const synthMicrosoft = async(logger, { speechConfig.speechSynthesisOutputFormat = trimSilence ? SpeechSynthesisOutputFormat.Raw8Khz16BitMonoPcm : SpeechSynthesisOutputFormat.Audio16Khz32KBitRateMonoMp3; + + if (process.env.JAMBONES_HTTP_PROXY_IP && process.env.JAMBONES_HTTP_PROXY_PORT) { + logger.debug( + `synthMicrosoft: using proxy ${process.env.JAMBONES_HTTP_PROXY_IP}:${process.env.JAMBONES_HTTP_PROXY_PORT}`); + speechConfig.setProxy(process.env.JAMBONES_HTTP_PROXY_IP, process.env.JAMBONES_HTTP_PROXY_PORT); + } const synthesizer = new SpeechSynthesizer(speechConfig); if (content.startsWith('')) { From 95c29ce105de415b6a7318ae08312cd671091521 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Fri, 13 Oct 2023 12:07:03 -0400 Subject: [PATCH 2/4] squid config file so we can test azure proxy setting --- test/squid.conf | 85 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 test/squid.conf diff --git a/test/squid.conf b/test/squid.conf new file mode 100644 index 0000000..c144737 --- /dev/null +++ b/test/squid.conf @@ -0,0 +1,85 @@ +# +# Recommended minimum configuration: +# + +# Example rule allowing access from your local networks. +# Adapt to list your (internal) IP networks from where browsing +# should be allowed +acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) +acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) +acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) +acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines +acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) +acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) +acl localnet src fc00::/7 # RFC 4193 local private network range +acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines + +acl SSL_ports port 443 +acl Safe_ports port 80 # http +acl Safe_ports port 21 # ftp +acl Safe_ports port 443 # https +acl Safe_ports port 70 # gopher +acl Safe_ports port 210 # wais +acl Safe_ports port 1025-65535 # unregistered ports +acl Safe_ports port 280 # http-mgmt +acl Safe_ports port 488 # gss-http +acl Safe_ports port 591 # filemaker +acl Safe_ports port 777 # multiling http + +# +# Recommended minimum Access Permission configuration: +# +# Deny requests to certain unsafe ports +http_access deny !Safe_ports + +# Deny CONNECT to other than secure SSL ports +http_access allow CONNECT !SSL_ports + +# Only allow cachemgr access from localhost +http_access allow localhost manager +http_access deny manager + +# This default configuration only allows localhost requests because a more +# permissive Squid installation could introduce new attack vectors into the +# network by proxying external TCP connections to unprotected services. +http_access allow localhost + +# The two deny rules below are unnecessary in this default configuration +# because they are followed by a "deny all" rule. However, they may become +# critically important when you start allowing external requests below them. + +# Protect web applications running on the same server as Squid. They often +# assume that only local users can access them at "localhost" ports. +http_access deny to_localhost + +# Protect cloud servers that provide local users with sensitive info about +# their server via certain well-known link-local (a.k.a. APIPA) addresses. +http_access deny to_linklocal + +# +# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS +# + +# For example, to allow access from your local networks, you may uncomment the +# following rule (and/or add rules that match your definition of "local"): +# http_access allow localnet + +# And finally deny all other access to this proxy +http_access deny all + +# Squid normally listens to port 3128 +http_port 3128 + +# Uncomment and adjust the following to add a disk cache directory. +#cache_dir ufs /usr/local/var/cache/squid 100 16 256 + +# Leave coredumps in the first cache dir +coredump_dir /usr/local/var/cache/squid + +# +# Add any of your own refresh_pattern entries above these. +# +refresh_pattern ^ftp: 1440 20% 10080 +refresh_pattern ^gopher: 1440 0% 1440 +refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 +refresh_pattern . 0 20% 4320 \ No newline at end of file From 7b1d226403eee8a7b5aa7e5227f7ff56d024527a Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Fri, 13 Oct 2023 12:09:11 -0400 Subject: [PATCH 3/4] test proxy using azure --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f708c9..8acdaf2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,6 +14,9 @@ jobs: node-version: lts/* - run: npm install - run: npm run jslint + - run: sudo apt update && sudo apt install -y squid + - run: sudo cp test/squid.conf /etc/squid/squid.conf + - run: sudo systemctl start squid - run: npm test env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} @@ -29,3 +32,5 @@ jobs: ELEVENLABS_API_KEY: ${{ secrets.ELEVENLABS_API_KEY }} ELEVENLABS_VOICE_ID: ${{ secrets.ELEVENLABS_VOICE_ID }} ELEVENLABS_MODEL_ID: ${{ secrets.ELEVENLABS_MODEL_ID }} + JAMBONES_HTTP_PROXY_IP: 127.0.0.1 + JAMBONES_HTTP_PROXY_PORT: 3128 From bbff7963fd1e6226786d42a0d61be5c691d8f8c0 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Fri, 13 Oct 2023 12:12:11 -0400 Subject: [PATCH 4/4] make test explicit --- test/synth.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/synth.js b/test/synth.js index 7032572..9160373 100644 --- a/test/synth.js +++ b/test/synth.js @@ -182,7 +182,9 @@ test('Azure speech synth tests', async(t) => { text: longText, }); t.ok(!opts.servedFromCache, `successfully synthesized microsoft audio to ${opts.filePath}`); - + if (process.env.JAMBONES_HTTP_PROXY_IP && process.env.JAMBONES_HTTP_PROXY_PORT) { + t.pass('successfully used proxy to reach microsoft tts service'); + } opts = await synthAudio(stats, { vendor: 'microsoft',