diff --git a/.gitignore b/.gitignore index 6c0cd4f..c33d28c 100644 --- a/.gitignore +++ b/.gitignore @@ -112,4 +112,6 @@ dmypy.json # Editors .sonarlint -.vscode \ No newline at end of file +.vscode + +.DS_Store diff --git a/Dockerfile b/Dockerfile index 3ed4a20..046ba86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Build container -FROM alpine:3.17.1 as build +FROM alpine:3.21.2 AS build RUN apk add build-base curl git make python3 python3-dev @@ -15,17 +15,16 @@ RUN make package # Distribution container -FROM alpine:3.17.1 +FROM alpine:3.21.2 COPY --from=build /opt/dummyserver/dist/dummyserver-*.tar.gz /tmp/dummyserver.tar.gz COPY ./script/entrypoint /entrypoint -RUN apk add --no-cache curl python3 openssl && \ - curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py && \ - python3 /tmp/get-pip.py && \ - pip install requests /tmp/dummyserver.tar.gz && \ - rm -f /tmp/get-pip.py /tmp/dummyserver.tar.gz +RUN apk add --no-cache curl python3 openssl py3-pip py-requests && \ + pip install --break-system-packages /tmp/dummyserver.tar.gz && \ + rm -f /tmp/dummyserver.tar.gz && \ + chmod +x /entrypoint -EXPOSE 8080 8181 8282 8383 +EXPOSE 8001 8002 8003 8004 -ENTRYPOINT [ "/entrypoint"] +ENTRYPOINT [ "/entrypoint" ] diff --git a/LICENSE b/LICENSE index 5a2c297..5fb82e4 100644 --- a/LICENSE +++ b/LICENSE @@ -19,4 +19,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file +OTHER DEALINGS IN THE SOFTWARE. diff --git a/Makefile b/Makefile index ae9cd70..f8bb2da 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ test: venv ${PYTEST} test run: venv - ${PYTHON} dummyserver + SERVER_CRT_PATH=test/test_handler/server-bundle.crt CLIENT_CA_PATH=test/test_handler/rootCA.crt ${PYTHON} dummyserver package: venv ${PYTHON} setup.py sdist diff --git a/README.md b/README.md index b9febb2..005ad19 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # Dummy Webserver This is just a dummy webserver. All the requests are recorded. -It will answer 200 to GET requests and to POST requests with a valid json body. In case of validation error when parsing the json body it will return a 418. +It will answer 200 to GET requests and to POST requests. + It exposes 3 different endpoints: diff --git a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml new file mode 100644 index 0000000..7adaa7f --- /dev/null +++ b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml @@ -0,0 +1,28 @@ +service: + type: LoadBalancer + httpPort: 80 + httpsPort: 443 + mgmtPort: 8004 + +image: + tag: "0.7.0" + pullPolicy: Always + +ingress: + enabled: false + host: dummy-webserver.dev.everyware.io + + className: alb + basePath: / +# backend: +# serviceName: ec-console +# servicePort: 8080 + annotations: + # Simple configuration for AWS ALB Ingress Controller (https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/) + alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:332696098873:certificate/1021f82e-83ad-420e-bac9-f6640d89e129 + alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]' + alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' + alb.ingress.kubernetes.io/scheme: internet-facing + alb.ingress.kubernetes.io/target-type: ip + alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-2019-08 + alb.ingress.kubernetes.io/group.name: everyware-cloud-stage \ No newline at end of file diff --git a/charts/dummyserver.template.yaml b/charts/dummyserver.template.yaml new file mode 100644 index 0000000..b4c8238 --- /dev/null +++ b/charts/dummyserver.template.yaml @@ -0,0 +1,163 @@ +NAME: dummyserver +LAST DEPLOYED: Fri Jun 9 11:47:20 2023 +NAMESPACE: default +STATUS: pending-install +REVISION: 1 +HOOKS: +--- +# Source: dummyserver/templates/tests/test-connection.yaml +apiVersion: v1 +kind: Pod +metadata: + name: "dummyserver-test-connection" + labels: + helm.sh/chart: dummyserver-0.1.0 + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver + app.kubernetes.io/version: "0.6.0" + app.kubernetes.io/managed-by: Helm + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['dummyserver:'] + restartPolicy: Never +MANIFEST: +--- +# Source: dummyserver/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: dummyserver + labels: + helm.sh/chart: dummyserver-0.1.0 + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver + app.kubernetes.io/version: "0.6.0" + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8001 + targetPort: 8001 + protocol: TCP + name: http + - port: 8002 + targetPort: 8002 + protocol: TCP + name: https + - port: 8004 + targetPort: 8004 + protocol: TCP + name: mgmt + selector: + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver +--- +# Source: dummyserver/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: dummyserver + labels: + helm.sh/chart: dummyserver-0.1.0 + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver + app.kubernetes.io/version: "0.6.0" + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver + template: + metadata: + labels: + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver + spec: + securityContext: + {} + containers: + - name: dummyserver + securityContext: + {} + image: "public.ecr.aws/eurotech-dev/dummy-webserver:0.6.0:0.6.0" + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 8001 + protocol: TCP + - name: https + containerPort: 8002 + protocol: TCP + - name: mgmtport + containerPort: 8004 + protocol: TCP +## livenessProbe: +## httpGet: +## path: /liveness +## port: http +## readinessProbe: +## httpGet: +## path: /readyness +## port: http + resources: + {} +--- +# Source: dummyserver/templates/ingress.yaml +kind: Ingress +apiVersion: networking.k8s.io/v1 +metadata: + name: dummyserver + labels: + helm.sh/chart: dummyserver-0.1.0 + app.kubernetes.io/name: dummyserver + app.kubernetes.io/instance: dummyserver + app.kubernetes.io/version: "0.6.0" + app.kubernetes.io/managed-by: Helm + annotations: + alb.ingress.kubernetes.io/listen-ports: "[{\"HTTP\": 80}]" + alb.ingress.kubernetes.io/scheme: "internet-facing" + alb.ingress.kubernetes.io/target-type: "ip" +spec: + ingressClassName: alb + rules: + - http: + paths: + - pathType: Prefix + path: /stats + backend: + service: + name: dummyserver + port: + number: 8004 + - pathType: Prefix + path: /history + backend: + service: + name: dummyserver + port: + number: 8004 + - pathType: Prefix + path: /clear + backend: + service: + name: dummyserver + port: + number: 8004 + - pathType: Prefix + path: / + backend: + service: + name: dummyserver + port: + number: 8001 + +NOTES: +1. Get the application URL by running these commands: + http://chart-example.local/ diff --git a/charts/dummyserver/.helmignore b/charts/dummyserver/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/dummyserver/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/dummyserver/Chart.yaml b/charts/dummyserver/Chart.yaml new file mode 100644 index 0000000..4029fe7 --- /dev/null +++ b/charts/dummyserver/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: dummyserver +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "0.6.0" diff --git a/charts/dummyserver/templates/NOTES.txt b/charts/dummyserver/templates/NOTES.txt new file mode 100644 index 0000000..2949e59 --- /dev/null +++ b/charts/dummyserver/templates/NOTES.txt @@ -0,0 +1,20 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ .Values.ingress.host }}{{ .path }} + {{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "dummyserver.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "dummyserver.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "dummyserver.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "dummyserver.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") + echo "Visit http://127.0.0.1:8001 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8001:$CONTAINER_PORT +{{- end }} diff --git a/charts/dummyserver/templates/_helpers.tpl b/charts/dummyserver/templates/_helpers.tpl new file mode 100644 index 0000000..8a52a91 --- /dev/null +++ b/charts/dummyserver/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "dummyserver.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "dummyserver.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "dummyserver.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "dummyserver.labels" -}} +helm.sh/chart: {{ include "dummyserver.chart" . }} +{{ include "dummyserver.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "dummyserver.selectorLabels" -}} +app.kubernetes.io/name: {{ include "dummyserver.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "dummyserver.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "dummyserver.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/charts/dummyserver/templates/deployment.yaml b/charts/dummyserver/templates/deployment.yaml new file mode 100644 index 0000000..b55a448 --- /dev/null +++ b/charts/dummyserver/templates/deployment.yaml @@ -0,0 +1,72 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "dummyserver.fullname" . }} + labels: + {{- include "dummyserver.labels" . | nindent 4 }} +spec: + {{- if not .Values.autoscaling.enabled }} + replicas: {{ .Values.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "dummyserver.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "dummyserver.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + - name: CREDENTIALS + value: "{{ .Values.container.credentials.user }}:{{ .Values.container.credentials.password }}" + ports: + - name: http + containerPort: 8001 + protocol: TCP + - name: https + containerPort: 8002 + protocol: TCP + - name: mtls + containerPort: 8003 + protocol: TCP + - name: mgmtport + containerPort: 8004 + protocol: TCP +## livenessProbe: +## httpGet: +## path: /liveness +## port: http +## readinessProbe: +## httpGet: +## path: /readyness +## port: http + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/dummyserver/templates/ingress.yaml b/charts/dummyserver/templates/ingress.yaml new file mode 100644 index 0000000..80d7a74 --- /dev/null +++ b/charts/dummyserver/templates/ingress.yaml @@ -0,0 +1,53 @@ +--- +{{- if eq .Values.ingress.enabled true }} +kind: Ingress +apiVersion: networking.k8s.io/v1 +metadata: + name: {{ include "dummyserver.fullname" . }} + labels: + {{- include "dummyserver.labels" . | nindent 4 }} + annotations: + {{- range $key,$val := .Values.ingress.annotations }} + {{ $key }}: {{ $val | quote }} + {{- end }} +spec: + ingressClassName: {{ .Values.ingress.className }} + rules: + - host: {{ .Values.ingress.host }} + http: + paths: + - pathType: Prefix + path: /stats + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: {{ .Values.service.mgmtPort }} + - pathType: Prefix + path: /history + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: {{ .Values.service.mgmtPort }} + - pathType: Prefix + path: /clear + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: {{ .Values.service.mgmtPort }} + - pathType: Prefix + path: {{ .Values.ingress.basepath }} + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: {{ .Values.service.httpPort }} + {{- if .Values.ingress.tls }} + tls: + - hosts: + - {{ .Values.ingress.host }} + secretName: {{ .Values.ingress.tlsSecretName }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/dummyserver/templates/service.yaml b/charts/dummyserver/templates/service.yaml new file mode 100644 index 0000000..76ac39b --- /dev/null +++ b/charts/dummyserver/templates/service.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "dummyserver.fullname" . }} + labels: + {{- include "dummyserver.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + - port: {{ .Values.service.httpPort }} + targetPort: 8001 + protocol: TCP + name: http + - port: {{ .Values.service.httpsPort }} + targetPort: 8002 + protocol: TCP + name: https + - port: {{ .Values.service.mTLSPort }} + targetPort: 8003 + protocol: TCP + name: mtls + - port: {{ .Values.service.mgmtPort }} + targetPort: 8004 + protocol: TCP + name: mgmt + selector: + {{- include "dummyserver.selectorLabels" . | nindent 4 }} diff --git a/charts/dummyserver/templates/tests/test-connection.yaml b/charts/dummyserver/templates/tests/test-connection.yaml new file mode 100644 index 0000000..f53a75f --- /dev/null +++ b/charts/dummyserver/templates/tests/test-connection.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "dummyserver.fullname" . }}-test-connection" + labels: + {{- include "dummyserver.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wget + image: busybox + command: ['wget'] + args: ['{{ include "dummyserver.fullname" . }}:{{ .Values.service.httpPort }}'] + restartPolicy: Never diff --git a/charts/dummyserver/values.yaml b/charts/dummyserver/values.yaml new file mode 100644 index 0000000..98cf7a5 --- /dev/null +++ b/charts/dummyserver/values.yaml @@ -0,0 +1,87 @@ +# Default values for dummyserver. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: public.ecr.aws/eurotech-dev/dummy-webserver + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "0.6.0" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +container: + credentials: + user: "ethmngmtusr" + password: "9v9wHDrFJ7be" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + httpPort: 8001 + httpsPort: 8002 + mTLSPort: 8003 + mgmtPort: 8004 + +ingress: + enabled: true + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + className: "alb" + basepath: "/" + host: "example.host.local" + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/dummyserver/__main__.py b/dummyserver/__main__.py index 64e33fd..170f7e6 100755 --- a/dummyserver/__main__.py +++ b/dummyserver/__main__.py @@ -11,10 +11,10 @@ from dummyserver import handler from dummyserver import server -HTTP_PORT = int(os.environ.get('HTTP_PORT', 8080)) -HTTPS_PORT = int(os.environ.get('HTTPS_PORT', 8181)) -HTTPSM_PORT = int(os.environ.get('HTTPSM_PORT', 8282)) -MGMT_PORT = int(os.environ.get('MGMT_PORT', 8383)) +HTTP_PORT = int(os.environ.get('HTTP_PORT', 8001)) +HTTPS_PORT = int(os.environ.get('HTTPS_PORT', 8002)) +HTTPSM_PORT = int(os.environ.get('HTTPSM_PORT', 8003)) +MGMT_PORT = int(os.environ.get('MGMT_PORT', 8004)) CREDENTIALS = base64.b64encode(os.environ.get('CREDENTIALS', '').encode('UTF')) @@ -36,7 +36,7 @@ def main(): http_server = server.ThreadedHTTPServer(("", HTTP_PORT), handler.HTTPHandler) LOGGER.info("Serving HTTP server on port: {}".format(HTTP_PORT)) http_thread = threading.Thread(target=http_server.serve_forever) - http_thread.setDaemon(True) + http_thread.daemon = True http_thread.start() # Create HTTPS Endpoint @@ -46,7 +46,7 @@ def main(): https_server.socket = context.wrap_socket (https_server.socket, server_side=True) LOGGER.info("Serving HTTPS server on port: {}".format(HTTPS_PORT)) https_thread = threading.Thread(target=https_server.serve_forever) - https_thread.setDaemon(True) + https_thread.daemon = True https_thread.start() # Create HTTPS Mutual Endpoint @@ -58,7 +58,7 @@ def main(): httpsm_server.socket = contextm.wrap_socket (httpsm_server.socket, server_side=True) LOGGER.info("Serving HTTPS mutual authentication server on port: {}".format(HTTPSM_PORT)) httpsm_thread = threading.Thread(target=httpsm_server.serve_forever) - httpsm_thread.setDaemon(True) + httpsm_thread.daemon = True httpsm_thread.start() # Create Management Endpoint @@ -67,4 +67,4 @@ def main(): mgmt_server.serve_forever() if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/dummyserver/handler.py b/dummyserver/handler.py index 5376d99..d40964e 100644 --- a/dummyserver/handler.py +++ b/dummyserver/handler.py @@ -20,7 +20,12 @@ LOGGER = logging.getLogger(__name__) class BaseHTTPHandler(http.server.BaseHTTPRequestHandler): - pass + def get_header(self, header_name): + """Get header value in a case-insensitive way""" + for key in self.headers: + if key.lower() == header_name.lower(): + return self.headers[key] + return None class DummyHandler(BaseHTTPHandler): @@ -54,62 +59,86 @@ class HTTPHandler(BaseHTTPHandler): credentials = '' def do_GET(self): + response_status_code = 200 + send_extra_header = False + if self.path == '/fail': - self.send_response(self._generateRandomCode()) + response_status_code = self._generateRandomCode() elif self.path == '/delayed': time.sleep(self._generateDelay()) - self.send_response(500) + response_status_code = 500 elif ( len(HTTPHandler.credentials) > 0 ): if self._checkAuth(): - self.send_response(200) + response_status_code = 200 else: - self.send_response(401) - self.send_header('WWW-Authenticate', 'Test') + response_status_code = 401 + send_extra_header = True else: - self.send_response(200) + response_status_code = 200 - self.send_header('Content-type', CONTENT_TYPE) + self.send_response(response_status_code) + if send_extra_header: + self.send_header('WWW-Authenticate', 'Test') + self.send_header('Content-Type', CONTENT_TYPE) self.end_headers() - self._record() + self._record(response_status_code=response_status_code) def do_POST(self): body = '' + body_json = {} + response_status_code = 200 if self.path == '/fail': - self.send_response(self._generateRandomCode()) + response_status_code = self._generateRandomCode() elif self.path == '/delayed': time.sleep(self._generateDelay()) - self.send_response(500) + response_status_code = 500 elif ( len(HTTPHandler.credentials) > 0 and not self._checkAuth() ): - self.send_response(401) + response_status_code = 401 self.send_header('WWW-Authenticate', 'Test') else: try: - if 'content-length' in self.headers: - length = int(self.headers['content-length']) + content_length = self.get_header('content-length') + if content_length: + length = int(content_length) body = str(self.rfile.read(length), "utf-8") if length > 0 else '' - json.loads(body) - self.send_response(200) + if self.get_header('content-type') == 'application/json': + try: + body_json = json.loads(body) + except: pass + response_status_code = 200 except: - self.send_response(400) + response_status_code = 400 - self.send_header('Content-type', CONTENT_TYPE) + self.send_response(response_status_code) + self.send_header('Content-Type', CONTENT_TYPE) self.end_headers() - self._record(body) + self._record(body=body, json=body_json, response_status_code=response_status_code) - def _record(self, body=''): + def _record(self, body='', json=None, response_status_code=''): with lock: + if self.path not in DummyHandler._stats: DummyHandler._stats[self.path] = 0 - DummyHandler._stats[self.path] += 1 - DummyHandler._history.append({ - 'path': self.path, - 'verb':self.command , + record = { + 'timestamp': time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()), + 'requestline': self.requestline, 'body': body, + 'response_status_code': response_status_code, + 'client_address': self.client_address[0], + 'client_port': self.client_address[1], + 'request_version': self.request_version, + 'verb': self.command, + 'path': self.path, 'headers': [{h: self.headers[h]} for h in self.headers ] - }) + } + if json is not None: + record['body_json'] = json + DummyHandler._stats[self.path] += 1 + + DummyHandler._history.append(record) def _generateRandomCode(self): return random.choice(list(range(402, 418))+list(range(500, 505))) @@ -119,9 +148,13 @@ def _generateDelay(self): def _checkAuth(self): try: - credentials = self.headers['Authorization'] + credentials = self.get_header('authorization') + if not credentials: + LOGGER.info("No Authorization header present") + return False + expected = 'Basic ' + HTTPHandler.credentials.decode('UTF') - if credentials.startswith('Bearer '): + if credentials.lower().startswith('Bearer '): LOGGER.info("Got Bearer auth: {}".format(credentials)) return self._introspect(credentials[7:]) else: diff --git a/dummyserver/server.py b/dummyserver/server.py index 7dc3838..48c8611 100644 --- a/dummyserver/server.py +++ b/dummyserver/server.py @@ -2,4 +2,4 @@ import socketserver class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer): - """Handle requests in a separate thread.""" \ No newline at end of file + """Handle requests in a separate thread.""" diff --git a/requirements-dev.txt b/requirements-dev.txt index 2e90b9f..8792de8 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,4 +2,4 @@ pylint pypandoc pytest requests -setuptools \ No newline at end of file +setuptools diff --git a/script/entrypoint b/script/entrypoint index da8cbc0..7424c44 100755 --- a/script/entrypoint +++ b/script/entrypoint @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env ash # Generate dummy certificate answers() { @@ -10,12 +10,12 @@ answers() { echo localhost.localdomain echo root@localhost.localdomain } -PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` -PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` -answers | /usr/bin/openssl req -newkey rsa:2048 -keyout ${PEM1} -nodes -x509 -days 365 -out ${PEM2} 2> /dev/null +PEM1="$(/bin/mktemp /tmp/openssl.XXXXXX)" +PEM2="$(/bin/mktemp /tmp/openssl.XXXXXX)" +answers | /usr/bin/openssl req -newkey rsa:2048 -keyout "${PEM1}" -nodes -x509 -days 365 -out "${PEM2}" 2> /dev/null -cat ${PEM1} ${PEM2} > /etc/ssl/certs/dummy.crt -cat ${PEM2} > /etc/ssl/certs/dummy_ca.crt +cat "${PEM1}" "${PEM2}" > /etc/ssl/certs/dummy.crt +cat "${PEM2}" > /etc/ssl/certs/dummy_ca.crt # Start server -/usr/bin/dummyserver \ No newline at end of file +/usr/bin/dummyserver diff --git a/setup.cfg b/setup.cfg index 4521b17..b0152b5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = dummyserver -version = 0.6.0 +version = 0.8.0 summary = Dummy Web Server description-file = README.md diff --git a/setup.py b/setup.py index 6b7296b..6f5ec65 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ import setuptools setuptools.setup( - python_requires='>3.7.0', + python_requires='>3.12.0', setup_requires=['pbr>=2.0.0'], pbr=True) diff --git a/test/test_handler.py b/test/test_handler.py index a294994..92a686b 100644 --- a/test/test_handler.py +++ b/test/test_handler.py @@ -15,10 +15,10 @@ CLIENT_KEY = "test/test_handler/client.key" CLIENT_CA = "test/test_handler/rootCA.crt" -HTTP_PORT = 8080 -HTTPS_PORT = 8181 -HTTPSM_PORT = 8282 -MGMT_PORT = 8383 +HTTP_PORT = 8001 +HTTPS_PORT = 8002 +HTTPSM_PORT = 8003 +MGMT_PORT = 8004 USERNAME = "testuser" PASSWORD = "testpass" @@ -32,7 +32,7 @@ def mgmt_server(): print("Starting server") http_server = server.ThreadedHTTPServer(("", MGMT_PORT), handler.DummyHandler) http_thread = threading.Thread(target=http_server.serve_forever) - http_thread.setDaemon(True) + http_thread.daemon = True http_thread.start() yield http_server # Teardown @@ -46,7 +46,7 @@ def http_server_with_credentials(): print("Starting server") http_server = server.ThreadedHTTPServer(("", HTTP_PORT), handler.HTTPHandler) http_thread = threading.Thread(target=http_server.serve_forever) - http_thread.setDaemon(True) + http_thread.daemon = True http_thread.start() yield http_server # Teardown @@ -65,7 +65,7 @@ def https_server_with_credentials(): https_server = server.ThreadedHTTPServer(("", HTTPS_PORT), handler.HTTPHandler) https_server.socket = context.wrap_socket (https_server.socket, server_side=True) https_thread = threading.Thread(target=https_server.serve_forever) - https_thread.setDaemon(True) + https_thread.daemon = True https_thread.start() yield https_server # Teardown @@ -85,7 +85,7 @@ def https_server_with_mutual_auth_with_credentials(): https_server = server.ThreadedHTTPServer(("", HTTPSM_PORT), handler.HTTPHandler) https_server.socket = context.wrap_socket (https_server.socket, server_side=True) https_thread = threading.Thread(target=https_server.serve_forever) - https_thread.setDaemon(True) + https_thread.daemon = True https_thread.start() yield https_server # Teardown @@ -211,4 +211,4 @@ def test_mgmt_history(mgmt_server, https_server_with_credentials): content = json.loads(r.content) assert len(content) == 1 assert content[0]["path"] == '/' - assert content[0]["verb"] == 'GET' \ No newline at end of file + assert content[0]["verb"] == 'GET' diff --git a/test/test_handler/client.crt b/test/test_handler/client.crt index bd11326..f8d4e77 100644 --- a/test/test_handler/client.crt +++ b/test/test_handler/client.crt @@ -1,25 +1,26 @@ -----BEGIN CERTIFICATE----- -MIIELDCCAhSgAwIBAgIJAPH/6kL7+ErMMA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +MIIEbDCCAlSgAwIBAgIJAPH/6kL7+ErOMA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV BAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UECgwLTXlPcmcsIEluYy4xDzANBgNV -BAMMBnJvb3RjYTAeFw0xOTAzMTgxNTQ3MzhaFw0yNjAxMjAxNTQ3MzhaMEExCzAJ +BAMMBnJvb3RjYTAeFw0yNDEwMjIxNjIxMThaFw0zMTA4MjcxNjIxMThaMEExCzAJ BgNVBAYTAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UECgwLTXlPcmcsIEluYy4xDzAN -BgNVBAMMBmNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8l -MmXyjiXDhtrqGLFJifpfo6jOCuLFOIeh6G14nDPjT19xkG56luaOQq9YX+gF6V3J -YmXR0Yr0wKFW2hnqNKLyI3xKWZK0LOkrxeS+FM55SdkjeQkzLGzk0BjmBr9jipjO -ZlBL9RSAsgMkgJOFNWg7xzbpUGGkdWv+9ArpGHBEFiHmzBXlXzsUCQeGTgmgxEdo -+/DTDk0SxggSPDzUfYtbfjxVtc/dG/qkdq6SPZQeFZfq3YIPuhSGVm1ix/wDCgP+ -vjsfPo7b68q8ctCVCDEJkhnnLrRNx85b4kpw/cN7SgCkxkPKnVpLnpZRTv51E/G+ -poW4C282fwW+3WQIdh8CAwEAAaMnMCUwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM -MAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4ICAQBs+e1sVvuldsE/Jb6zHVb5 -ZQbGBMTUK0sVyMRWJ5P1f63C2fv+CP3QtLN8Ogs5NOfEwjPG7E+irNmxyBIbR6dv -95s24gdsdzmKAXRjKn3re9lkJBZY5KViGQ7Esg5b9cPZ6tsiRFYMsXICmWY9Deco -bDTgQvyHij24zkj8GggGftc61vLaoCnhbaED0PtCKwMmDhZpCmOuJnnguntaXtzG -1CavrzkpXBNkEde0SAa086aiMXFXYdvzkPKrvIlC57UTOZgyp4hfq9qEO+k1jgs+ -Tn6A5Oj2EPEeqybmXNVawBcv/mGgQOIsYQI7t8lq/iiMWf6w7XCPrHQ68cDE2jmY -eIi0q1cGccBcXm/VSJafwBe9rjjPApnorDewrX+0VARxHtTSV52XSzZNJytGk8G+ -cmzx738ZaQwJB6XqAAhCcCAr15gkbHbXEenltP5quTv0Gx3CYvQCZV2FstEmnO2i -wbi61/tRuXkbBmDxOSgzpyhwTsEAdTj89UlqZtRMrYc1J37Jhx9cXtWX6pghVSJA -b0Im7unkbxTW3C9SsC0j2o3eEsuffAPB6k1YtGmJEqZUipmOb4g/aGbzg/v9MtUz -O4iHb5/TfTIX4at1h/8ZszOvbe5WJuAPIY4bC3mj9ImXGcpRHqBvQ/B7Mt8U1WR+ -+6YLAFvfBWenH0zbBNqPmQ== +BgNVBAMMBmNsaWVudDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANoB +sSsGDCL5MRjgfn2jmYdKS36uwL4G+BlXHljNS4d2bfMZ7xNtxDOd2uXDDpJdm2l1 +oHz67t6riiR9ncydt76VafhNmWnRYg86wef5ahlKIW/sNqscuRAqgCip3lME7RK/ +kcWMi0OoRG19hQYHJNgXPwUt3N6jMNTSU2m42hzd/jg6us88n4DL4UcioxolZ5Cy +JAr1iivDfHHzfmTXkNXyVw6AWgMuPJFQw0plgNonpzQlFXQwYT37kmkdyhl2p1gM +yb4aOxkQ/B6xMthRMmNIRoTjeeREjqCmgIJ+n2WN+imqdI+YXmlEUQumf/2B35qB +I+UjTk2kjt2hvN+7K/0CAwEAAaNnMGUwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM +MAoGCCsGAQUFBwMCMB0GA1UdDgQWBBS1g0DldBoq8RqQNfTz7OP8jnwUQTAfBgNV +HSMEGDAWgBTqw64DYd68HVBxTZSK0t549WewFDANBgkqhkiG9w0BAQsFAAOCAgEA +r4L7JNHc6DRPhoVHitfo/F+EdDlfMi94F+sOGZXdck7XqNIBQxDnHOfNUOqhF6JX +uPa09wQFeU2Byuok7skbmBqb/GCodYaSioD8Uff4EKCwbI063GfAUWdZAtynLq7g +inhBY9rLViQg6YnaiylJwfVNukH6QjEkoRECWswX0SGcRUqPP73QhIqL4XdiD7Oe +kPhcIiodnloa8d4I5pTB9dfr137e49AodTaYAiRJEhOcnJK35XKYbgFHVL+503Jj +3R51ZTCxyDemI5ALWD1RL8DXlIyUU6pT5q21JvnS2yJQ+WY1aPsudasdS0RloxKz +znW2LWYC4RHWn4BjwZOiLp/f+QbNmg8KmKiudt5yIYS9zdoOHtRlXcW20Y1vHsJw +Xc2I6Z9l7QsCkgsHEl79Vs9tmP89c6e0W+PZmT2zs3A+pEn98RBFWPv+w7O4iZ8n +Ba0dO2zdHa4IKO9x2JW4pC/zKJjRg14D+3x5RUr4yQFvPRnDP6A0H0VufImn2RiB +5pgaHaYWyFQo3nPOFZaYoMC9b/DyAWyXZi6bigHiyOn1yOqSFgB5vG75KAi8N/9+ +YmAZcXJLbftr2/xOtk588oo2BLHD5d+O4fAVSWLZjqXBHu3hGPnJt5l+4k6h9AFG +pinhEHuqJxUNVbSwhBSFPKSrGEl5Bql15Tnaxs/+9jI= -----END CERTIFICATE----- diff --git a/test/test_handler/client.csr b/test/test_handler/client.csr index c31fb7e..d2dbcf5 100644 --- a/test/test_handler/client.csr +++ b/test/test_handler/client.csr @@ -1,18 +1,18 @@ -----BEGIN CERTIFICATE REQUEST----- MIIC2DCCAcACAQAwQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQK DAtNeU9yZywgSW5jLjEPMA0GA1UEAwwGY2xpZW50MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAzyUyZfKOJcOG2uoYsUmJ+l+jqM4K4sU4h6HobXicM+NP -X3GQbnqW5o5Cr1hf6AXpXcliZdHRivTAoVbaGeo0ovIjfEpZkrQs6SvF5L4UznlJ -2SN5CTMsbOTQGOYGv2OKmM5mUEv1FICyAySAk4U1aDvHNulQYaR1a/70CukYcEQW -IebMFeVfOxQJB4ZOCaDER2j78NMOTRLGCBI8PNR9i1t+PFW1z90b+qR2rpI9lB4V -l+rdgg+6FIZWbWLH/AMKA/6+Ox8+jtvryrxy0JUIMQmSGecutE3HzlviSnD9w3tK -AKTGQ8qdWkuellFO/nUT8b6mhbgLbzZ/Bb7dZAh2HwIDAQABoFIwUAYJKoZIhvcN +AAOCAQ8AMIIBCgKCAQEA2gGxKwYMIvkxGOB+faOZh0pLfq7Avgb4GVceWM1Lh3Zt +8xnvE23EM53a5cMOkl2baXWgfPru3quKJH2dzJ23vpVp+E2ZadFiDzrB5/lqGUoh +b+w2qxy5ECqAKKneUwTtEr+RxYyLQ6hEbX2FBgck2Bc/BS3c3qMw1NJTabjaHN3+ +ODq6zzyfgMvhRyKjGiVnkLIkCvWKK8N8cfN+ZNeQ1fJXDoBaAy48kVDDSmWA2ien +NCUVdDBhPfuSaR3KGXanWAzJvho7GRD8HrEy2FEyY0hGhON55ESOoKaAgn6fZY36 +Kap0j5heaURRC6Z//YHfmoEj5SNOTaSO3aG837sr/QIDAQABoFIwUAYJKoZIhvcN AQkOMUMwQTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGgYD -VR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQC0HXQG -LnDpGorsenSz4selWCPXy/9lIjP+1L/4FR0aBXi17nrKSlrgif14ZSDfSTcMolar -zRfb/gCrketrJ755fZOJbLf0own0q2NOhSqJqHMKj7MKpNu0A6WxgsomasCmKTxf -X56MnNRf3n5oAEbVdIP9bWRDVanWzUhxwmjEgyl22WMglBw726wgJikXJ+LprwOf -YFQFoFVT8vRfgwtYvjC8mAG1mjUMcPy+CPMIknLXOdA5IAxp4Zng+xrgzmQN3TLP -HZHCDbrSh4dDmfT64VfoZdy3xEIlgYGaDWkyKFLpjK3bu7uHY6mkpaQPcucKdz0k -2HfM7vTwvXiQzr+B +VR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQARz1l6 ++CNFMtlEEGMGzzzK+G/dOeh2qEYifznBjs7RiK7R3ZV9o4GHymLcOW4g524d7ktX +/qThCVlz8wUjr6O1DyUvW9tOcm/ZM6wGIXxrf3/p6fv+9SHV1JnZYrLjNjfSCyeo +nTvlOcyZjdXqifHywxvZlrXJrLGWgBleQZVm+/GX2c9sIvo6OaBpHAif3cPzrHc/ +914QRkS2MZHHkxnL+nmFhXAeWPVwNOGLXMuElFevmuvFnhupwNKOhnV49b41284a +6AP0svXejEHTg/EY3YnGXMftpXOInL4qcx2lJZEFctCXXPO2+8iTDo3JgecL2TcT +UDIvsFMif+rtAADS -----END CERTIFICATE REQUEST----- diff --git a/test/test_handler/client.key b/test/test_handler/client.key index e0b1896..94ef5d9 100644 --- a/test/test_handler/client.key +++ b/test/test_handler/client.key @@ -1,27 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAzyUyZfKOJcOG2uoYsUmJ+l+jqM4K4sU4h6HobXicM+NPX3GQ -bnqW5o5Cr1hf6AXpXcliZdHRivTAoVbaGeo0ovIjfEpZkrQs6SvF5L4UznlJ2SN5 -CTMsbOTQGOYGv2OKmM5mUEv1FICyAySAk4U1aDvHNulQYaR1a/70CukYcEQWIebM -FeVfOxQJB4ZOCaDER2j78NMOTRLGCBI8PNR9i1t+PFW1z90b+qR2rpI9lB4Vl+rd -gg+6FIZWbWLH/AMKA/6+Ox8+jtvryrxy0JUIMQmSGecutE3HzlviSnD9w3tKAKTG -Q8qdWkuellFO/nUT8b6mhbgLbzZ/Bb7dZAh2HwIDAQABAoIBABH3M+vLobB8yNFr -xEB8FE92xAb79827NS/uRu5Xq5SEfnnUq6YpU7UjWX1DuO2ytY7AzJvwGrBmkd5s -XfYpbe9D+PfqquIiZlLCzSMNqVhPBKykevblTVEUd0fxi1xGEds264DDVbo1fzru -i4g/4WXs6VZF3gbZ8KUxM5FOriPuW8ZopLqsBjOfpj0ruOmDGBD7rMcAqMAniHNf -AZTSLi0qBMNuud63cvLHDoumlDYV08WpALSdiym9EGsUMlzi44xEt/shZwcDBwf7 -sMonRRbbJDDDpgOh5JfXBCznL0a/hs3weJfLnVgkeEj4eLE09WPjgFR5tZM4Clca -rRtNdGECgYEA9WvubYwfBV/yyGyHlgYJXVbAcGWuhWuTwM3dhzCcJLPqzSzC2i/o -Ob3lDjgo7E/AVydhT6wIagbYVXwpGf0InMW8tmXzcQbcaDaN3mRN1N/Ipr0ECWxY -94vXntE2GzsiBrh2sqxYMrT5VeC9WiW9KQJ0a7bzbC1wmGO1ynX+SbsCgYEA2BLp -Rm2jAFW7YYlugEpkWOJwE8zVo1OzmS8PjWvknsVqesTVGKHg/eF/wPoNzhWdQUFN -RpodqXFLisEYpXreTZLrL0scNlzZOqkjMfmybTtDqiaq/goq2YzCDlTeGNoxYPEE -huDw1X0QsDvCXIpG1/r1ui2eKCH+OBn5B9ntXO0CgYB5pERqEbBydoscYgaWCmnr -1IrPauakhJyYTLFHR4Ws/2waw9vUTzh4HjIA6T8HWcQIrqEh3y/QdZIWVNL+aZcy -NSQC9+dAl1j5YkjQ+MBHCaAnXLo6fXRfRfXaZvG9b4K++AEFMD0K7P5EXX8cxmXK -hMf1d5mRfbg4H/vD3NXr7wKBgQCbNwqH4x4ikXNnn3fXhJkNGKx2LMCS8P+k3J+J -caXrP9k7k8WYSkD7X0+MapQcJH6wb555RyBjpdUkOY3g4aBrjUyQzp3Xl18cun9j -2QEJYnc69UgD8X3ShUCpVuGsbKDoCHq+ATw/v/WLA4KdQ1+cqtR2B2sDXVfnKREx -SKUwCQKBgG0meA+TVf6Z4+D9vrp8C0em/BwLBKw3062dWySNxVoZm3ilfKFqO+hr -JyEbD1r13nuscrssl1Px05+GTKFggWAr9ilBbHmiWgnr5eRlYTmRKhK0JysryNtY -KnryeHQm5cGopL6ocHQedQOJNmTP5Du1+ag23dJZ2iVUzPWwP/x0 ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDaAbErBgwi+TEY +4H59o5mHSkt+rsC+BvgZVx5YzUuHdm3zGe8TbcQzndrlww6SXZtpdaB8+u7eq4ok +fZ3Mnbe+lWn4TZlp0WIPOsHn+WoZSiFv7DarHLkQKoAoqd5TBO0Sv5HFjItDqERt +fYUGByTYFz8FLdzeozDU0lNpuNoc3f44OrrPPJ+Ay+FHIqMaJWeQsiQK9Yorw3xx +835k15DV8lcOgFoDLjyRUMNKZYDaJ6c0JRV0MGE9+5JpHcoZdqdYDMm+GjsZEPwe +sTLYUTJjSEaE43nkRI6gpoCCfp9ljfopqnSPmF5pRFELpn/9gd+agSPlI05NpI7d +obzfuyv9AgMBAAECggEAJRS5GR+R9Gfs4zWaJk4ruNCZBz77r0bZr9u64HFo6a1p +9bnhSa13vCzbNQ4IvjoYS2eTyPZYp3zHhj3sl4dzH8Jj0DWIxPA1rO/6V/X7Rzpt +9g7YXKIJ01dbTa9ZDsdteK0ngxHNBVDLdNEvDW+tI2lO0ZdztFXPIj/1Kqwjw1lp +rK/OvBB32CHoAofcYM3ruCZTifnyEqyI3Gpe2LOEI9axadh8H9+CJF4GXYUUAq3C +XXXCnFNjbXjRi4MzI2vBToU1TgT4dTr9uX4qOc6vz8GIkRIoEKA1dfjG3Kizye/l +steQ+HJ67kLP1oDOScGOGnGSs4iWjigTwjg5W2Rv8QKBgQD1y0X9R6gD0KMNAXW4 +IckJenrwiQSvGUUrFsucoNRgA2HtmjpSiLklJQDv35wLZ3DI2R9MpHbeI0tTuNHr +nALN5g2bZ8FfDO4vYoy3EuYmMf6Jg8DR7QK8V0HOIju9WA/WsihhJhlT0TyP/z4g +ZZZpezxwX3zBraWnRCo2O293EQKBgQDjDwupWg8A/Fu9cLuN+V7C2G6iluz9nux+ +OE5ty4OHvPC77uYtrzSlDwjOWLV0jtucr91zMd3t5Wi2mxrxnJQmjnTKVGOEF2bO +ib9ofJdoetxnkLt4SgSNwoM9HGQ9x1dHM3qSCt/lBdhFY+nohFQGku3X2FGsWgdk +bpu5JrteLQKBgEcXCuAtuHeaAX7CfFTMWMQIC8TELHmkWnATAMMFdUdr0wgQwmua +pcoLgNDgINbfjSxaOAZHzyWCmcfWPcjib6Ezt53KDZC7Qays2TweGDjV3uPRGpTc +8xycNCk1l4e1D6euEaW/ijXG37haP5LJLw7FGP77by7pVW8idP8Ig72xAoGAMJAq +PVluthZDhNwUsUPxuZjS6OGA5KnWCRT/6UnK4wBNONTa1FCR4O+7QW8FuF1JqVSP +97BluBkF8XBxLdYAddKoNhIgisL6kRgzISTsuUL12wzAm/SwzqUYrrxg0DnPeAIR +qCS9SF2cqRK6l6md0x4f0reImGVVCW0Cz3HyRy0CgYEA2rxUys8q4+8i19Dv1xFE +33WST3rl5wQf3I/LLIWWUhroP83EP5FxPZEy3enwYv76ZjaPJClsAGV3h0v0Q2ua +a1iNoET4tzN2FuPl86d2fpjswu98JP/o5maasOcK5H26FPerVcOyTag0q5Ni4tuL +Cq15mTG/dPvHycR4iMFIbgc= +-----END PRIVATE KEY----- diff --git a/test/test_handler/rootCA.crt b/test/test_handler/rootCA.crt index 383f62e..0d90a40 100644 --- a/test/test_handler/rootCA.crt +++ b/test/test_handler/rootCA.crt @@ -1,29 +1,31 @@ -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/test/test_handler/rootCA.key b/test/test_handler/rootCA.key index 1813e4a..62a3a0f 100644 --- a/test/test_handler/rootCA.key +++ b/test/test_handler/rootCA.key @@ -1,51 +1,52 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +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 +mXLmJTu0A5XmHvmy2Kpe4zI04N6oyg== +-----END PRIVATE KEY----- diff --git a/test/test_handler/rootCA.srl b/test/test_handler/rootCA.srl index 10b30ab..fe22107 100644 --- a/test/test_handler/rootCA.srl +++ b/test/test_handler/rootCA.srl @@ -1 +1 @@ -F1FFEA42FBF84ACC +F1FFEA42FBF84ACE diff --git a/test/test_handler/server-bundle.crt b/test/test_handler/server-bundle.crt index 0c6303c..4aee787 100644 --- a/test/test_handler/server-bundle.crt +++ b/test/test_handler/server-bundle.crt @@ -1,81 +1,86 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAtlpAtX2kYhoM+6EaxlLdnGBaAO0Jtpt7j86y2yEOckIY7cQg -CPq//z07KdoyRyKWihKmUXBBOltRuH1vkwJqIib3UKgDE03BHjTT7+58Vsl2kYzF -LyMQi7Av+b+UOyLOjqwAT5OoxMkaA65lDn3bg7t5gtPgnuTLtVZpBcza4YO5g/7X -F2+8nVBfLx0IjJA6rMGxTp6SnDRrv76uBAN+l3BTnhISx2bDSqc1AuQ32Eu8Umr8 -o7n4ug45QLAlPuaZnvM8XPYdvrtV6zrYtVRKMB0zd9mq39g09Uv+8cGfYmixHxds -nAUp1IN8jnTj9vrkZrbcMHfs7i+6bjG2RKm3JQIDAQABAoIBAAQhxWeXYjsq1fJ5 -sw6dYBIkCMYOmPK/USxwBZN7i0VBhCkXEZbCf8k7zPRk0lDUUs7sH0KnJYM6AH8K -sJWHL3p4oY/9TpyIXYDet5KvN7gLtpkTtIAd7kkMA/pHwgcZAc8vzI4BDYjv+Zvt -vrJ2XZv9ioJRZLyU+JyySYztGGSVuq/nQVpVM+NpXgR+MIoHnanMDQSJZeTxfqyj -d7qzHkaWEL3WEGfAnauQ4KhRYLvJpnOyaqPl0hDXJEXH7+HTYG5HwJKJTZBVES3O -jfFs1xHqJlqT5eLGoV9yzYYKVebisDneYoUMx0mT3dcqBP3DI/GQy0fdqQkPTlTE -Tok4QYECgYEA7SGaUHN0yAhA1WusZ/FSdciWqKgj2InpDB1anrDYnAvTkup7/y7r -F+zfOTF9AbxRdJ8B0VBPqEzcKkPIHhD8wE9G7NZXfCpV6KgvwcYruNRytDdy+Ytl -GDdfL9a9gc6grHMrMfxXGEuU1yCAfQKwfXO9/KnwPEwpokLNM+zqv8UCgYEAxNzM -xy+FWM7EeWkSUv4qr8nXdM9vyrwINQfnh8wKIo2fSDerwZHBlk2niSUBqhl/fyaX -I6+8uSBGCU/2ZQAvc1CtBo4NzkqtOb0kTT2iMLBxu/riY6NQx+mCcudSvE+V1Vcs -draOdn6P7oSP3yXqmotpIDsIe5W5qHKm/+y6L+ECgYA+LwuqgTxkoFVwIhZKA6ye -GoX3oHAV/sRQWvpClxmWgjtvUXJGzuTzlzhKZUHkzJ+Ht5LgcvEQr2ck5jV6PPYq -8B8nSGYUt31jz4cGh5M7muqhe9D4w6c1HIAnqWZ0vdzAnEr9hrDIPDnB2FIZdjUW -EN4HfgDzrv1UAbSSI1TECQKBgQDDkV5V2p2sNez1eC5eCGW7sNa8En9KdjXpCOs3 -+rluziaYhcW5TOV2PbrcAcl/hEkmtd2b9C+V8bvh8HAksmRxOIpLYr/QWltwargv -i7UejYrPZlOVDF9p2k5fe/KzZJTDFhDz9jPc/6pZF5Qd6PsBgNF01XB95aZE83F3 -+WKVwQKBgHDQwlxiP4eLfCYCqpb2uilkUw3rpifr2DqDU3pMIhGGetcvusemBZW4 -688lUVAi0V6nGQQWZCn6YQ7bCwM8Ot2U7vsAKiqh1TF3UKyu98alB/5tItXLARYx -V6dI5022WO17EvH/3CDVuPp/PFJKJrb4oGxyC395O1JBR7v0AXX/ ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7tAs3j6EZo//2 +osyTDVF9ZpMkjW8nFv0/XAco/Bs+srwNvfL2P3SRo/8Ar3xO6je7ljGsu47tsSM9 +T2mULFRFvnByVLM4mntj4sDI6FEXg6bZCYIIw3iBuUvYoT1D3kw0YLBNPPRHOYrG +RXkzyh6YfWIo7mTKBE7HE2v2vxu3spDQY+eGHzgBfLcXHLbrda/6uTZKn9SuLSqU +qOMIURJ1aKYISPF0UzAmgp2ltd+65d2HegTtRKvofz9DhD0lr1zP6snrqlMsb3ZW +cF1dG12s1j62eYKjuqHdujoA5t/RsTE6iO3CNkB1MxZv8kvvvgtK/FJwFOjml+49 +lDsOoRynAgMBAAECggEADNbVwOuuA9sldOE8PWohowJuBIfjd1jfDW3wlBub4M/e +BXydjr2Bbj2PAaTUoRtBS69hiiSxiU20EOC1N+xI/r+g4RktFy1DTRj4weVY4qhf +3yRY2jDwtcLkeWwct4nloYbkQwGX3fqwJObMpxUSFFvYkonX/Wo1BJtYp7dOdeP+ +0yiIrWYHwzEGyMyMDaQV8EVdMa5RZDF+5hZwFOFUr9OvJrMSOLlUIP7Dy6DYYhhl +F5FGe2i/k580HHruDugu1Sn3O/dpbyE1FUBQMjL6Hro/rfOpfEaxtdCzaHwu9KoK +52tLOxz1zheNX8uycDP/7vpbWz3XagOJB803hFe9DQKBgQDfLbQswUxs4Rz+k1gi +7NiviiNU/+ohCluMSZb+iGiKXUXRa59GbP0g5D0D9tH+1gakDaAqXE3EZFuPIvzh +lRNoyZj690vG1yX7eh8PofGIXLwAnmz2B6BCQfIjHEd3UaXMPpxWCKiG66ZDnzT5 +bSYVwmOuz81R8l/d9PTbNcYHywKBgQDXTsHSn9DfBmcDRJRSYyHbI2NwEM2HtvS+ +RKx6+g4dETbnoCmBivRvPJ/XR2Uq4RPY4c/WljljDhMCT+zLzGe8BW+4GMHLvQD6 +9BIF2h/Zkx/wgzMoMOwldrviZr6jszPl9jsTy2XoMMa7TjyvfsB/QdzLxqnBvDWu +f2lwHA5LFQKBgQDJDqKP40BXomH9kn5HUHpRgjAcZkTlqTAabT2DZx5O8IJyjPM7 +ffp4xEWXqac7XlMzPjc5klhZAlRd2hZZn3SR5XRVO65fnvnP2Q/chHdU8r5IDHF7 +IBmnN0PNj69udfbYztsGwtwYWHk72FTgFA3IcoxdM0X0elcVXZWtWn9iCwKBgEhi +ePUnt6ATVfSaTMc5/rreteKKM58J2lRRYC9j+/S3wd6zUOD1Z2IyXoaQwSleTD7h +A+/fx2FO7QMc/b4ydTmYFkwtPpIRc8/q2FhRUd3jAZzpbvx3Hh0mQtpFspf0emE4 +m/n2qscaBuYX0n0pvuvJp8J2gsHYVa/ZtAf11rRVAoGASXsc4ycAmToAV0o63jCC +pPC5m/EtOyzI8Jv531Gdw9RxUfEl6kweNjreZThbZQdlhZp3YQgWcBDLvCnbJpXw +BMSY2EU5LjlCdZCjG6KJDZNzSyQvDaykU3T59gthohrKzJUXmeUf8i1+dhtFJv0D +16516ZJKrugF4euVflDcWno= +-----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -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 +3HkVpmv1ZEPdojRIPuU= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- -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 -----END CERTIFICATE----- diff --git a/test/test_handler/server.crt b/test/test_handler/server.crt index 66f63c4..ed7b69b 100644 --- a/test/test_handler/server.crt +++ b/test/test_handler/server.crt @@ -1,25 +1,27 @@ -----BEGIN CERTIFICATE----- -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 +3HkVpmv1ZEPdojRIPuU= -----END CERTIFICATE----- diff --git a/test/test_handler/server.csr b/test/test_handler/server.csr index 539961a..24fe7f9 100644 --- a/test/test_handler/server.csr +++ b/test/test_handler/server.csr @@ -1,18 +1,18 @@ -----BEGIN CERTIFICATE REQUEST----- MIIC2DCCAcACAQAwQTELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQK DAtNeU9yZywgSW5jLjEPMA0GA1UEAwwGY2xpZW50MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtlpAtX2kYhoM+6EaxlLdnGBaAO0Jtpt7j86y2yEOckIY -7cQgCPq//z07KdoyRyKWihKmUXBBOltRuH1vkwJqIib3UKgDE03BHjTT7+58Vsl2 -kYzFLyMQi7Av+b+UOyLOjqwAT5OoxMkaA65lDn3bg7t5gtPgnuTLtVZpBcza4YO5 -g/7XF2+8nVBfLx0IjJA6rMGxTp6SnDRrv76uBAN+l3BTnhISx2bDSqc1AuQ32Eu8 -Umr8o7n4ug45QLAlPuaZnvM8XPYdvrtV6zrYtVRKMB0zd9mq39g09Uv+8cGfYmix -HxdsnAUp1IN8jnTj9vrkZrbcMHfs7i+6bjG2RKm3JQIDAQABoFIwUAYJKoZIhvcN +AAOCAQ8AMIIBCgKCAQEAu7QLN4+hGaP/9qLMkw1RfWaTJI1vJxb9P1wHKPwbPrK8 +Db3y9j90kaP/AK98Tuo3u5YxrLuO7bEjPU9plCxURb5wclSzOJp7Y+LAyOhRF4Om +2QmCCMN4gblL2KE9Q95MNGCwTTz0RzmKxkV5M8oemH1iKO5kygROxxNr9r8bt7KQ +0GPnhh84AXy3Fxy263Wv+rk2Sp/Uri0qlKjjCFESdWimCEjxdFMwJoKdpbXfuuXd +h3oE7USr6H8/Q4Q9Ja9cz+rJ66pTLG92VnBdXRtdrNY+tnmCo7qh3bo6AObf0bEx +OojtwjZAdTMWb/JL774LSvxScBTo5pfuPZQ7DqEcpwIDAQABoFIwUAYJKoZIhvcN AQkOMUMwQTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGgYD -VR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQAGVD7Q -hsSM/JZULPT8kVT3qxiuNSp6XqiyBJ8mPyRyzlObVWthk57FTrk62NMmmdEwFWM4 -wdoAMNo1ATvQ+OuI/IXJfFRWCRzsDo1hu+2ayHsRhQ5rB3c/whHH81wszOy3aiqN -LljgUnoHU55zt6/2hYB8oBcJW5A6ySjKpqsSV6/Dkqe0r34QgAFYe++gMBon0qGE -NfPEon+14+Ln0mZJ9TMqV7VkZnvsec6GXxUIllps0DTrczIvej1h5UmEyJkXUkA8 -LcKtXy7nvxoaqNy0nfn3RMS59iC3Tnl4F75CLCmfWM0sx9KUR/gRuedmxDfmWjDC -9EcJJeFB/LniwWdj +VR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBCwUAA4IBAQBi/YOb +95o0RcGjZnZfwPX+AG1MyoolinnXiTNvzdVrUQAnu/0y+KU5TY7l3Lcy+hSL/Rgy +5sTrCuQnaG/DcRTDN3JNvuLFLrwjrozjA7M6aUA8/qYeejHxLlHlbf6LjDQUdBVJ +2eU/Zf7umHnzJ97138HHDefg2pGCWqiO/BRw8idoX55cqA5fYgW1yVorVpU+hUl+ +uKVFFL4nxKYjXhzb5Uv7Z9dsr8YZirV8x9mF7Q+3TzEn3b6bpOdP7beb/AzJ6C16 +8QNipMzmodPu8ZSb1hqoNhjUPENsDizF3wQl7OBshyNM6mhoqGOTVIIhvdwkfGmM +vZ+sNTGB6rQBi9N/ -----END CERTIFICATE REQUEST----- diff --git a/test/test_handler/server.key b/test/test_handler/server.key index 8926cfa..ffc39ab 100644 --- a/test/test_handler/server.key +++ b/test/test_handler/server.key @@ -1,27 +1,28 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAtlpAtX2kYhoM+6EaxlLdnGBaAO0Jtpt7j86y2yEOckIY7cQg -CPq//z07KdoyRyKWihKmUXBBOltRuH1vkwJqIib3UKgDE03BHjTT7+58Vsl2kYzF -LyMQi7Av+b+UOyLOjqwAT5OoxMkaA65lDn3bg7t5gtPgnuTLtVZpBcza4YO5g/7X -F2+8nVBfLx0IjJA6rMGxTp6SnDRrv76uBAN+l3BTnhISx2bDSqc1AuQ32Eu8Umr8 -o7n4ug45QLAlPuaZnvM8XPYdvrtV6zrYtVRKMB0zd9mq39g09Uv+8cGfYmixHxds -nAUp1IN8jnTj9vrkZrbcMHfs7i+6bjG2RKm3JQIDAQABAoIBAAQhxWeXYjsq1fJ5 -sw6dYBIkCMYOmPK/USxwBZN7i0VBhCkXEZbCf8k7zPRk0lDUUs7sH0KnJYM6AH8K -sJWHL3p4oY/9TpyIXYDet5KvN7gLtpkTtIAd7kkMA/pHwgcZAc8vzI4BDYjv+Zvt -vrJ2XZv9ioJRZLyU+JyySYztGGSVuq/nQVpVM+NpXgR+MIoHnanMDQSJZeTxfqyj -d7qzHkaWEL3WEGfAnauQ4KhRYLvJpnOyaqPl0hDXJEXH7+HTYG5HwJKJTZBVES3O -jfFs1xHqJlqT5eLGoV9yzYYKVebisDneYoUMx0mT3dcqBP3DI/GQy0fdqQkPTlTE -Tok4QYECgYEA7SGaUHN0yAhA1WusZ/FSdciWqKgj2InpDB1anrDYnAvTkup7/y7r -F+zfOTF9AbxRdJ8B0VBPqEzcKkPIHhD8wE9G7NZXfCpV6KgvwcYruNRytDdy+Ytl -GDdfL9a9gc6grHMrMfxXGEuU1yCAfQKwfXO9/KnwPEwpokLNM+zqv8UCgYEAxNzM -xy+FWM7EeWkSUv4qr8nXdM9vyrwINQfnh8wKIo2fSDerwZHBlk2niSUBqhl/fyaX -I6+8uSBGCU/2ZQAvc1CtBo4NzkqtOb0kTT2iMLBxu/riY6NQx+mCcudSvE+V1Vcs -draOdn6P7oSP3yXqmotpIDsIe5W5qHKm/+y6L+ECgYA+LwuqgTxkoFVwIhZKA6ye -GoX3oHAV/sRQWvpClxmWgjtvUXJGzuTzlzhKZUHkzJ+Ht5LgcvEQr2ck5jV6PPYq -8B8nSGYUt31jz4cGh5M7muqhe9D4w6c1HIAnqWZ0vdzAnEr9hrDIPDnB2FIZdjUW -EN4HfgDzrv1UAbSSI1TECQKBgQDDkV5V2p2sNez1eC5eCGW7sNa8En9KdjXpCOs3 -+rluziaYhcW5TOV2PbrcAcl/hEkmtd2b9C+V8bvh8HAksmRxOIpLYr/QWltwargv -i7UejYrPZlOVDF9p2k5fe/KzZJTDFhDz9jPc/6pZF5Qd6PsBgNF01XB95aZE83F3 -+WKVwQKBgHDQwlxiP4eLfCYCqpb2uilkUw3rpifr2DqDU3pMIhGGetcvusemBZW4 -688lUVAi0V6nGQQWZCn6YQ7bCwM8Ot2U7vsAKiqh1TF3UKyu98alB/5tItXLARYx -V6dI5022WO17EvH/3CDVuPp/PFJKJrb4oGxyC395O1JBR7v0AXX/ ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7tAs3j6EZo//2 +osyTDVF9ZpMkjW8nFv0/XAco/Bs+srwNvfL2P3SRo/8Ar3xO6je7ljGsu47tsSM9 +T2mULFRFvnByVLM4mntj4sDI6FEXg6bZCYIIw3iBuUvYoT1D3kw0YLBNPPRHOYrG +RXkzyh6YfWIo7mTKBE7HE2v2vxu3spDQY+eGHzgBfLcXHLbrda/6uTZKn9SuLSqU +qOMIURJ1aKYISPF0UzAmgp2ltd+65d2HegTtRKvofz9DhD0lr1zP6snrqlMsb3ZW +cF1dG12s1j62eYKjuqHdujoA5t/RsTE6iO3CNkB1MxZv8kvvvgtK/FJwFOjml+49 +lDsOoRynAgMBAAECggEADNbVwOuuA9sldOE8PWohowJuBIfjd1jfDW3wlBub4M/e +BXydjr2Bbj2PAaTUoRtBS69hiiSxiU20EOC1N+xI/r+g4RktFy1DTRj4weVY4qhf +3yRY2jDwtcLkeWwct4nloYbkQwGX3fqwJObMpxUSFFvYkonX/Wo1BJtYp7dOdeP+ +0yiIrWYHwzEGyMyMDaQV8EVdMa5RZDF+5hZwFOFUr9OvJrMSOLlUIP7Dy6DYYhhl +F5FGe2i/k580HHruDugu1Sn3O/dpbyE1FUBQMjL6Hro/rfOpfEaxtdCzaHwu9KoK +52tLOxz1zheNX8uycDP/7vpbWz3XagOJB803hFe9DQKBgQDfLbQswUxs4Rz+k1gi +7NiviiNU/+ohCluMSZb+iGiKXUXRa59GbP0g5D0D9tH+1gakDaAqXE3EZFuPIvzh +lRNoyZj690vG1yX7eh8PofGIXLwAnmz2B6BCQfIjHEd3UaXMPpxWCKiG66ZDnzT5 +bSYVwmOuz81R8l/d9PTbNcYHywKBgQDXTsHSn9DfBmcDRJRSYyHbI2NwEM2HtvS+ +RKx6+g4dETbnoCmBivRvPJ/XR2Uq4RPY4c/WljljDhMCT+zLzGe8BW+4GMHLvQD6 +9BIF2h/Zkx/wgzMoMOwldrviZr6jszPl9jsTy2XoMMa7TjyvfsB/QdzLxqnBvDWu +f2lwHA5LFQKBgQDJDqKP40BXomH9kn5HUHpRgjAcZkTlqTAabT2DZx5O8IJyjPM7 +ffp4xEWXqac7XlMzPjc5klhZAlRd2hZZn3SR5XRVO65fnvnP2Q/chHdU8r5IDHF7 +IBmnN0PNj69udfbYztsGwtwYWHk72FTgFA3IcoxdM0X0elcVXZWtWn9iCwKBgEhi +ePUnt6ATVfSaTMc5/rreteKKM58J2lRRYC9j+/S3wd6zUOD1Z2IyXoaQwSleTD7h +A+/fx2FO7QMc/b4ydTmYFkwtPpIRc8/q2FhRUd3jAZzpbvx3Hh0mQtpFspf0emE4 +m/n2qscaBuYX0n0pvuvJp8J2gsHYVa/ZtAf11rRVAoGASXsc4ycAmToAV0o63jCC +pPC5m/EtOyzI8Jv531Gdw9RxUfEl6kweNjreZThbZQdlhZp3YQgWcBDLvCnbJpXw +BMSY2EU5LjlCdZCjG6KJDZNzSyQvDaykU3T59gthohrKzJUXmeUf8i1+dhtFJv0D +16516ZJKrugF4euVflDcWno= +-----END PRIVATE KEY-----