PT-1741 Migrated Go pt-mongo-tools to new driver

This commit is contained in:
Carlos Salguero
2019-08-02 11:53:39 -03:00
parent e3409c720f
commit c388bbc01c
34 changed files with 1791 additions and 1304 deletions

View File

@@ -0,0 +1,26 @@
FROM registry.access.redhat.com/ubi7/ubi-minimal
RUN microdnf update && microdnf clean all
MAINTAINER Percona Development <info@percona.com>
LABEL name="Percona Backup for MongoDB" \
vendor="Percona" \
summary="Percona Backup for MongoDB is a distributed, low-impact solution for achieving consistent backups of MongoDB Sharded Clusters and Replica Sets." \
description=" This is a tool for creating consistent backups across a MongoDB sharded cluster (or a single replica set), and for restoring those backups to a specific point in time. Percona Backup for MongoDB uses a distributed client/server architecture to perform backup/restore actions."
COPY LICENSE /licenses/
# kubectl needed for Percona Operator for PSMDB
ENV KUBECTL_VERSION=v1.14.1
ENV KUBECTL_MD5SUM=223668b6d47121a9011645b04f5ef349
RUN curl -o /usr/bin/kubectl \
https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl \
&& chmod +x /usr/bin/kubectl \
&& echo "${KUBECTL_MD5SUM} /usr/bin/kubectl" | md5sum -c - \
&& curl -o /licenses/LICENSE.kubectl \
https://raw.githubusercontent.com/kubernetes/kubectl/master/LICENSE
COPY pbmctl pbm-agent pbm-coordinator /usr/local/bin/
USER nobody
CMD ["pbmctl"]

View File

@@ -0,0 +1,9 @@
FROM goreleaser/goreleaser
RUN apk --no-cache add upx
WORKDIR /go/src/github.com/percona/percona-backup-mongodb
COPY . .
ENTRYPOINT ["goreleaser"]
CMD ["release"]

View File

@@ -0,0 +1,15 @@
ARG GOLANG_DOCKERHUB_TAG
FROM golang:$GOLANG_DOCKERHUB_TAG
RUN wget https://repo.percona.com/apt/percona-release_0.1-7.stretch_all.deb && dpkg -i percona-release_0.1-7.stretch_all.deb
RUN apt-get update && apt-get install -y percona-server-mongodb-36-server
WORKDIR /go/src/github.com/percona/percona-backup-mongodb
COPY . .
RUN chown -R mongod.mongod /go
USER mongod
RUN make vendor
CMD make test && \
make test-gosec && \
make

View File

@@ -0,0 +1,18 @@
#!/bin/bash
cp /mongod.key /tmp/mongod.key
cp /mongod.pem /tmp/mongod.pem
cp /rootCA.crt /tmp/mongod-rootCA.crt
chmod 400 /tmp/mongod.key /tmp/mongod.pem /tmp/mongod-rootCA.pem
/usr/bin/mongod \
--bind_ip=0.0.0.0 \
--dbpath=/data/db \
--keyFile=/tmp/mongod.key \
--oplogSize=50 \
--profile=2 \
--sslMode=preferSSL \
--sslCAFile=/tmp/mongod-rootCA.crt \
--sslPEMKeyFile=/tmp/mongod.pem \
--wiredTigerCacheSizeGB=0.1 \
$*

View File

@@ -0,0 +1,14 @@
#!/bin/bash
cp /mongos.key /tmp/mongos.key
cp /mongos.pem /tmp/mongos.pem
cp /rootCA.crt /tmp/mongod-rootCA.crt
chmod 400 /tmp/mongos.key /tmp/mongos.pem /tmp/mongod-rootCA.pem
/usr/bin/mongos \
--keyFile=/tmp/mongos.key \
--bind_ip=127.0.0.1 \
--sslMode=preferSSL \
--sslCAFile=/tmp/mongod-rootCA.crt \
--sslPEMKeyFile=/tmp/mongos.pem \
$*

View File

@@ -0,0 +1,17 @@
#!/bin/bash
tries=1
max_tries=60
sleep_secs=1
while [ $tries -lt $max_tries ]; do
docker-compose ps init 2>/dev/null | grep -q 'Exit 0'
[ $? == 0 ] && break
echo "# INFO: 'init' has not completed, retrying check in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries, exiting"
exit 1
fi

View File

@@ -0,0 +1,245 @@
#!/bin/bash
max_tries=45
sleep_secs=1
cp /rootCA.crt /tmp/rootCA.crt
cp /client.pem /tmp/client.pem
chmod 400 /tmp/rootCA.crt /tmp/client.pem
MONGODB_IP=127.0.0.1
MONGO_FLAGS="--quiet --host=${MONGODB_IP} --ssl --sslCAFile=/tmp/rootCA.crt --sslPEMKeyFile=/tmp/client.pem"
sleep $sleep_secs
/usr/bin/mongo --version
## Shard 1
tries=1
while [ $tries -lt $max_tries ]; do
/usr/bin/mongo ${MONGO_FLAGS} \
--port=${TEST_MONGODB_S1_PRIMARY_PORT} \
--eval='rs.initiate({
_id: "'${TEST_MONGODB_S1_RS}'",
version: 1,
members: [
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_S1_PRIMARY_PORT}'", priority: 10 },
{ _id: 1, host: "'${MONGODB_IP}':'${TEST_MONGODB_S1_SECONDARY1_PORT}'", priority: 1 },
{ _id: 2, host: "'${MONGODB_IP}':'${TEST_MONGODB_S1_SECONDARY2_PORT}'", priority: 0, hidden: true, tags: { role: "backup" } }
]})' | tee /tmp/init-result.json
if [ $? == 0 ]; then
grep -q '"ok" : 1' /tmp/init-result.json
[ $? == 0 ] && rm -vf /tmp/init-result.json && break
fi
echo "# INFO: retrying rs.initiate() on ${TEST_MONGODB_S1_RS} in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries for ${TEST_MONGODB_S1_RS}, exiting"
exit 1
fi
echo "# INFO: replset ${TEST_MONGODB_S1_RS} is initiated"
## Shard 2
tries=1
while [ $tries -lt $max_tries ]; do
/usr/bin/mongo ${MONGO_FLAGS} \
--port=${TEST_MONGODB_S2_PRIMARY_PORT} \
--eval='rs.initiate({
_id: "'${TEST_MONGODB_S2_RS}'",
version: 1,
members: [
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_S2_PRIMARY_PORT}'", priority: 10 },
{ _id: 1, host: "'${MONGODB_IP}':'${TEST_MONGODB_S2_SECONDARY1_PORT}'", priority: 1 },
{ _id: 2, host: "'${MONGODB_IP}':'${TEST_MONGODB_S2_SECONDARY2_PORT}'", priority: 0, hidden: true, tags: { role: "backup" } }
]})' | tee /tmp/init-result.json
if [ $? == 0 ]; then
grep -q '"ok" : 1' /tmp/init-result.json
[ $? == 0 ] && rm -vf /tmp/init-result.json && break
fi
echo "# INFO: retrying rs.initiate() on ${TEST_MONGODB_S2_RS} in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries for ${TEST_MONGODB_S2_RS}, exiting"
exit 1
fi
echo "# INFO: replset ${TEST_MONGODB_S2_RS} is initiated"
## Configsvr replset
tries=1
while [ $tries -lt $max_tries ]; do
/usr/bin/mongo ${MONGO_FLAGS} \
--port=${TEST_MONGODB_CONFIGSVR1_PORT} \
--eval='rs.initiate({
_id: "'${TEST_MONGODB_CONFIGSVR_RS}'",
configsvr: true,
version: 1,
members: [
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_CONFIGSVR1_PORT}'" }
]
})'
[ $? == 0 ] && break
echo "# INFO: retrying rs.initiate() for configsvr in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries, exiting"
exit 1
fi
echo "# INFO: sharding configsvr is initiated"
## Replica set 3 (non sharded)
tries=1
while [ $tries -lt $max_tries ]; do
/usr/bin/mongo ${MONGO_FLAGS} \
--port=${TEST_MONGODB_S3_PRIMARY_PORT} \
--eval='rs.initiate({
_id: "'${TEST_MONGODB_S3_RS}'",
version: 1,
members: [
{ _id: 0, host: "'${MONGODB_IP}':'${TEST_MONGODB_S3_PRIMARY_PORT}'", priority: 10 },
{ _id: 1, host: "'${MONGODB_IP}':'${TEST_MONGODB_S3_SECONDARY1_PORT}'", priority: 1 },
{ _id: 2, host: "'${MONGODB_IP}':'${TEST_MONGODB_S3_SECONDARY2_PORT}'", priority: 0, hidden: true, tags: { role: "backup" } }
]})' | tee /tmp/init3-result.json
if [ $? == 0 ]; then
grep -q '"ok" : 1' /tmp/init3-result.json
[ $? == 0 ] && rm -vf /tmp/init3-result.json && break
fi
echo "# INFO: retrying rs.initiate() on ${TEST_MONGODB_S3_RS} in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries for ${TEST_MONGODB_S3_RS}, exiting"
exit 1
fi
echo "# INFO: replset ${TEST_MONGODB_S3_RS} is initiated"
for MONGODB_PORT in ${TEST_MONGODB_S1_PRIMARY_PORT} ${TEST_MONGODB_S2_PRIMARY_PORT} ${TEST_MONGODB_CONFIGSVR1_PORT}; do
tries=1
while [ $tries -lt $max_tries ]; do
ISMASTER=$(/usr/bin/mongo ${MONGO_FLAGS} \
--port=${MONGODB_PORT} \
--eval='printjson(db.isMaster().ismaster)' 2>/dev/null)
[ "$ISMASTER" == "true" ] && break
echo "# INFO: retrying db.isMaster() check on 127.0.0.1:${MONGODB_PORT} in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries, exiting"
exit 1
fi
done
echo "# INFO: all replsets have primary"
for MONGODB_PORT in 27017 ${TEST_MONGODB_S1_PRIMARY_PORT} ${TEST_MONGODB_S2_PRIMARY_PORT} ${TEST_MONGODB_CONFIGSVR1_PORT} ${TEST_MONGODB_S3_PRIMARY_PORT}; do
echo "PORT $MONGODB_PORT"
tries=1
while [ $tries -lt $max_tries ]; do
/usr/bin/mongo ${MONGO_FLAGS} \
--port=${MONGODB_PORT} \
--eval='db.createUser({
user: "'${TEST_MONGODB_ADMIN_USERNAME}'",
pwd: "'${TEST_MONGODB_ADMIN_PASSWORD}'",
roles: [
{ db: "admin", role: "root" }
]
})' \
admin
if [ $? == 0 ]; then
echo "# INFO: added admin user to 127.0.0.1:${MONGODB_PORT}"
/usr/bin/mongo ${MONGO_FLAGS} \
--username=${TEST_MONGODB_ADMIN_USERNAME} \
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
--port=${MONGODB_PORT} \
--eval='db.createUser({
user: "'${TEST_MONGODB_USERNAME}'",
pwd: "'${TEST_MONGODB_PASSWORD}'",
roles: [
{ db: "admin", role: "backup" },
{ db: "admin", role: "clusterMonitor" },
{ db: "admin", role: "restore" },
{ db: "config", role: "read" },
{ db: "test", role: "readWrite" }
]
})' \
admin
[ $? == 0 ] && echo "# INFO: added test user to 127.0.0.1:${MONGODB_PORT}" && break
fi
echo "# INFO: retrying db.createUser() on 127.0.0.1:${MONGODB_PORT} in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
done
echo "# INFO: all replsets have auth user(s)"
shard1=${TEST_MONGODB_S1_RS}'/127.0.0.1:'${TEST_MONGODB_S1_PRIMARY_PORT}',127.0.0.1:'${TEST_MONGODB_S1_SECONDARY1_PORT}
shard2=${TEST_MONGODB_S2_RS}'/127.0.0.1:'${TEST_MONGODB_S2_PRIMARY_PORT}',127.0.0.1:'${TEST_MONGODB_S2_SECONDARY1_PORT}
for shard in $shard1 $shard2; do
tries=1
while [ $tries -lt $max_tries ]; do
ADDSHARD=$(/usr/bin/mongo ${MONGO_FLAGS} \
--username=${TEST_MONGODB_ADMIN_USERNAME} \
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
--port=${TEST_MONGODB_MONGOS_PORT} \
--eval='printjson(sh.addShard("'$shard'").ok)' \
admin 2>/dev/null)
[ $? == 0 ] && [ "$ADDSHARD" == "1" ] && break
echo "# INFO: retrying sh.addShard() check for '$shard' in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries for '$shard', exiting"
exit 1
fi
echo "# INFO: added shard: $shard"
done
tries=1
while [ $tries -lt $max_tries ]; do
ENABLESHARDING=$(/usr/bin/mongo ${MONGO_FLAGS} \
--username=${TEST_MONGODB_ADMIN_USERNAME} \
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
--port=${TEST_MONGODB_MONGOS_PORT} \
--eval='sh.enableSharding("test").ok' \
admin 2>/dev/null)
[ $? == 0 ] && [ "$ENABLESHARDING" == "1" ] && break
echo "# INFO: retrying sh.enableSharding(\"test\") check in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries for '$shard', exiting"
exit 1
fi
echo "# INFO: \"test\" database is now sharded"
tries=1
while [ $tries -lt $max_tries ]; do
SHARDCOL=$(/usr/bin/mongo ${MONGO_FLAGS} \
--username=${TEST_MONGODB_ADMIN_USERNAME} \
--password=${TEST_MONGODB_ADMIN_PASSWORD} \
--port=${TEST_MONGODB_MONGOS_PORT} \
--eval='sh.shardCollection("test.test", {_id: 1}).ok' \
admin 2>/dev/null)
[ $? == 0 ] && [ "$ENABLESHARDING" == "1" ] && break
echo "# INFO: retrying sh.shardCollection(\"test.test\", {_id: 1}) check in $sleep_secs secs (try $tries/$max_tries)"
sleep $sleep_secs
tries=$(($tries + 1))
done
if [ $tries -ge $max_tries ]; then
echo "# ERROR: reached max tries $max_tries for '$shard', exiting"
exit 1
fi
echo "# INFO: \"test.test\" collection is now sharded"

View File

@@ -0,0 +1,16 @@
T774VtseEvMWhy5MjNvfZaxaMHRAEeSw/2coSJgL1NZGgMhOsVHR+5srsyQqVSu3
E4trWyzH/lL/NV5gNaVpKiqGZbCxVbsVU4IwPIvkbNBqa2qrlO6pPzSLkOY+9S72
3RFZX2h7NgldxofH5OXRpQeldKYwJOvZCBgH4sCzN/hZwBLGfqUOGHbOotuxcWXP
Jhm4HIlIu1F7OFv2SOFGSX+EBpGrMKVElbvCV16A8s4hV2hjqq/ZMiLyzK5sX1hV
CiQ8P8fmRJ83k3C6It6b714Kq0NYhRiAJDVzEOBaU7m76x+QnADZ0op/Zhd/mseb
H22kqXSJgJnfd8D8xaEdUU0UKNoMLrluQnuKYcM6OrbKqQcucEh68kAiRYgdMvBi
QFDV5QmBBSUwY3ZbbBzr8jZs1AnkAt8I01TQzjPrzA7jIP5YdcvHYd/0YA9tug4B
pyDSUnSysDuJOMSB0Lsc5bj4G+vx1IL73uBMZXzIJZKaSFLkvpWVTyGydqDQkwl4
+bWZwPBDWegL+rCCm8pvjVHuEpb7tmZqlZnE73Snm6QGdAy2hXu0iAk/wnNlpS1B
UqOUwWa4H+u2oTHGT75T3uui4RfMMF1LqMooTsPMTsRGCU8mH3FAKZIIDSy9LTVf
x8CpffgMMvmBfHuiOEwh/79KjWX/906dUx9wcGiOoKFbH/8DHFYePqd6J/HFSKLb
w0izT8aU+VlDebRhe6uMTCU8eIOzBJ6vXxIbaXovO/69vBBEqVGMMOF9zr2soFxr
0P7Fv/fAPD6HeBCzQbd/O2WUlvYCLaYwTZYhZYVnuESfur93Bh82QxEMQP+9GHU6
o912HkSNvCwSt2kpG4BRHbCYRm4AE2YUNx4LjcY6kpo6RGNPCcyXduC1BVFDFPj2
ZVJ/GN3MGf8QdhswPo7fnYsG7QF2oke45CHExsYC99XJPb+QdEElzuKeiUoEjvHL
Pjlglnj+mGuAPMiVyKxzsz6yU6iKSl8LFBrfTA2GkbeT4G3h

View File

@@ -0,0 +1,52 @@
-----BEGIN CERTIFICATE-----
MIIESjCCAjKgAwIBAgIRAKG/1k+fiFpnx/pdBHp0Hc8wDQYJKoZIhvcNAQELBQAw
ETEPMA0GA1UEAxMGcm9vdENBMB4XDTE4MDkwNjExMDQzNloXDTIwMDMwNjExMDQz
M1owFDESMBAGA1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAl+Qnlg3dSlyYi34yF2D35g9PhU6o5gm3qN22pEdDTOrTEihnF6lq
XqieDAaTTYehilqSsBjdZN8uTeJQ5Dsr/g8n43y8KCQFIcpNJLldV+pNEZydCK3R
sPr4+GgWGdpmA5Za8VlRgilYNVzSmABz9LZoa33YIjMSQ0BftAFnFl6N0ikDwPuN
L1A40EaE121QeEQgUTbcWcrJ1vJkJgcSGK6blVOy1dmHL4ABoD+n1+abDsoKM1Yz
XOgci8rbNUTS6P/2j4VW+MZRnM6rFCbo7wW11IUYSyShhTJoWFMdtc7zmQdTVBlo
RhKU0Ok1QDVr6vO+3PKriUcWY0cLFRcsGwIDAQABo4GZMIGWMA4GA1UdDwEB/wQE
AwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFAaP
Vu/GKnWUUjNznMkpU7t1V8V3MB8GA1UdIwQYMBaAFNVjkwWn6aryJsRlIsOr4gFM
ISnFMCUGA1UdEQQeMByCCWxvY2FsaG9zdIIJMTI3LjAuMC4xhwR/AAABMA0GCSqG
SIb3DQEBCwUAA4ICAQCYl8SMZJlaBOyUM0VAOZDks+OICJn8PUdu5XqvFA5ATnXE
MRGP1h34R/6Vkl/jwB/+2+9zEgT1z4hZ55blyOmZFB/j/jPrlqEIkUMHK1CVC6jI
f8ubNp4MNHVoV2Cw6wLw8E/GMZIcZ4t0G9Z7kFjHh0qS5PN00zbBCj927Q2FoBc2
oybS4KVgFeD9fklYCMoETp+WWaM7dec0OBdKWyCEP3JmMHITKTipro5yf6RZDvAB
TvoGcZIsIdKnoAknMYwG4ibcyI0z6XIF6/Hy/E6XdbsnmCHGIBHbRMMvqNXz3XJa
1s/vA4MHkUF9N14MRVI8cepFMsYBZkztNylYw159b9qiHzbeUm3BrSaJzQjefqkD
cMFLJ0jcZDg8N+pyMi3vvr41HfONw8iyqis3ZAjftZ56fwoj6ap4QZI8P+M7R//X
A4r11+ldDRsJRnLi6kCJK/ta2pKGuUvFeVqDDc/wNfBUMkmUeyZ9AcNoxFNDMmZT
sEhj6mTHcKlo+BcVdYMO4FrrgXkuRS0gY82qZucHRGQh3G1QPs4di7pVCopXuWjQ
8foI+SSRFqfcdPS5ljVyLV1g+RVBJnGYQiCM/JAPokRZpimZherxsmdnAW1A/XR1
/LXHw/5upwkouzsjFTEM8g1WDwtfp3HGFnHUxVHSe2lXI/2o+DZBU/ILEpxrgQ==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAl+Qnlg3dSlyYi34yF2D35g9PhU6o5gm3qN22pEdDTOrTEihn
F6lqXqieDAaTTYehilqSsBjdZN8uTeJQ5Dsr/g8n43y8KCQFIcpNJLldV+pNEZyd
CK3RsPr4+GgWGdpmA5Za8VlRgilYNVzSmABz9LZoa33YIjMSQ0BftAFnFl6N0ikD
wPuNL1A40EaE121QeEQgUTbcWcrJ1vJkJgcSGK6blVOy1dmHL4ABoD+n1+abDsoK
M1YzXOgci8rbNUTS6P/2j4VW+MZRnM6rFCbo7wW11IUYSyShhTJoWFMdtc7zmQdT
VBloRhKU0Ok1QDVr6vO+3PKriUcWY0cLFRcsGwIDAQABAoIBACCfhFEaUTkzgiAT
zrZuwU/MYgwDxQsDc0r1s9C87ZuLpCH2Q441eP8zwB5dGy4/v1Zz9aWU8ZhExzE7
NpyOiPhcUPjvRYppkiCbzs3gckf7runldWTz0GHuxaK02GpdGiQTGx1TTcpjDusH
MMQs9LrOosbTlKRjy7xeCzAiTP3kpGRw0+C8ey5GJ6PxchPQVDp0ONlfUjpsPO+c
FussLv5zg0UwaI62HPuJCGYEOXF8DLKcq/0YuZjesdbyrRzJ3B4KVVsG07BOWpoc
4Rn7E45oa1nXclfAo2ivJPuNsa/77lYtJnk+/o48U1UwzysjfYvrtZ6QeJ9nNcG9
9bbSsmECgYEAxZVHZTwoEVsa9rqWFs1gBU4ZziH57Sxt42zD0uQ5cBRvtAbNqRo6
C/nnSuJEdxanPB8YRCkV2iJcsrrVY2AuEci1WJyGdCoP5LMl1DEUEYIRsot1hxL8
l0Cab2IwpHZ52hYpEfR/Zfa7G2/UBJ+sLu8IDwNqGxqljFCzmO4PSBcCgYEAxMyJ
TCPGGX8Rk6t1GoBxGl97OrsOdKNQsKgk/c91tsZKqItUGeYhx0YS29xg5uJ3WNmN
3I9LW3RyVrn2DIn1fftKe4PCvy0/bf7Wr1U2PeaD8vLgWbos7fHn0cYlJInMABV2
8QQheCOj+fhSummiwqH7OhorGQ4Y+Gnzjkqrep0CgYA5pMOflV1bMuk68lS3clOB
OLfum5r+xueIYkL/U/Yt7MhqDVIS88Pbmp0QC9NNqx4/PBMoT5RAf6XrvvZid7z5
E0VVBNV1LpBUeK+gqHDiasAfBvDS54cp2X8038CxOp9yMOTqiBpi9QjBiG6iqrLh
PntrZeOe5LdHqIO9KjbrIQKBgBaEvPUcZs+GDbHS/axRpB97a3NV8hqAkXwVUV5F
fdezKtnMT4xDG/xcVU4ZEnF42mUtR6FEOEA3u9mWn8PhiVioB2bIteEAQXDJpzEa
1AETPmfvSKKbvgZgFsGXJarfpZsg2aJMcbP4iAvTUUwJSFlzBXcphWLxjQPnw7m1
a5e1AoGBALK70cpPmDMtKp3kmmTIDVlry42rMH/vSd31uXeEuO7xGOA2ijzpgoU2
sS7sD/Rf4m+3rJ5E+ys5aWi0vffnSBcLCxXJQS0Ck4lK+hTmPucHcZKy3o/cJNEM
rhkNdLdtzhtKMwbBcKeFAHdnp+2yzFOrjbbRKFFyirWfOZ9eVoZ3
-----END RSA PRIVATE KEY-----

View File

@@ -0,0 +1,52 @@
-----BEGIN CERTIFICATE-----
MIIESjCCAjKgAwIBAgIRAKG/1k+fiFpnx/pdBHp0Hc8wDQYJKoZIhvcNAQELBQAw
ETEPMA0GA1UEAxMGcm9vdENBMB4XDTE4MDkwNjExMDQzNloXDTIwMDMwNjExMDQz
M1owFDESMBAGA1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAl+Qnlg3dSlyYi34yF2D35g9PhU6o5gm3qN22pEdDTOrTEihnF6lq
XqieDAaTTYehilqSsBjdZN8uTeJQ5Dsr/g8n43y8KCQFIcpNJLldV+pNEZydCK3R
sPr4+GgWGdpmA5Za8VlRgilYNVzSmABz9LZoa33YIjMSQ0BftAFnFl6N0ikDwPuN
L1A40EaE121QeEQgUTbcWcrJ1vJkJgcSGK6blVOy1dmHL4ABoD+n1+abDsoKM1Yz
XOgci8rbNUTS6P/2j4VW+MZRnM6rFCbo7wW11IUYSyShhTJoWFMdtc7zmQdTVBlo
RhKU0Ok1QDVr6vO+3PKriUcWY0cLFRcsGwIDAQABo4GZMIGWMA4GA1UdDwEB/wQE
AwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFAaP
Vu/GKnWUUjNznMkpU7t1V8V3MB8GA1UdIwQYMBaAFNVjkwWn6aryJsRlIsOr4gFM
ISnFMCUGA1UdEQQeMByCCWxvY2FsaG9zdIIJMTI3LjAuMC4xhwR/AAABMA0GCSqG
SIb3DQEBCwUAA4ICAQCYl8SMZJlaBOyUM0VAOZDks+OICJn8PUdu5XqvFA5ATnXE
MRGP1h34R/6Vkl/jwB/+2+9zEgT1z4hZ55blyOmZFB/j/jPrlqEIkUMHK1CVC6jI
f8ubNp4MNHVoV2Cw6wLw8E/GMZIcZ4t0G9Z7kFjHh0qS5PN00zbBCj927Q2FoBc2
oybS4KVgFeD9fklYCMoETp+WWaM7dec0OBdKWyCEP3JmMHITKTipro5yf6RZDvAB
TvoGcZIsIdKnoAknMYwG4ibcyI0z6XIF6/Hy/E6XdbsnmCHGIBHbRMMvqNXz3XJa
1s/vA4MHkUF9N14MRVI8cepFMsYBZkztNylYw159b9qiHzbeUm3BrSaJzQjefqkD
cMFLJ0jcZDg8N+pyMi3vvr41HfONw8iyqis3ZAjftZ56fwoj6ap4QZI8P+M7R//X
A4r11+ldDRsJRnLi6kCJK/ta2pKGuUvFeVqDDc/wNfBUMkmUeyZ9AcNoxFNDMmZT
sEhj6mTHcKlo+BcVdYMO4FrrgXkuRS0gY82qZucHRGQh3G1QPs4di7pVCopXuWjQ
8foI+SSRFqfcdPS5ljVyLV1g+RVBJnGYQiCM/JAPokRZpimZherxsmdnAW1A/XR1
/LXHw/5upwkouzsjFTEM8g1WDwtfp3HGFnHUxVHSe2lXI/2o+DZBU/ILEpxrgQ==
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAl+Qnlg3dSlyYi34yF2D35g9PhU6o5gm3qN22pEdDTOrTEihn
F6lqXqieDAaTTYehilqSsBjdZN8uTeJQ5Dsr/g8n43y8KCQFIcpNJLldV+pNEZyd
CK3RsPr4+GgWGdpmA5Za8VlRgilYNVzSmABz9LZoa33YIjMSQ0BftAFnFl6N0ikD
wPuNL1A40EaE121QeEQgUTbcWcrJ1vJkJgcSGK6blVOy1dmHL4ABoD+n1+abDsoK
M1YzXOgci8rbNUTS6P/2j4VW+MZRnM6rFCbo7wW11IUYSyShhTJoWFMdtc7zmQdT
VBloRhKU0Ok1QDVr6vO+3PKriUcWY0cLFRcsGwIDAQABAoIBACCfhFEaUTkzgiAT
zrZuwU/MYgwDxQsDc0r1s9C87ZuLpCH2Q441eP8zwB5dGy4/v1Zz9aWU8ZhExzE7
NpyOiPhcUPjvRYppkiCbzs3gckf7runldWTz0GHuxaK02GpdGiQTGx1TTcpjDusH
MMQs9LrOosbTlKRjy7xeCzAiTP3kpGRw0+C8ey5GJ6PxchPQVDp0ONlfUjpsPO+c
FussLv5zg0UwaI62HPuJCGYEOXF8DLKcq/0YuZjesdbyrRzJ3B4KVVsG07BOWpoc
4Rn7E45oa1nXclfAo2ivJPuNsa/77lYtJnk+/o48U1UwzysjfYvrtZ6QeJ9nNcG9
9bbSsmECgYEAxZVHZTwoEVsa9rqWFs1gBU4ZziH57Sxt42zD0uQ5cBRvtAbNqRo6
C/nnSuJEdxanPB8YRCkV2iJcsrrVY2AuEci1WJyGdCoP5LMl1DEUEYIRsot1hxL8
l0Cab2IwpHZ52hYpEfR/Zfa7G2/UBJ+sLu8IDwNqGxqljFCzmO4PSBcCgYEAxMyJ
TCPGGX8Rk6t1GoBxGl97OrsOdKNQsKgk/c91tsZKqItUGeYhx0YS29xg5uJ3WNmN
3I9LW3RyVrn2DIn1fftKe4PCvy0/bf7Wr1U2PeaD8vLgWbos7fHn0cYlJInMABV2
8QQheCOj+fhSummiwqH7OhorGQ4Y+Gnzjkqrep0CgYA5pMOflV1bMuk68lS3clOB
OLfum5r+xueIYkL/U/Yt7MhqDVIS88Pbmp0QC9NNqx4/PBMoT5RAf6XrvvZid7z5
E0VVBNV1LpBUeK+gqHDiasAfBvDS54cp2X8038CxOp9yMOTqiBpi9QjBiG6iqrLh
PntrZeOe5LdHqIO9KjbrIQKBgBaEvPUcZs+GDbHS/axRpB97a3NV8hqAkXwVUV5F
fdezKtnMT4xDG/xcVU4ZEnF42mUtR6FEOEA3u9mWn8PhiVioB2bIteEAQXDJpzEa
1AETPmfvSKKbvgZgFsGXJarfpZsg2aJMcbP4iAvTUUwJSFlzBXcphWLxjQPnw7m1
a5e1AoGBALK70cpPmDMtKp3kmmTIDVlry42rMH/vSd31uXeEuO7xGOA2ijzpgoU2
sS7sD/Rf4m+3rJ5E+ys5aWi0vffnSBcLCxXJQS0Ck4lK+hTmPucHcZKy3o/cJNEM
rhkNdLdtzhtKMwbBcKeFAHdnp+2yzFOrjbbRKFFyirWfOZ9eVoZ3
-----END RSA PRIVATE KEY-----

View File

@@ -0,0 +1,29 @@
-----BEGIN CERTIFICATE-----
MIIE4jCCAsqgAwIBAgIBATANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDEwZyb290
Q0EwHhcNMTgwOTA2MTEwNDM0WhcNMjAwMzA2MTEwNDM0WjARMQ8wDQYDVQQDEwZy
b290Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDqVvFpIft91o1x
ALjDQ+zoCke2daQ5tntwbDwosbiGB58Jz5p/KVwGHQvYIt5yKSzc7KN7OkTFF8Xt
QGbVY2ZHOONHHZHOtuiBPz05fE/HDPxic2MO9jN4GGTphgFDBBfaEaF0G/19Rffk
1wtB8PoOY3MU0mSTxT1q2Ka2yY2VRbvoPxo7qbhCfXuAu1cA8RmbYCWQzGsqxPC6
s7cen9C5IOhHB/osQcI7ZoSL2fkiDch8SLFBPj7W5nofjH+P4Xncm2c65tHSy4pI
hbYW44NDR9o2RS1OdD2GhS9MHBppzQGAnXM3yxsbKDyzjcxZpIjwMlxaGz97y404
8ROET8Hu7CoOK9kPA20rmhpX/3ET7kiHs2f4/BlD7xNVL74tr1Plva/C8DcCWDC8
sf1PW4RJsuwadbkMAST4MY87HknIiN4NGKE6mSlfukaKKkW1HdCY7ynpCyv3Uru3
FiD5XrphSvonZbSfcnKjYQVKEudJWyMbdoO5JX6cDIb7QP3jsKADzedwrtWBWx2Z
CxWOJPeVan/I6OfV45q3LZFAsNjK2gquOe/3WmJKpO+EspivY+Fv/32IAACmjoY/
90Szf6YUKEE1Etpj9PT2gqmFleOx51A7jg3z4wUl3KI8CTcdVlDogct+4CHiQfJU
4ajXTqd3O0qGbulQPrZuhPZWBSbVqQIDAQABo0UwQzAOBgNVHQ8BAf8EBAMCAQYw
EgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU1WOTBafpqvImxGUiw6viAUwh
KcUwDQYJKoZIhvcNAQELBQADggIBAMEw6cOWi7s/6A5cMObSbbfS91yXx4tjFda/
5lJ+7gxO935pQas2ZppxVpGUZezXH5rYl8bR/xGTZ1SLDqp0mjphVp4G6VQFtonK
E9nNRuVK9jDJ41IXjWEtdgeig5Sf6hRUbwTDTBulhSviQQzo7hQUpSknMC1UNAgy
op3q1dluBaG8BWi9aZu0WL5VdxdQdTCAXSrYqmeGZlc0IgiNiebRmkQwNImnvfzb
WmrCK8rThNdXml7G/BD+m9na1OwUVoee1oohbHmxH1YsNwe1rSEBL7oAHzNi695H
QrriZWu7t7QdO5ZITGZpzmVU1nrwSB/VgPH0tBAUeZSifctNII9NuW9FS1h3Gys1
JV2cwQYVCLK9+M/VhRdSv6u+UCHE1TtZwHmSKYjcdN52pUEnWZNtlwPyrJ7cbSEj
Wrq+iZBBO9qcPg20ldYLkjv1QlOGLnVbl2K9ePTTYbUaGo0DLGlA6E2lVjoD8FvS
DQYS6qQGHCgVgOPhca8FOCxKEfMvXSzKOF9eGn0rnzsUcJbiYxNArjDDKSRSyMhD
2TfBupFV+tYM8OXBDArgk464IZnjsrT4DeQQ+WOtEm3kHo/NVhZ/6A1uV/JyQhkF
D6FSNoKvWz3LIC5v42+hvj6teAk4wC9tFk4Q76c2PQxiwY1Ur8ySVUYiIv8bETCt
nQT44DuY
-----END CERTIFICATE-----