Compare commits
No commits in common. "develop" and "LH-284-update-and-centralize-diagrams-for-video-calls" have entirely different histories.
develop
...
LH-284-upd
10
.env
10
.env
@ -1,11 +1,7 @@
|
|||||||
PORT=3000
|
PORT=3000
|
||||||
IP=0.0.0.0 # Listening IPv4 or IPv6.
|
IP=0.0.0.0 # Listening IPv4 or IPv6.
|
||||||
ANNOUNCED_IP=192.168.1.199 # Announced IPv4 or IPv6 (useful when running mediasoup behind NAT with private IP).
|
ANNOUNCED_IP=185.8.154.190 # Announced IPv4 or IPv6 (useful when running mediasoup behind NAT with private IP).
|
||||||
RTC_MIN_PORT=40000
|
RTC_MIN_PORT=2000
|
||||||
RTC_MAX_PORT=49999
|
RTC_MAX_PORT=2020
|
||||||
SERVER_CERT="./server/ssl/cert.pem"
|
SERVER_CERT="./server/ssl/cert.pem"
|
||||||
SERVER_KEY="./server/ssl/key.pem"
|
SERVER_KEY="./server/ssl/key.pem"
|
||||||
ENABLE_UDP=true
|
|
||||||
ENABLE_TCP=true
|
|
||||||
PREFER_UDP=true
|
|
||||||
PREFER_TCP=false
|
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,2 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
/dist
|
/dist
|
||||||
.idea
|
|
@ -5,7 +5,7 @@ WORKDIR /app
|
|||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y build-essential pip net-tools iputils-ping iproute2 curl
|
apt-get install -y build-essential pip net-tools iputils-ping iproute2 curl
|
||||||
|
|
||||||
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
|
||||||
RUN apt-get install -y nodejs
|
RUN apt-get install -y nodejs
|
||||||
|
|
||||||
COPY . /app/
|
COPY . /app/
|
||||||
|
42
README.md
42
README.md
@ -6,54 +6,36 @@
|
|||||||
1. Go to `/server/ssl`
|
1. Go to `/server/ssl`
|
||||||
2. Execute `openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem`
|
2. Execute `openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem`
|
||||||
|
|
||||||
|
|
||||||
### Development
|
### Development
|
||||||
|
|
||||||
##### To start in development mode you must:
|
##### To start in development mode you must:
|
||||||
|
|
||||||
1. Install the dependencies `npm install`.
|
1. Install the dependencies `npm install`.
|
||||||
|
2. Run the `npm start:dev` command to start the server in dev mode.
|
||||||
|
(Any change will trigger a refresh of the server)
|
||||||
|
|
||||||
2. Go to the `linx-devops/scaling-tools/private-system-truste-cert` project and generate a new server certificate and key:
|
|
||||||
|
|
||||||
sh create_certificate_for_domain.sh 192.168.1.110 #local IP
|
|
||||||
# generates files
|
|
||||||
nginx-selfsigned.crt
|
|
||||||
device.key
|
|
||||||
|
|
||||||
3. You need to update the Video Server in the provisioning to point to your private IP. ex: https://192.168.1.199:3000
|
|
||||||
|
|
||||||
4. The generated files must be moved to server/ssl and renamed as follows:
|
|
||||||
|
|
||||||
cp device.key {mediasoup_project}/server/ssl/key.pem
|
|
||||||
cp nginx-selfsigned.crt {mediosup_project}/server/ssl/cert.pem
|
|
||||||
|
|
||||||
5. Go to https://dev.linx.safemobile.com/dispatcher/resources/help/LINXHelp.html#safemobile-certificate-import and import the certificate for your system type
|
|
||||||
|
|
||||||
6. The ANNOUNCED IP in .env must be configured to use the same private IP used in generating the certificate.
|
|
||||||
|
|
||||||
7. Run the `npm start:dev` command to start the server in dev mode.
|
|
||||||
(Any change will trigger a refresh of the server)
|
|
||||||
|
|
||||||
### Production
|
### Production
|
||||||
|
|
||||||
##### To start in production mode you must:
|
##### To start in production mode you must:
|
||||||
1. Install the dependencies `npm install`.
|
1. Install the dependencies `npm install`.
|
||||||
2. Run the `npm start:prod` command to start the server in production mode.
|
2. Run the `npm start:prod` command to start the server in production mode.
|
||||||
(To connect to the terminal, use `pm2 log video-server`)
|
(To connect to the terminal, use `pm2 log video-server`)
|
||||||
|
|
||||||
|
|
||||||
### Web client
|
### Web client
|
||||||
|
|
||||||
- The server will start by default on port 3000, and the ssl certificates will have to be configured
|
- The server will start by default on port 3000, and the ssl certificates will have to be configured
|
||||||
- The web client can be accessed using the /sfu path
|
- The web client can be accessed using the /sfu path
|
||||||
ex: https://HOST/sfu/?assetId=1&&accountId=1&producer=true&dest_asset_id=75&assetName=Adi
|
ex: https://HOST/sfu/?assetId=1&&accountId=1&producer=true&dest_asset_id=75&assetName=Adi
|
||||||
assetId = asset id of the unit on which you are doing the test
|
assetId = asset id of the unit on which you are doing the test
|
||||||
accountId = account id of the unit on which you are doing the test
|
accountId = account id of the unit on which you are doing the test
|
||||||
producer = it will always be true because you are the producer
|
producer = it will always be true because you are the producer
|
||||||
(it's possible to put false, but then you have to have another client with producer true)
|
(it's possible to put false, but then you have to have another client with producer true)
|
||||||
assetName = asset name of the unit on which you are doing the test
|
assetName = asset name of the unit on which you are doing the test
|
||||||
dest_asset_id= the addressee with whom the call is made
|
dest_asset_id= the addressee with whom the call is made
|
||||||
- To make a call using this client, you need a microphone and permission to use it
|
- To make a call using this client, you need a microphone and permission to use it
|
||||||
- For any changes related to the client, the command `npm run watch' will have to be used to generate the bundle.js used by the web client
|
- For any changes related to the client, the command `npm run watch' will have to be used to generate the bundle.js used by the web client
|
||||||
|
|
||||||
### Demo project
|
### Demo project
|
||||||
The demo project used initially and then modified for our needs `https://github.com/jamalag/mediasoup2`
|
The demo project used initially and then modified for our needs `https://github.com/jamalag/mediasoup2`
|
||||||
|
42
app.js
42
app.js
@ -12,11 +12,6 @@ try {
|
|||||||
console.log('https support is disabled!');
|
console.log('https support is disabled!');
|
||||||
}
|
}
|
||||||
const mediasoup = require('mediasoup');
|
const mediasoup = require('mediasoup');
|
||||||
const isUdpEnabled = process.env.ENABLE_UDP === 'true';
|
|
||||||
const isTcpEnabled = process.env.ENABLE_TCP === 'true';
|
|
||||||
const isUdpPreferred = process.env.PREFER_UDP === 'true';
|
|
||||||
const isTcpPreferred = process.env.PREFER_TCP === 'true';
|
|
||||||
let currentConnectionType = isUdpPreferred ? 'udp' : 'tcp';
|
|
||||||
|
|
||||||
let worker;
|
let worker;
|
||||||
/**
|
/**
|
||||||
@ -42,7 +37,7 @@ let videoCalls = {};
|
|||||||
let socketDetails = {};
|
let socketDetails = {};
|
||||||
|
|
||||||
app.get('/', (_req, res) => {
|
app.get('/', (_req, res) => {
|
||||||
res.send('OK');
|
res.send('Hello from mediasoup app!');
|
||||||
});
|
});
|
||||||
|
|
||||||
app.use('/sfu', express.static(path.join(__dirname, 'public')));
|
app.use('/sfu', express.static(path.join(__dirname, 'public')));
|
||||||
@ -542,15 +537,6 @@ const isInitiator = (callId, socketId) => {
|
|||||||
return videoCalls[callId]?.initiatorSocket?.id === socketId;
|
return videoCalls[callId]?.initiatorSocket?.id === socketId;
|
||||||
};
|
};
|
||||||
|
|
||||||
const emitToParticipants = (callId, event, message) => {
|
|
||||||
try {
|
|
||||||
videoCalls[callId].receiverSocket.emit(event, message);
|
|
||||||
videoCalls[callId].initiatorSocket.emit(event, message);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`[emitToParticipants] | ERROR | callId: ${callId} | error: ${error.message}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
- Called from at event 'createWebRtcTransport' and assigned to the consumer or producer transport
|
- Called from at event 'createWebRtcTransport' and assigned to the consumer or producer transport
|
||||||
- It will return parameters, these are required for the client to create the RecvTransport
|
- It will return parameters, these are required for the client to create the RecvTransport
|
||||||
@ -569,34 +555,14 @@ const createWebRtcTransportLayer = async (callId, callback) => {
|
|||||||
announcedIp: process.env.ANNOUNCED_IP, // Announced IPv4 or IPv6 (useful when running mediasoup behind NAT with private IP).
|
announcedIp: process.env.ANNOUNCED_IP, // Announced IPv4 or IPv6 (useful when running mediasoup behind NAT with private IP).
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
enableUdp: isUdpEnabled,
|
enableUdp: true,
|
||||||
enableTcp: isTcpEnabled,
|
enableTcp: true,
|
||||||
preferUdp: isUdpPreferred,
|
preferUdp: true,
|
||||||
preferTcp: isTcpPreferred,
|
|
||||||
iceConsentTimeout: 3
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// https://mediasoup.org/documentation/v3/mediasoup/api/#router-createWebRtcTransport
|
// https://mediasoup.org/documentation/v3/mediasoup/api/#router-createWebRtcTransport
|
||||||
let transport = await videoCalls[callId].router.createWebRtcTransport(webRtcTransport_options);
|
let transport = await videoCalls[callId].router.createWebRtcTransport(webRtcTransport_options);
|
||||||
|
|
||||||
// `iceselectedtuplechange`: Fires when ICE switches transport (e.g., UDP → TCP).
|
|
||||||
transport.on('iceselectedtuplechange', (selectedTuple) => {
|
|
||||||
const { protocol } = selectedTuple;
|
|
||||||
if (currentConnectionType !== protocol) {
|
|
||||||
console.warn(`⚠️ ${currentConnectionType.toUpperCase()} blocked! Switching to ${protocol.toUpperCase()} for callId: ${callId}`);
|
|
||||||
currentConnectionType = protocol;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// `icestatechange`: Fires when ICE connection state changes (e.g., new, connected, failed).
|
|
||||||
transport.on('icestatechange', (iceState) => {
|
|
||||||
console.log(`[ICE STATE CHANGE] callId: ${callId} | State: ${iceState}`);
|
|
||||||
if (iceState === 'failed' || iceState === 'disconnected') {
|
|
||||||
console.warn(`⚠️ ICE failure detected for callId: ${callId}! Possible UDP blockage.`);
|
|
||||||
emitToParticipants(callId, 'connection-failed', { callId });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Handler for when DTLS(Datagram Transport Layer Security) changes
|
// Handler for when DTLS(Datagram Transport Layer Security) changes
|
||||||
transport.on('dtlsstatechange', (dtlsState) => {
|
transport.on('dtlsstatechange', (dtlsState) => {
|
||||||
console.log(`transport | dtlsstatechange | calldId ${callId} | dtlsState ${dtlsState}`);
|
console.log(`transport | dtlsstatechange | calldId ${callId} | dtlsState ${dtlsState}`);
|
||||||
|
2
build.sh
2
build.sh
@ -56,7 +56,7 @@ fi
|
|||||||
## PROJECT NEEDS
|
## PROJECT NEEDS
|
||||||
echo "Building app... from $(git rev-parse --abbrev-ref HEAD)"
|
echo "Building app... from $(git rev-parse --abbrev-ref HEAD)"
|
||||||
#npm run-script build
|
#npm run-script build
|
||||||
cp -r {.env,app.js,package.json,server,public,doc,Dockerfile,tsconfig.json,.dockerignore} dist/
|
cp -r {.env,app.js,package.json,server,public,doc,Dockerfile} dist/
|
||||||
#cp -r ./* dist/
|
#cp -r ./* dist/
|
||||||
|
|
||||||
# Generate Git log
|
# Generate Git log
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 968 KiB |
Binary file not shown.
Before Width: | Height: | Size: 215 KiB |
1150
package-lock.json
generated
1150
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -16,7 +16,7 @@
|
|||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"dotenv": "^16.0.1",
|
"dotenv": "^16.0.1",
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.1",
|
||||||
"mediasoup": "^3.15.5",
|
"mediasoup": "^3.10.4",
|
||||||
"mediasoup-client": "^3.6.54",
|
"mediasoup-client": "^3.6.54",
|
||||||
"parcel": "^2.7.0",
|
"parcel": "^2.7.0",
|
||||||
"socket.io": "^2.0.3",
|
"socket.io": "^2.0.3",
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDrzCCApegAwIBAgIUfpwrZVz3ogv3YeXbtL5wqIGEXGMwDQYJKoZIhvcNAQEL
|
|
||||||
BQAwZzELMAkGA1UEBhMCUk8xDTALBgNVBAgMBEFsYmExDTALBgNVBAcMBEFsYmEx
|
|
||||||
DDAKBgNVBAoMA0FBQTEQMA4GA1UEAwwHQUFBIENPTTEaMBgGCSqGSIb3DQEJARYL
|
|
||||||
YXNkQGFzZC5jb20wHhcNMjUwMjE4MTAwMDM5WhcNMzUwMjE2MTAwMDM5WjBnMQsw
|
|
||||||
CQYDVQQGEwJSTzENMAsGA1UECAwEQWxiYTENMAsGA1UEBwwEQWxiYTEMMAoGA1UE
|
|
||||||
CgwDQUFBMRAwDgYDVQQDDAdBQUEgQ09NMRowGAYJKoZIhvcNAQkBFgthc2RAYXNk
|
|
||||||
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL7itjfKeuH5+f7c
|
|
||||||
43gAI+ppmxiwvzqhHLmkmlQrVbSC+P93yGekHIuXpbM3sqGRnvSJL3c9SIEdtVVj
|
|
||||||
yfJCs6KIsujxtiGn3hgQD01B6LqzFjSKnfYSGz8XDsjFW8cnpD1yRi3J7DhUjleM
|
|
||||||
bhQ0ileu9joS2OOhf84mtOkXJyY8q9xJH4ypimogcR98eM6ewnrb5Vhjo8YDaix2
|
|
||||||
6rceNmO/g4biknhXnBGc58/MnyAHtwzZxsu/k1IYtZuBYMPcAo7CQEX4XxXqQpaF
|
|
||||||
zaaoEUYB8KzVDlsr+i5SJzLtrHkyiuJijHq6YyOFkTwUULuJ7Wz0YL1redDCZV4i
|
|
||||||
EIVzBAcCAwEAAaNTMFEwHQYDVR0OBBYEFErSYY3J7ukx2KaRcHmazbMlKNBlMB8G
|
|
||||||
A1UdIwQYMBaAFErSYY3J7ukx2KaRcHmazbMlKNBlMA8GA1UdEwEB/wQFMAMBAf8w
|
|
||||||
DQYJKoZIhvcNAQELBQADggEBAC3TQY6jMGeHIEDEYS7sUbNZxe+azdDlx0DdwgLK
|
|
||||||
t+Zo2O40F55nVTZOUfypjCnLJnZitekptl5P6CPGrp2VX4/C0Ok4swwr+xamsjWt
|
|
||||||
9RR9yG0IpVfnCEziT4dpBPhNf/6ilgdpnkJUWY3LO3BJhM4Js7rfP4D9NgEYHeSR
|
|
||||||
YDN3TuEbi//bp43bhDh8EBQtDx9lPGOSUiKd3I7KfRttsxvLG2wBz3M5HXRc++6p
|
|
||||||
pHE+64YfkwV5xZDvU2M/EqePLp7DdQ9g+vQ68FxI6jMCegBoz+ueyE9RhZOk/cUh
|
|
||||||
uIXwIdFowjkUXgNncuGrR1gWf1mJVCHOsdnGZf3VSykGdWg=
|
|
||||||
-----END CERTIFICATE-----
|
|
@ -1,24 +1,25 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIID9TCCAt2gAwIBAgIJAJZHglUuIBjtMA0GCSqGSIb3DQEBCwUAMIGZMQswCQYD
|
MIIEJTCCAw2gAwIBAgIURHg2am+RarQxIVY1f3CicUQgRowwDQYJKoZIhvcNAQEL
|
||||||
VQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxGDAWBgNVBAcMD1JvbGxpbmcgTWVh
|
BQAwgaExCzAJBgNVBAYTAlJPMRIwEAYDVQQIDAlCdWNoYXJlc3QxEjAQBgNVBAcM
|
||||||
ZGl3czEYMBYGA1UECgwPU2FmZW1vYmlsZSBMTEMuMQ0wCwYDVQQLDARMSU5YMQ0w
|
CUJ1Y2hhcmVzdDETMBEGA1UECgwKU2FmZW1vYmlsZTETMBEGA1UECwwKU2FmZW1v
|
||||||
CwYDVQQDDARMSU5YMSUwIwYJKoZIhvcNAQkBFhZzdXBwb3J0QHNhZmVtb2JpbGUu
|
YmlsZTETMBEGA1UEAwwKU2FmZW1vYmlsZTErMCkGCSqGSIb3DQEJARYcbWloYWku
|
||||||
Y29tMB4XDTI1MDIyNDEwMTAzNFoXDTM1MDIyMjEwMTAzNFowXjELMAkGA1UEBhMC
|
Ym96aWVydUBzYWZlbW9iaWxlLmNvbTAeFw0yMjA4MDEyMjA0MjFaFw0zMjA3Mjky
|
||||||
VVMxETAPBgNVBAgMCElsbGlub2lzMRgwFgYDVQQHDA9Sb2xsaW5nIE1lYWRpd3Mx
|
MjA0MjFaMIGhMQswCQYDVQQGEwJSTzESMBAGA1UECAwJQnVjaGFyZXN0MRIwEAYD
|
||||||
EzARBgNVBAoMClNhZmVtb2JpbGUxDTALBgNVBAMMBExJTlgwggEiMA0GCSqGSIb3
|
VQQHDAlCdWNoYXJlc3QxEzARBgNVBAoMClNhZmVtb2JpbGUxEzARBgNVBAsMClNh
|
||||||
DQEBAQUAA4IBDwAwggEKAoIBAQDEd8LMvdkD4CyZkwVYh4V/RIBMH8d9jK1Yvozd
|
ZmVtb2JpbGUxEzARBgNVBAMMClNhZmVtb2JpbGUxKzApBgkqhkiG9w0BCQEWHG1p
|
||||||
0kPSGrC+ZXemmF7qHAD5g8RDkg1odkVuZa+jj0KlKHKtReF0p9OB/J6fNavlD7mM
|
aGFpLmJvemllcnVAc2FmZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||||
UiAtEpEgoKx3VlhrYEtIoFk+EJWaN1WObhYNfPtEw8Ncfww1cyDNmOnsifkLg+yh
|
DwAwggEKAoIBAQCSEk80aBAbmWtPBLcTjFLbvVmxuzDgzrjH7h2Hg/ly8lE/o2nZ
|
||||||
+aNxXzrR3toRF7pxFehrTpMRxx4LiIN2z4vHCdelvu9yJspzRAWd5QSQ6eGr3OPY
|
1T2ESSuaQFsxw54ukqbj1ooQXF1DoIxSp+CiNzf/FTB6BaMkaG0ayE2Wnm2wkjKp
|
||||||
yn+9v4XfN0YgnWSbH8aJ24bysIB3vOtsULjOfNJivNcx+/gQ9yP4AFhycperiDcu
|
POnAzZgTabJoB/qeUlr9i4xiAyBhiQDk5KjdWYHxeZnSznqfIOPzAdw7ZJVYvqvT
|
||||||
GGTiw+fwk1y6e04XulQ65mgxGTXNHlnM2ZvDyOwDZqL89Uf3AgMBAAGjejB4MB8G
|
GciHnoina5TzPUbpnLcR2LvHcLxuSuWQ6dTz/sfdZRx8lkbR3qltUazmJX+yxJJr
|
||||||
A1UdIwQYMBaAFGQaM9lRXGKKghjag6SPD+uHK3K5MAkGA1UdEwQCMAAwCwYDVR0P
|
kagq2V3cfpfLM8DOzPPEzuKHM6sK6ZgTqbc4ti+ul7Q1V+e0v2xNDtuYHkbaOuyd
|
||||||
BAQDAgTwMB4GA1UdEQQXMBWHBMCoAceCDTE5Mi4xNjguMS4xOTkwHQYDVR0OBBYE
|
ucmaZ3R++0ryoWWan5OFWZIKjttKy/yq8MUrAgMBAAGjUzBRMB0GA1UdDgQWBBSM
|
||||||
FHNfBgu/Ixj2j6yDTiDluw6/i3cEMA0GCSqGSIb3DQEBCwUAA4IBAQAojT+cdzfU
|
nlDraef71C/filHpA7dDpwmB7zAfBgNVHSMEGDAWgBSMnlDraef71C/filHpA7dD
|
||||||
sVq/ODttG8wS23Du20W2iNdvlAwkgni0UgxTJQ12odtIH9WZAVS46G++t2so87Ki
|
pwmB7zAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBNySms9mXG
|
||||||
gp6OK25AWtsQ7oLFK2P6VpaVGH6FwRSODFTly7Wv+7US7NmB/DO215+rG7q7C7Ag
|
PVOmFAm9YjMjRY+cUpa0Gm6saxp9VOyrAg2KzdwG6LNGgauNsIra1ytM40NASspN
|
||||||
J6zrsQgLPR6M6rZRrOs9Hd12oX6zRgEaYnbIc/Z1DVPRmCDiQISE5M8LihIO4sOW
|
r+L49gUCmASUGOqeZCpJjkKAsGspQ4WQKKI6YW8h5dsSuud2qyQtm+w1RKDq+wih
|
||||||
gmDacLhM9lbuMvbHEkCNnOuAzdWRmvR06CyBXmu/9iusyWYvgwI6bHFAZRYCOTmB
|
A+B82xWXcFFd52gp6nerib4Pf9ATooOmBMCHFZwC+74sKCv7fXDlzLGdCII8lmI4
|
||||||
+poHSGAlTmivcbNhHyZjS63NafRU7sSuc0JDzWQAdkA1AclSokfC8dJC6fnKBujY
|
uq5eFrSS1NeT3iQCwGb9SHfyFkCliaEdpskqmWhonckN0tJVV118SvknV/h9oIsw
|
||||||
o2WFKJMFrFS3
|
uEMIib6YOBlrU+FInnpqpc8VuR4vv0Yro9XrvmurzLuN8k/lVVkr6NMzyNY9mbkF
|
||||||
|
9p/Sxd5yIeam
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC+4rY3ynrh+fn+
|
|
||||||
3ON4ACPqaZsYsL86oRy5pJpUK1W0gvj/d8hnpByLl6WzN7KhkZ70iS93PUiBHbVV
|
|
||||||
Y8nyQrOiiLLo8bYhp94YEA9NQei6sxY0ip32Ehs/Fw7IxVvHJ6Q9ckYtyew4VI5X
|
|
||||||
jG4UNIpXrvY6EtjjoX/OJrTpFycmPKvcSR+MqYpqIHEffHjOnsJ62+VYY6PGA2os
|
|
||||||
duq3HjZjv4OG4pJ4V5wRnOfPzJ8gB7cM2cbLv5NSGLWbgWDD3AKOwkBF+F8V6kKW
|
|
||||||
hc2mqBFGAfCs1Q5bK/ouUicy7ax5MoriYox6umMjhZE8FFC7ie1s9GC9a3nQwmVe
|
|
||||||
IhCFcwQHAgMBAAECggEAMJWSjGuwUCDoZNqC2PGsMoczjxq5aWpFXejL0P2AoGOv
|
|
||||||
jZJGwz5Nd6ge6BkWkbH3M8VQ+/fwotBVbYjrBwq8HvPNGaYf1bwctqIryt2qJw7a
|
|
||||||
6X+Yid986NdtD2PQIsXvsyYJP7FDuuimnBjlkaX3yi6BhDF026co2OcYJ7WZZM0e
|
|
||||||
nc6JR7wGFZM3Dw3ybFvGrK4k7/Iq2N6wqedzCOvDbLXUC16UtmRVIOuiuNm+THrl
|
|
||||||
BiD37AKwB/LZRcdSQ1HeiWlK42Zc+IikHPJhl0PACcJNFNB3u2rdP8maSu5aMLku
|
|
||||||
yHnKCz6w9C1vDKrI/iszW2QCky+mGBD9WKK2u6hxFQKBgQDtcfL8hMKj6Ki/dsqR
|
|
||||||
McGPs1rLgZFAH9axubUth0uLdsEQDZtkoJIzXt8RLS3exuHMKt+Ln6YAOEhKm8Cl
|
|
||||||
OqIg0E/8SNi7QryU9yfqFqcE2QBZL0QVtvYZeUuiHIOrpc0bmTdNvp8i7zWw/oz6
|
|
||||||
ymeJ6vpEWKDpOvUnfm79XJbh+wKBgQDNzVjUNfo5s6QNnZlJvwI3J2mAsfLMVQxp
|
|
||||||
++P41f+dUCoAsEPujxASthdDxRND9oIfsTodA+VkrlLhs1JyTe4PlPcfSl7D5QSV
|
|
||||||
ayXVHF9iLbGM8fWMf6zBTebdaw9GqY3KTOHBH+X+JOHPP9dI6a4l7Ok8tFE9ia8M
|
|
||||||
G8Ce7djUZQKBgDSfGDaWRXyFx0AHV4Ut/bOXD/whzsrjQ3VHrrtUTI2v18FzAoke
|
|
||||||
fMgdslngJVZFxSy2I6yRyPwrfPnr4pm7kMqs380NZ9q4Q4rP62yZcJJGdSlOrEwT
|
|
||||||
rB6hHv3iS9vydq4zGmqEYEghs0hyYVQDH0cVaDlVWvPVORdzka1co6OZAoGBAJHl
|
|
||||||
TV/DlExrqZVtcEnzeyKWchimDjYE5PQNeiPhsYBYYC50xvPLv91D8WI9x9aaXs0Q
|
|
||||||
2t3O8URawK74bS5TSL0LIdWw51WAeatjdkKKBqSXOBNvRGAB8vpmu4+kYgP6F2ae
|
|
||||||
8jvy3R06EErYO0qZPrfsJ7y9KAq0HMA8vGTuwJRxAoGBAMfWJLseheDXKUXndnR9
|
|
||||||
ovNA+spTTFECtoLwhWxwgoL3GYVqSA96RfnmdKHY4d5isQ1g/JN05Uo6bL7HKJCG
|
|
||||||
BwS9WCsa6fHhbJR31fP16UQNNknNSwTtUoeJavwarQ7MB5CT9Fz5HsaC4NGaQkve
|
|
||||||
86Barwb6tt4iu4Y8a2bcG/sE
|
|
||||||
-----END PRIVATE KEY-----
|
|
@ -1,28 +1,28 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN PRIVATE KEY-----
|
||||||
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
|
||||||
P4Hmmp4712UC4HkhQLSJ6HU=
|
xvrhZIQLy0ujoDPPBE8+3Q==
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
|
Loading…
x
Reference in New Issue
Block a user