From 71086952785630e763fe90bc3cfffa6545a01558 Mon Sep 17 00:00:00 2001 From: hellska Date: Fri, 23 Jun 2023 17:56:53 +0200 Subject: [PATCH 1/6] create kubernetes charts to deploy the dummy webserver with alb ingress controller --- .../dummyserver-stage-config.yaml | 9 + charts/dummyserver.template.yaml | 163 ++++++++++++++++++ charts/dummyserver/.helmignore | 23 +++ charts/dummyserver/Chart.yaml | 24 +++ charts/dummyserver/templates/NOTES.txt | 22 +++ charts/dummyserver/templates/_helpers.tpl | 62 +++++++ charts/dummyserver/templates/deployment.yaml | 69 ++++++++ charts/dummyserver/templates/ingress.yaml | 46 +++++ charts/dummyserver/templates/service.yaml | 23 +++ .../templates/tests/test-connection.yaml | 15 ++ charts/dummyserver/values.yaml | 90 ++++++++++ 11 files changed, 546 insertions(+) create mode 100644 charts/dummyserver-stage-config/dummyserver-stage-config.yaml create mode 100644 charts/dummyserver.template.yaml create mode 100644 charts/dummyserver/.helmignore create mode 100644 charts/dummyserver/Chart.yaml create mode 100644 charts/dummyserver/templates/NOTES.txt create mode 100644 charts/dummyserver/templates/_helpers.tpl create mode 100644 charts/dummyserver/templates/deployment.yaml create mode 100644 charts/dummyserver/templates/ingress.yaml create mode 100644 charts/dummyserver/templates/service.yaml create mode 100644 charts/dummyserver/templates/tests/test-connection.yaml create mode 100644 charts/dummyserver/values.yaml 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..218cfbc --- /dev/null +++ b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml @@ -0,0 +1,9 @@ +ingress: + annotations: + # Simple configuration for AWS ALB Ingress Controller (https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/ingress/annotation/) + alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]' + alb.ingress.kubernetes.io/scheme: internet-facing + alb.ingress.kubernetes.io/target-type: ip + # alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:332696098873:certificate/1021f82e-83ad-420e-bac9-f6640d89e129 + # alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-2019-08 + # alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' \ No newline at end of file diff --git a/charts/dummyserver.template.yaml b/charts/dummyserver.template.yaml new file mode 100644 index 0000000..7a99ea4 --- /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: 8080 + targetPort: 8080 + protocol: TCP + name: http + - port: 8181 + targetPort: 8181 + protocol: TCP + name: https + - port: 8383 + targetPort: 8383 + 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: 8080 + protocol: TCP + - name: https + containerPort: 8181 + protocol: TCP + - name: mgmtport + containerPort: 8383 + 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: 8383 + - pathType: Prefix + path: /history + backend: + service: + name: dummyserver + port: + number: 8383 + - pathType: Prefix + path: /clear + backend: + service: + name: dummyserver + port: + number: 8383 + - pathType: Prefix + path: / + backend: + service: + name: dummyserver + port: + number: 8080 + +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..e8ca9fb --- /dev/null +++ b/charts/dummyserver/templates/NOTES.txt @@ -0,0 +1,22 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + {{- end }} +{{- 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:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$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..56d9133 --- /dev/null +++ b/charts/dummyserver/templates/deployment.yaml @@ -0,0 +1,69 @@ +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: 8080 + protocol: TCP + - name: https + containerPort: 8181 + protocol: TCP + - name: mgmtport + containerPort: 8383 + 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..171c189 --- /dev/null +++ b/charts/dummyserver/templates/ingress.yaml @@ -0,0 +1,46 @@ +--- +{{- 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: + - http: + paths: + - pathType: Prefix + path: /stats + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: 8383 + - pathType: Prefix + path: /history + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: 8383 + - pathType: Prefix + path: /clear + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: 8383 + - pathType: Prefix + path: {{ .Values.ingress.basepath }} + backend: + service: + name: {{ include "dummyserver.fullname" . }} + port: + number: 8080 +{{- 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..e6e07a3 --- /dev/null +++ b/charts/dummyserver/templates/service.yaml @@ -0,0 +1,23 @@ +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: {{ .Values.service.httpPort }} + protocol: TCP + name: http + - port: {{ .Values.service.httpsPort }} + targetPort: {{ .Values.service.httpsPort }} + protocol: TCP + name: https + - port: {{ .Values.service.mgmtPort }} + targetPort: {{ .Values.service.mgmtPort }} + 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..68be933 --- /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.port }}'] + restartPolicy: Never diff --git a/charts/dummyserver/values.yaml b/charts/dummyserver/values.yaml new file mode 100644 index 0000000..ac76028 --- /dev/null +++ b/charts/dummyserver/values.yaml @@ -0,0 +1,90 @@ +# 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: 8080 + httpsPort: 8181 + mgmtPort: 8383 + +ingress: + enabled: true + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + className: "alb" + basepath: "/" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + 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: {} From bb0323b5e7dc7f3d7ed6a7169890281053877a40 Mon Sep 17 00:00:00 2001 From: Andrea Pittaro Date: Thu, 8 Feb 2024 13:07:48 +0100 Subject: [PATCH 2/6] fix webserver deployment in ec5-stage tested in ec5-stage around Dec 18th 2023 --- charts/dummyserver-stage-config/dummyserver-stage-config.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml index 218cfbc..f8de49b 100644 --- a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml +++ b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml @@ -6,4 +6,6 @@ ingress: alb.ingress.kubernetes.io/target-type: ip # alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:332696098873:certificate/1021f82e-83ad-420e-bac9-f6640d89e129 # alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-2019-08 - # alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' \ No newline at end of file + # alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' +service: + type: LoadBalancer \ No newline at end of file From 4b5df7f1d3517358c36a70906e2622a1c33acca6 Mon Sep 17 00:00:00 2001 From: Matteo Ipri Date: Tue, 11 Mar 2025 18:20:45 +0100 Subject: [PATCH 3/6] Update version to 0.7.0, adjust service ports, and improve Dockerfile --- .gitignore | 4 +- Dockerfile | 14 +- LICENSE | 2 +- Makefile | 2 +- README.md | 3 +- charts/dummyserver.template.yaml | 26 ++-- charts/dummyserver/templates/NOTES.txt | 4 +- charts/dummyserver/templates/deployment.yaml | 6 +- charts/dummyserver/templates/ingress.yaml | 8 +- charts/dummyserver/values.yaml | 6 +- dummyserver/__main__.py | 16 +- dummyserver/handler.py | 55 ++++--- dummyserver/server.py | 2 +- requirements-dev.txt | 2 +- script/entrypoint | 14 +- setup.cfg | 2 +- setup.py | 2 +- test/test_handler.py | 18 +-- test/test_handler/client.crt | 43 ++--- test/test_handler/client.csr | 26 ++-- test/test_handler/client.key | 55 +++---- test/test_handler/rootCA.crt | 56 +++---- test/test_handler/rootCA.key | 103 ++++++------ test/test_handler/rootCA.srl | 2 +- test/test_handler/server-bundle.crt | 155 ++++++++++--------- test/test_handler/server.crt | 44 +++--- test/test_handler/server.csr | 26 ++-- test/test_handler/server.key | 55 +++---- 28 files changed, 391 insertions(+), 360 deletions(-) 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..a8e9d64 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,15 @@ 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 -EXPOSE 8080 8181 8282 8383 +EXPOSE 8001 8002 8003 8004 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.template.yaml b/charts/dummyserver.template.yaml index 7a99ea4..b4c8238 100644 --- a/charts/dummyserver.template.yaml +++ b/charts/dummyserver.template.yaml @@ -41,16 +41,16 @@ metadata: spec: type: ClusterIP ports: - - port: 8080 - targetPort: 8080 + - port: 8001 + targetPort: 8001 protocol: TCP name: http - - port: 8181 - targetPort: 8181 + - port: 8002 + targetPort: 8002 protocol: TCP name: https - - port: 8383 - targetPort: 8383 + - port: 8004 + targetPort: 8004 protocol: TCP name: mgmt selector: @@ -90,13 +90,13 @@ spec: imagePullPolicy: IfNotPresent ports: - name: http - containerPort: 8080 + containerPort: 8001 protocol: TCP - name: https - containerPort: 8181 + containerPort: 8002 protocol: TCP - name: mgmtport - containerPort: 8383 + containerPort: 8004 protocol: TCP ## livenessProbe: ## httpGet: @@ -135,28 +135,28 @@ spec: service: name: dummyserver port: - number: 8383 + number: 8004 - pathType: Prefix path: /history backend: service: name: dummyserver port: - number: 8383 + number: 8004 - pathType: Prefix path: /clear backend: service: name: dummyserver port: - number: 8383 + number: 8004 - pathType: Prefix path: / backend: service: name: dummyserver port: - number: 8080 + number: 8001 NOTES: 1. Get the application URL by running these commands: diff --git a/charts/dummyserver/templates/NOTES.txt b/charts/dummyserver/templates/NOTES.txt index e8ca9fb..818b730 100644 --- a/charts/dummyserver/templates/NOTES.txt +++ b/charts/dummyserver/templates/NOTES.txt @@ -17,6 +17,6 @@ {{- 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:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT + 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/deployment.yaml b/charts/dummyserver/templates/deployment.yaml index 56d9133..b51bbd9 100644 --- a/charts/dummyserver/templates/deployment.yaml +++ b/charts/dummyserver/templates/deployment.yaml @@ -37,13 +37,13 @@ spec: value: "{{ .Values.container.credentials.user }}:{{ .Values.container.credentials.password }}" ports: - name: http - containerPort: 8080 + containerPort: 8001 protocol: TCP - name: https - containerPort: 8181 + containerPort: 8002 protocol: TCP - name: mgmtport - containerPort: 8383 + containerPort: 8004 protocol: TCP ## livenessProbe: ## httpGet: diff --git a/charts/dummyserver/templates/ingress.yaml b/charts/dummyserver/templates/ingress.yaml index 171c189..2897ba3 100644 --- a/charts/dummyserver/templates/ingress.yaml +++ b/charts/dummyserver/templates/ingress.yaml @@ -21,26 +21,26 @@ spec: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8383 + number: 8004 - pathType: Prefix path: /history backend: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8383 + number: 8004 - pathType: Prefix path: /clear backend: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8383 + number: 8004 - pathType: Prefix path: {{ .Values.ingress.basepath }} backend: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8080 + number: 8001 {{- end }} \ No newline at end of file diff --git a/charts/dummyserver/values.yaml b/charts/dummyserver/values.yaml index ac76028..950e74c 100644 --- a/charts/dummyserver/values.yaml +++ b/charts/dummyserver/values.yaml @@ -43,9 +43,9 @@ securityContext: {} service: type: ClusterIP - httpPort: 8080 - httpsPort: 8181 - mgmtPort: 8383 + httpPort: 8001 + httpsPort: 8002 + mgmtPort: 8004 ingress: enabled: true 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..d5ebd12 100644 --- a/dummyserver/handler.py +++ b/dummyserver/handler.py @@ -54,60 +54,77 @@ 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_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 = '' + 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: + # try: if 'content-length' in self.headers: length = int(self.headers['content-length']) body = str(self.rfile.read(length), "utf-8") if length > 0 else '' - json.loads(body) - self.send_response(200) - except: - self.send_response(400) + # json.loads(body) + response_status_code = 200 + # except: + # response_status_code = 400 + self.send_response(response_status_code) self.send_header('Content-type', CONTENT_TYPE) self.end_headers() - self._record(body) + self._record(body=body, response_status_code=response_status_code) - def _record(self, body=''): + def _record(self, body='', 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 , + '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 ] }) 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..5b37ea4 100755 --- a/script/entrypoint +++ b/script/entrypoint @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash # 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..f313928 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = dummyserver -version = 0.6.0 +version = 0.7.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----- From f54f89eec93d782fc327ddf4991b1c91f82b6a24 Mon Sep 17 00:00:00 2001 From: Andrea Pittaro Date: Wed, 12 Mar 2025 10:14:20 +0100 Subject: [PATCH 4/6] fixed ports from matteo's updated template, using --- .../dummyserver-stage-config.yaml | 30 ++++++++++++++----- charts/dummyserver/templates/service.yaml | 6 ++-- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml index f8de49b..bb2db63 100644 --- a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml +++ b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml @@ -1,11 +1,27 @@ +service: + type: NodePort + httpPort: 8080 + httpsPort: 443 + mgmtPort: 8004 + ingress: + enabled: true + hosts: + - host: dummy-webserver.dev.everyware.io + paths: + - path: / + pathType: ImplementationSpecific + 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/listen-ports: '[{"HTTP": 80}]' + # 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/certificate-arn: arn:aws:acm:us-east-1:332696098873:certificate/1021f82e-83ad-420e-bac9-f6640d89e129 - # alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-FS-1-2-2019-08 - # alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' -service: - type: LoadBalancer \ No newline at end of file + 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/templates/service.yaml b/charts/dummyserver/templates/service.yaml index e6e07a3..f774e8b 100644 --- a/charts/dummyserver/templates/service.yaml +++ b/charts/dummyserver/templates/service.yaml @@ -8,15 +8,15 @@ spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.httpPort }} - targetPort: {{ .Values.service.httpPort }} + targetPort: 8001 protocol: TCP name: http - port: {{ .Values.service.httpsPort }} - targetPort: {{ .Values.service.httpsPort }} + targetPort: 8002 protocol: TCP name: https - port: {{ .Values.service.mgmtPort }} - targetPort: {{ .Values.service.mgmtPort }} + targetPort: 8004 protocol: TCP name: mgmt selector: From dc08dc12ab64f93661fe65cb8cd16bc2e16ac6f1 Mon Sep 17 00:00:00 2001 From: Andrea Pittaro Date: Wed, 12 Mar 2025 17:29:13 +0100 Subject: [PATCH 5/6] fixed ingress and port mapping ; fixed handler Can handle different ports The handler will actually store the body payload Increased version to 0.7.0 - published --- Dockerfile | 5 +- .../dummyserver-stage-config.yaml | 17 +++--- charts/dummyserver/templates/NOTES.txt | 4 +- charts/dummyserver/templates/deployment.yaml | 3 ++ charts/dummyserver/templates/ingress.yaml | 17 ++++-- charts/dummyserver/templates/service.yaml | 4 ++ .../templates/tests/test-connection.yaml | 2 +- charts/dummyserver/values.yaml | 7 +-- dummyserver/handler.py | 52 ++++++++++++------- script/entrypoint | 2 +- 10 files changed, 70 insertions(+), 43 deletions(-) diff --git a/Dockerfile b/Dockerfile index a8e9d64..046ba86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,8 +22,9 @@ COPY ./script/entrypoint /entrypoint 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 + rm -f /tmp/dummyserver.tar.gz && \ + chmod +x /entrypoint EXPOSE 8001 8002 8003 8004 -ENTRYPOINT [ "/entrypoint"] +ENTRYPOINT [ "/entrypoint" ] diff --git a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml index bb2db63..7adaa7f 100644 --- a/charts/dummyserver-stage-config/dummyserver-stage-config.yaml +++ b/charts/dummyserver-stage-config/dummyserver-stage-config.yaml @@ -1,16 +1,17 @@ service: - type: NodePort - httpPort: 8080 + type: LoadBalancer + httpPort: 80 httpsPort: 443 mgmtPort: 8004 +image: + tag: "0.7.0" + pullPolicy: Always + ingress: - enabled: true - hosts: - - host: dummy-webserver.dev.everyware.io - paths: - - path: / - pathType: ImplementationSpecific + enabled: false + host: dummy-webserver.dev.everyware.io + className: alb basePath: / # backend: diff --git a/charts/dummyserver/templates/NOTES.txt b/charts/dummyserver/templates/NOTES.txt index 818b730..2949e59 100644 --- a/charts/dummyserver/templates/NOTES.txt +++ b/charts/dummyserver/templates/NOTES.txt @@ -1,10 +1,8 @@ 1. Get the application URL by running these commands: {{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ .Values.ingress.host }}{{ .path }} {{- end }} -{{- 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}") diff --git a/charts/dummyserver/templates/deployment.yaml b/charts/dummyserver/templates/deployment.yaml index b51bbd9..b55a448 100644 --- a/charts/dummyserver/templates/deployment.yaml +++ b/charts/dummyserver/templates/deployment.yaml @@ -42,6 +42,9 @@ spec: - name: https containerPort: 8002 protocol: TCP + - name: mtls + containerPort: 8003 + protocol: TCP - name: mgmtport containerPort: 8004 protocol: TCP diff --git a/charts/dummyserver/templates/ingress.yaml b/charts/dummyserver/templates/ingress.yaml index 2897ba3..80d7a74 100644 --- a/charts/dummyserver/templates/ingress.yaml +++ b/charts/dummyserver/templates/ingress.yaml @@ -13,7 +13,8 @@ metadata: spec: ingressClassName: {{ .Values.ingress.className }} rules: - - http: + - host: {{ .Values.ingress.host }} + http: paths: - pathType: Prefix path: /stats @@ -21,26 +22,32 @@ spec: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8004 + number: {{ .Values.service.mgmtPort }} - pathType: Prefix path: /history backend: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8004 + number: {{ .Values.service.mgmtPort }} - pathType: Prefix path: /clear backend: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8004 + number: {{ .Values.service.mgmtPort }} - pathType: Prefix path: {{ .Values.ingress.basepath }} backend: service: name: {{ include "dummyserver.fullname" . }} port: - number: 8001 + 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 index f774e8b..76ac39b 100644 --- a/charts/dummyserver/templates/service.yaml +++ b/charts/dummyserver/templates/service.yaml @@ -15,6 +15,10 @@ spec: targetPort: 8002 protocol: TCP name: https + - port: {{ .Values.service.mTLSPort }} + targetPort: 8003 + protocol: TCP + name: mtls - port: {{ .Values.service.mgmtPort }} targetPort: 8004 protocol: TCP diff --git a/charts/dummyserver/templates/tests/test-connection.yaml b/charts/dummyserver/templates/tests/test-connection.yaml index 68be933..f53a75f 100644 --- a/charts/dummyserver/templates/tests/test-connection.yaml +++ b/charts/dummyserver/templates/tests/test-connection.yaml @@ -11,5 +11,5 @@ spec: - name: wget image: busybox command: ['wget'] - args: ['{{ include "dummyserver.fullname" . }}:{{ .Values.service.port }}'] + args: ['{{ include "dummyserver.fullname" . }}:{{ .Values.service.httpPort }}'] restartPolicy: Never diff --git a/charts/dummyserver/values.yaml b/charts/dummyserver/values.yaml index 950e74c..98cf7a5 100644 --- a/charts/dummyserver/values.yaml +++ b/charts/dummyserver/values.yaml @@ -45,6 +45,7 @@ service: type: ClusterIP httpPort: 8001 httpsPort: 8002 + mTLSPort: 8003 mgmtPort: 8004 ingress: @@ -54,11 +55,7 @@ ingress: # kubernetes.io/tls-acme: "true" className: "alb" basepath: "/" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific + host: "example.host.local" tls: [] # - secretName: chart-example-tls # hosts: diff --git a/dummyserver/handler.py b/dummyserver/handler.py index d5ebd12..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): @@ -74,13 +79,14 @@ def do_GET(self): self.send_response(response_status_code) if send_extra_header: self.send_header('WWW-Authenticate', 'Test') - self.send_header('Content-type', CONTENT_TYPE) + self.send_header('Content-Type', CONTENT_TYPE) self.end_headers() self._record(response_status_code=response_status_code) def do_POST(self): body = '' + body_json = {} response_status_code = 200 if self.path == '/fail': @@ -92,30 +98,31 @@ def do_POST(self): response_status_code = 401 self.send_header('WWW-Authenticate', 'Test') else: - # try: - if 'content-length' in self.headers: - length = int(self.headers['content-length']) + try: + 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) + if self.get_header('content-type') == 'application/json': + try: + body_json = json.loads(body) + except: pass response_status_code = 200 - # except: - # response_status_code = 400 + except: + response_status_code = 400 self.send_response(response_status_code) - self.send_header('Content-type', CONTENT_TYPE) + self.send_header('Content-Type', CONTENT_TYPE) self.end_headers() - self._record(body=body, response_status_code=response_status_code) + self._record(body=body, json=body_json, response_status_code=response_status_code) - def _record(self, body='', response_status_code=''): + 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({ + record = { 'timestamp': time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()), 'requestline': self.requestline, 'body': body, @@ -126,7 +133,12 @@ def _record(self, body='', response_status_code=''): '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))) @@ -136,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/script/entrypoint b/script/entrypoint index 5b37ea4..7424c44 100755 --- a/script/entrypoint +++ b/script/entrypoint @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env ash # Generate dummy certificate answers() { From 8b1d590e0c9fe85afd828c317a3dfcc384fea550 Mon Sep 17 00:00:00 2001 From: Andrea Pittaro Date: Thu, 13 Mar 2025 13:35:47 +0100 Subject: [PATCH 6/6] increasing dev version to 0.8.0 --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index f313928..b0152b5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = dummyserver -version = 0.7.0 +version = 0.8.0 summary = Dummy Web Server description-file = README.md