├── CODEOWNERS
├── php
├── composer.json
├── index.php
└── manifest.yml
├── go-hello
├── .gitignore
├── go.mod
├── manifest.yml
└── main.go
├── static
├── Staticfile
├── src
│ └── index.html
└── manifest.yml
├── ruby-sinatra
├── .ruby-version
├── config.ru
├── server.rb
├── Gemfile
├── manifest.yml
└── Gemfile.lock
├── python-flask
├── Procfile
├── requirements.txt
├── manifest.yml
├── README.md
└── hello.py
├── python-flask-socketio
├── Procfile
├── package.json
├── requirements.txt
├── manifest.yml
├── client.js
├── hello.py
├── README.md
└── package-lock.json
├── java-hello
├── src
│ ├── main
│ │ ├── resources
│ │ │ └── application.properties
│ │ └── java
│ │ │ └── gov
│ │ │ └── cloud
│ │ │ └── eng
│ │ │ └── helloworld
│ │ │ ├── HelloController.java
│ │ │ └── HelloWorldApplication.java
│ └── test
│ │ └── java
│ │ └── gov
│ │ └── cloud
│ │ └── eng
│ │ └── helloworld
│ │ └── HelloWorldApplicationTests.java
├── .gitignore
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── manifest.yml
├── build-java-hello.yml
├── README.md
├── build-java-hello.sh
├── pom.xml
├── mvnw.cmd
├── hello-world.iml
└── mvnw
├── dotnet-core
├── .gitignore
├── dotnet-core-hello-world.csproj
├── manifest.yml
├── Program.cs
├── Startup.cs
└── LICENSE
├── cf-cron
├── crontab
├── manifest.yml
├── Makefile
├── LICENSE
└── README.md
├── java-spring-actuator
├── .mvn
│ └── wrapper
│ │ ├── maven-wrapper.jar
│ │ └── maven-wrapper.properties
├── src
│ ├── main
│ │ ├── resources
│ │ │ └── application.properties
│ │ └── java
│ │ │ └── gov
│ │ │ └── cloud
│ │ │ └── eng
│ │ │ └── spring_actuator_demo
│ │ │ ├── HelloController.java
│ │ │ └── HelloWorldApplication.java
│ └── test
│ │ └── java
│ │ └── gov
│ │ └── cloud
│ │ └── eng
│ │ └── spring_actuator_demo
│ │ └── HelloWorldApplicationTests.java
├── manifest.yml
├── set-route-custom-port.sh
├── pom.xml
├── README.md
├── mvnw.cmd
└── mvnw
├── deno
├── manifest.yml
├── main.ts
└── Makefile
├── .gitignore
├── .github
├── pull_request_template.md
└── workflows
│ └── security-considerations.yml
├── .allstar
└── binary_artifacts.yaml
├── nodejs
├── manifest.yml
├── manifest-cnb.yml
├── package.json
├── server.js
└── package-lock.json
├── cron-task
├── manifest.yml
├── package.json
├── index.js
├── README.md
└── package-lock.json
├── SECURITY.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
└── pipeline.yml
/CODEOWNERS:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/php/composer.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/go-hello/.gitignore:
--------------------------------------------------------------------------------
1 | go-hello
2 |
--------------------------------------------------------------------------------
/static/Staticfile:
--------------------------------------------------------------------------------
1 | root: src
2 |
--------------------------------------------------------------------------------
/ruby-sinatra/.ruby-version:
--------------------------------------------------------------------------------
1 | 3.3.3
2 |
--------------------------------------------------------------------------------
/python-flask/Procfile:
--------------------------------------------------------------------------------
1 | web: python hello.py
--------------------------------------------------------------------------------
/php/index.php:
--------------------------------------------------------------------------------
1 | = "Hello World from PHP!"?>
2 |
--------------------------------------------------------------------------------
/static/src/index.html:
--------------------------------------------------------------------------------
1 | Hello from cloud.gov!
2 |
--------------------------------------------------------------------------------
/python-flask-socketio/Procfile:
--------------------------------------------------------------------------------
1 | web: python hello.py
--------------------------------------------------------------------------------
/java-hello/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ruby-sinatra/config.ru:
--------------------------------------------------------------------------------
1 | require './server'
2 | run Sinatra::Application
3 |
--------------------------------------------------------------------------------
/go-hello/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/cloud-gov/cf-hello-worlds/go-hello
2 |
3 | go 1.20
4 |
--------------------------------------------------------------------------------
/dotnet-core/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode
2 | appsettings.Development.json
3 | appsettings.json
4 | [Bb]in/
5 | [Oo]bj/
--------------------------------------------------------------------------------
/ruby-sinatra/server.rb:
--------------------------------------------------------------------------------
1 | require 'sinatra'
2 |
3 | get '/' do
4 | "Hello World from Sinatra!"
5 | end
6 |
--------------------------------------------------------------------------------
/java-hello/.gitignore:
--------------------------------------------------------------------------------
1 | /bin/
2 | .classpath
3 | .project
4 | .settings/
5 | build/
6 | .gradle/
7 | target/
8 |
--------------------------------------------------------------------------------
/ruby-sinatra/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'sinatra'
4 | gem 'rackup'
5 | gem 'puma'
6 |
--------------------------------------------------------------------------------
/python-flask-socketio/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "socket.io-client": "^4.8.1"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/static/manifest.yml:
--------------------------------------------------------------------------------
1 | applications:
2 | - name: test-static
3 | buildpack: staticfile_buildpack
4 | random-route: true
5 |
--------------------------------------------------------------------------------
/java-hello/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-gov/cf-hello-worlds/HEAD/java-hello/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/python-flask/requirements.txt:
--------------------------------------------------------------------------------
1 | click==8.1.7
2 | flask==2.2.5
3 | itsdangerous==2.2.0
4 | jinja2==3.1.6
5 | markupsafe==2.1.5
6 | werkzeug==3.0.6
7 |
--------------------------------------------------------------------------------
/cf-cron/crontab:
--------------------------------------------------------------------------------
1 |
2 | # Run every 10 seconds, for a sample app
3 | */10 * * * * * * curl -s https://sample-app.app.cloud.gov/ 1>/dev/null 2>/dev/null
4 |
5 |
--------------------------------------------------------------------------------
/java-spring-actuator/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cloud-gov/cf-hello-worlds/HEAD/java-spring-actuator/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/php/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-php
4 | random-route: true
5 | memory: 256M
6 | buildpacks:
7 | - php_buildpack
8 | stack: cflinuxfs4
9 |
--------------------------------------------------------------------------------
/deno/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-deno
4 | random-route: true
5 | buildpacks:
6 | - binary_buildpack
7 | memory: 128M
8 | command: ./bin/main
--------------------------------------------------------------------------------
/java-spring-actuator/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | management.server.port: 8080
2 | management.server.address: 0.0.0.0
3 | server.port: 8081
4 | server.address: 0.0.0.0
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .*.cache
2 | .bundle/
3 | vendor/
4 | *.droplet
5 | local.yml
6 | .idea/
7 | .DS_Store
8 | .vscode
9 | bin
10 | obj
11 | java-*/target
12 | node_modules
13 | .codeql
14 |
--------------------------------------------------------------------------------
/ruby-sinatra/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-ruby-sinatra
4 | random-route: true
5 | buildpacks:
6 | - ruby_buildpack
7 | memory: 256M
8 | stack: cflinuxfs4
9 |
--------------------------------------------------------------------------------
/go-hello/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: go-hello
4 | buildpacks:
5 | - go_buildpack
6 | env:
7 | GOVERSION: "1.20"
8 | random-route: true
9 | stack: cflinuxfs4
10 |
--------------------------------------------------------------------------------
/python-flask-socketio/requirements.txt:
--------------------------------------------------------------------------------
1 | click==8.1.7
2 | flask==2.2.5
3 | itsdangerous==2.2.0
4 | jinja2==3.1.6
5 | markupsafe==2.1.5
6 | werkzeug==3.0.6
7 | flask-socketio==5.5.1
8 | eventlet==0.40.3
9 |
--------------------------------------------------------------------------------
/python-flask/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-python-flask
4 | random-route: true
5 | buildpacks:
6 | - python_buildpack
7 | memory: 256M
8 | stack: cflinuxfs4
9 |
10 |
--------------------------------------------------------------------------------
/.github/pull_request_template.md:
--------------------------------------------------------------------------------
1 | ## Changes proposed in this pull request:
2 | -
3 | -
4 | -
5 |
6 | ## security considerations
7 | [Note the any security considerations here, or make note of why there are none]
8 |
--------------------------------------------------------------------------------
/python-flask-socketio/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-python-flask-socketio
4 | random-route: true
5 | buildpacks:
6 | - python_buildpack
7 | memory: 256M
8 | stack: cflinuxfs4
9 |
10 |
--------------------------------------------------------------------------------
/.allstar/binary_artifacts.yaml:
--------------------------------------------------------------------------------
1 | # Ignore reason: These files are used for the Maven wrapper, which is useful
2 | ignorePaths:
3 | - java-hello/.mvn/wrapper/maven-wrapper.jar
4 | - java-spring-actuator/.mvn/wrapper/maven-wrapper.jar
5 |
--------------------------------------------------------------------------------
/nodejs/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-nodejs
4 | random-route: true
5 | buildpacks:
6 | - nodejs_buildpack
7 | memory: 256M
8 | stack: cflinuxfs4
9 | env:
10 | LIFECYCLE: "CLASSIC_V2"
11 |
--------------------------------------------------------------------------------
/dotnet-core/dotnet-core-hello-world.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp8.0
5 | dot_net_gov
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/dotnet-core/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-dotnet-core
4 | random-route: true
5 | buildpacks:
6 | - dotnet_core_buildpack
7 | memory: 256M
8 | stack: cflinuxfs4
9 | env:
10 | CACHE_NUGET_PACKAGES: false
11 |
--------------------------------------------------------------------------------
/cf-cron/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: cf-cron
4 | memory: 256M
5 | no-route: true
6 | health-check-type: process
7 | buildpacks:
8 | - binary_buildpack
9 | command: ./supercronic -passthrough-logs -json ./crontab 2>&1
10 |
11 |
--------------------------------------------------------------------------------
/cron-task/manifest.yml:
--------------------------------------------------------------------------------
1 | applications:
2 | - name: task-runner
3 | buildpacks:
4 | - nodejs_buildpack
5 | disk_quota: 1G
6 | instances: 1
7 | memory: 256M
8 | stack: cflinuxfs3
9 | command: (npm start && echo SUCCESS || echo FAIL) && sleep infinity
10 |
11 |
--------------------------------------------------------------------------------
/nodejs/manifest-cnb.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-nodejs-cnb
4 | random-route: true
5 | lifecycle: cnb
6 | buildpacks:
7 | - docker://docker.io/paketobuildpacks/nodejs
8 | memory: 256M
9 | stack: cflinuxfs4
10 | env:
11 | LIFECYCLE: "CNB_V3"
12 |
--------------------------------------------------------------------------------
/java-hello/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-java-hello
4 | buildpacks:
5 | - java_buildpack
6 | random-route: true
7 | memory: 768M
8 | path: target/hello-world-0.0.1-SNAPSHOT.jar
9 | env:
10 | JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 17.+ }}'
11 |
--------------------------------------------------------------------------------
/python-flask/README.md:
--------------------------------------------------------------------------------
1 | # How to push the example Python Flask app to your space
2 |
3 | ```shell
4 | cf push
5 | ```
6 |
7 | Assuming you are in the correct cf org and space, the above command is all you
8 | need. See also: [Cloud.gov Quickstart](https://cloud.gov/docs/getting-started/your-first-deploy/).
9 |
--------------------------------------------------------------------------------
/python-flask/hello.py:
--------------------------------------------------------------------------------
1 | import os
2 | from flask import Flask
3 |
4 | app = Flask(__name__)
5 |
6 |
7 | @app.route('/')
8 | def hello():
9 | return 'Hello World from Flask!'
10 |
11 |
12 | port = os.getenv('PORT', '5000')
13 | if __name__ == "__main__":
14 | app.run(host='0.0.0.0', port=int(port))
15 |
--------------------------------------------------------------------------------
/go-hello/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "net/http"
6 | "os"
7 | )
8 |
9 | func main() {
10 | http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
11 | fmt.Fprintf(w, "
Hello, World from Go!
\n")
12 | })
13 |
14 | http.ListenAndServe(":"+os.Getenv("PORT"), nil)
15 | }
16 |
--------------------------------------------------------------------------------
/java-hello/src/test/java/gov/cloud/eng/helloworld/HelloWorldApplicationTests.java:
--------------------------------------------------------------------------------
1 | package gov.cloud.eng.helloworld;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class HelloWorldApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/cf-cron/Makefile:
--------------------------------------------------------------------------------
1 | SUPERCRONIC_URL = https://github.com/aptible/supercronic/releases/download/v0.2.33/supercronic-linux-amd64
2 | SUPERCRONIC_SHA1SUM = 71b0d58cc53f6bd72cf2f293e09e294b79c666d8
3 |
4 | supercronic:
5 | curl --fail --silent --location --show-error -o $@ ${SUPERCRONIC_URL}
6 | echo "${SUPERCRONIC_SHA1SUM} $@" | sha1sum -c - || rm $@
7 | chmod +x $@
8 |
9 |
--------------------------------------------------------------------------------
/cron-task/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cg-task-example",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "node index.js"
8 | },
9 | "keywords": ["cron", "cloud"],
10 | "author": "Mark Headd (mark.headd@gsa.gov)",
11 | "license": "ISC",
12 | "dependencies": {
13 | "cron": "^1.8.2"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/java-spring-actuator/src/test/java/gov/cloud/eng/spring_actuator_demo/HelloWorldApplicationTests.java:
--------------------------------------------------------------------------------
1 | package gov.cloud.eng.spring_actuator_demo;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class HelloWorldApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/python-flask-socketio/client.js:
--------------------------------------------------------------------------------
1 | const { io } = require("socket.io-client");
2 |
3 | const socket = io("wss://.app.cloud.gov");
4 |
5 | socket.on("connect", () => {
6 | const message = 'Hi there!'
7 | socket.send(message);
8 | console.log('Sent message: ' + message)
9 | });
10 |
11 | socket.on("message", (msg) => {
12 | console.log(`received message: ${msg}`)
13 | })
14 |
--------------------------------------------------------------------------------
/.github/workflows/security-considerations.yml:
--------------------------------------------------------------------------------
1 | name: Security Considerations
2 |
3 | permissions:
4 | pull-requests: read
5 |
6 | on:
7 | pull_request:
8 | types: [opened, edited, reopened]
9 | branches: [main, master, develop]
10 |
11 | jobs:
12 | security-considerations:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - uses: cloud-gov/security-considerations-action@main
16 |
--------------------------------------------------------------------------------
/java-hello/src/main/java/gov/cloud/eng/helloworld/HelloController.java:
--------------------------------------------------------------------------------
1 | package gov.cloud.eng.helloworld;
2 |
3 | import org.springframework.web.bind.annotation.RestController;
4 | import org.springframework.web.bind.annotation.RequestMapping;
5 |
6 | @RestController
7 | public class HelloController {
8 |
9 | @RequestMapping("/")
10 | public String index() {
11 | return "Greetings from cloud.gov!";
12 | }
13 |
14 | }
--------------------------------------------------------------------------------
/java-hello/src/main/java/gov/cloud/eng/helloworld/HelloWorldApplication.java:
--------------------------------------------------------------------------------
1 | package gov.cloud.eng.helloworld;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class HelloWorldApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(HelloWorldApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/deno/main.ts:
--------------------------------------------------------------------------------
1 | const port = Number.parseInt(Deno.env.get('PORT') ?? '8080');
2 |
3 | const server = Deno.listen({ port });
4 | console.log(`http://localhost:${port}/`);
5 |
6 | for await (const conn of server) {
7 | handleConn(conn);
8 | }
9 |
10 | async function handleConn(conn: Deno.Conn) {
11 | const requests = Deno.serveHttp(conn);
12 | for await (const request of requests) {
13 | request.respondWith(new Response('Hello World from Deno'));
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/java-spring-actuator/src/main/java/gov/cloud/eng/spring_actuator_demo/HelloController.java:
--------------------------------------------------------------------------------
1 | package gov.cloud.eng.spring_actuator_demo;
2 |
3 | import org.springframework.web.bind.annotation.RestController;
4 | import org.springframework.web.bind.annotation.RequestMapping;
5 |
6 | @RestController
7 | public class HelloController {
8 |
9 | @RequestMapping("/")
10 | public String index() {
11 | return "Greetings from cloud.gov!";
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/nodejs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "author": "Paketo Buildpacks",
3 | "dependencies": {
4 | "express": "^4.19.2"
5 | },
6 | "description": "Sample Node.js Application using NPM",
7 | "license": "Apache-2.0",
8 | "name": "sample",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/paketo-buildpacks/samples"
12 | },
13 | "scripts": {
14 | "start": "echo \"start\" && node server.js"
15 | },
16 | "version": "0.0.0"
17 | }
18 |
--------------------------------------------------------------------------------
/java-hello/build-java-hello.yml:
--------------------------------------------------------------------------------
1 | ---
2 | platform: linux
3 |
4 | image_resource:
5 | type: registry-image
6 | source:
7 | aws_access_key_id: ((ecr_aws_key))
8 | aws_secret_access_key: ((ecr_aws_secret))
9 | repository: general-task
10 | aws_region: us-gov-west-1
11 | tag: latest
12 |
13 | inputs:
14 | - name: cf-hello-worlds
15 | outputs:
16 | - name: cf-hello-worlds-build
17 |
18 | run:
19 | path: cf-hello-worlds/java-hello/build-java-hello.sh
20 |
--------------------------------------------------------------------------------
/java-spring-actuator/src/main/java/gov/cloud/eng/spring_actuator_demo/HelloWorldApplication.java:
--------------------------------------------------------------------------------
1 | package gov.cloud.eng.spring_actuator_demo;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class HelloWorldApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(HelloWorldApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/cron-task/index.js:
--------------------------------------------------------------------------------
1 | // Require cron module.
2 | const CronJob = require('cron').CronJob;
3 |
4 | // Set timing parameters.
5 | const schedule = '*/30 * * * * *';
6 | const timezone = 'America/New_York';
7 |
8 | // Declare a function with a job to be run.
9 | let runJob = () => console.log('*** Hello world every 30 seconds ***');
10 |
11 | // Set up the job and run it.
12 | console.log("Starting one-off task");
13 | let job = new CronJob(schedule, () => runJob(), null, true, timezone);
14 | job.start();
--------------------------------------------------------------------------------
/java-hello/README.md:
--------------------------------------------------------------------------------
1 | # How to deploy the Hello World Java app
2 |
3 | ## Build the application
4 |
5 | First, use the following command to download all of the dependencies and create the application for deploying.
6 |
7 | ### Mac OS X, Unix, or Linux
8 |
9 | ```bash
10 | ./mvnw compile
11 | ./mvnw package
12 | ```
13 |
14 | ## Windows
15 |
16 | ```powershell
17 | .\mvnw.cmd compile
18 | .\mvnw.cmd package
19 | ```
20 |
21 | ## Deploy the application
22 |
23 | Then follow the usual process for deploying
24 |
25 | ```bash
26 | cf push
27 | ```
28 |
--------------------------------------------------------------------------------
/java-hello/build-java-hello.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -ex
4 |
5 | export TERM=${TERM:-dumb}
6 |
7 | wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
8 | tar -xvf jdk-21_linux-x64_bin.tar.gz
9 | VERSION=$(find . -maxdepth 1 -mindepth 1 -name "jdk-21.*" | sed 's/^..//')
10 | mv "$VERSION" /opt/
11 |
12 | JAVA_HOME="/opt/${VERSION}"
13 | export JAVA_HOME
14 | PATH="JAVA_HOME/bin:$PATH"
15 | export PATH
16 |
17 | pushd cf-hello-worlds/java-hello
18 | ./mvnw compile
19 | ./mvnw package
20 | popd
21 |
22 | cp -r cf-hello-worlds/* cf-hello-worlds-build/
23 |
--------------------------------------------------------------------------------
/dotnet-core/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Hosting;
2 | using Microsoft.Extensions.Hosting;
3 |
4 | namespace dot_net_gov
5 | {
6 | public class Program
7 | {
8 | public static void Main(string[] args)
9 | {
10 | CreateHostBuilder(args).Build().Run();
11 | }
12 |
13 | public static IHostBuilder CreateHostBuilder(string[] args) =>
14 | Host.CreateDefaultBuilder(args)
15 | .ConfigureWebHostDefaults(webBuilder =>
16 | {
17 | webBuilder.UseStartup();
18 | });
19 | }
20 | }
--------------------------------------------------------------------------------
/java-spring-actuator/manifest.yml:
--------------------------------------------------------------------------------
1 | ---
2 | applications:
3 | - name: test-java-spring-actuator
4 | random-route: true
5 | buildpacks:
6 | - java_buildpack
7 | memory: 1G
8 | path: target/java-spring-actuator-0.0.1-SNAPSHOT.jar
9 | routes:
10 | - route: test-java-spring-boot.((app-domain))
11 | - route: actuator.apps.internal
12 | env:
13 | JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 17.+ }}'
14 | JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '{enabled: false}'
15 | # Required to override SERVER_PORT env var set by buildpack and load
16 | # default Spring application on port 8081
17 | SPRING_APPLICATION_JSON: '{"server.port":8081}'
18 |
19 |
--------------------------------------------------------------------------------
/deno/Makefile:
--------------------------------------------------------------------------------
1 | # A Makefile to `make` life easier
2 | # Run `make` or `make help` to see all options
3 |
4 | SHELL := /bin/bash
5 |
6 | .PHONY: help
7 | help: ## Show this help
8 | @egrep -h '\s##\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
9 |
10 | watch: ## Run the app and restart on changes
11 | docker run -it --init -p 8080:8080 -v $(PWD):/app -e PORT=8080 denoland/deno:alpine run --allow-net=0.0.0.0 --allow-env=PORT --watch /app/main.ts
12 |
13 | compile: ## Compile the app to a single executable
14 | docker run -it --init -v $(PWD):/app denoland/deno:alpine compile --allow-net=0.0.0.0 --allow-env=PORT -o /app/bin/main /app/main.ts
15 |
16 | deploy: compile ## Compile and deploy the app to Cloud Foundry
17 | cf push test-deno
--------------------------------------------------------------------------------
/java-spring-actuator/set-route-custom-port.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ORG="$1"
4 | SPACE="$2"
5 | APP_NAME="$3"
6 | HOSTNAME="$4"
7 | PORT=$5
8 |
9 | ORG_GUID=$(cf org "$ORG" --guid)
10 | SPACE_GUID=$(cf space "$SPACE" --guid)
11 | APP_GUID=$(cf app "$APP_NAME" --guid)
12 |
13 | ROUTE_GUID=$(cf curl "/v3/routes?organization_guids=$ORG_GUID&space_guids=$SPACE_GUID" \
14 | | jq -r --arg host "$HOSTNAME" '.resources[] | select(.host==$host) | .guid')
15 |
16 | cf curl -X PATCH "/v3/routes/$ROUTE_GUID/destinations" \
17 | -d "{
18 | \"destinations\": [
19 | {
20 | \"app\": {
21 | \"guid\": \"$APP_GUID\",
22 | \"process\": {
23 | \"type\": \"web\"
24 | }
25 | },
26 | \"port\": $PORT,
27 | \"protocol\": \"http1\"
28 | }
29 | ]
30 | }"
31 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 | **Reporting Security Issues**
3 |
4 | Please refrain from reporting security vulnerabilities through public GitHub issues.
5 |
6 | Instead, kindly report them via the information provided in [cloud.gov's security.txt](https://cloud.gov/.well-known/security.txt).
7 |
8 | When reporting, include the following details (as much as possible) to help us understand the nature and extent of the potential issue:
9 |
10 | - Type of issue (e.g., buffer overflow, SQL injection, cross-site scripting, etc.)
11 | - Full paths of related source file(s)
12 | - Location of affected source code (tag/branch/commit or direct URL)
13 | - Any special configuration required to reproduce the issue
14 | - Step-by-step instructions to reproduce the issue
15 | - Proof-of-concept or exploit code (if available)
16 | - Impact of the issue, including potential exploitation by attackers
17 |
18 | Providing this information will facilitate a quicker triage of your report.
19 |
--------------------------------------------------------------------------------
/nodejs/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const port = process.env.PORT || 8080;
3 | const os = require('os');
4 | const lifecycle = process.env.LIFECYCLE || 'not_set'
5 |
6 | const app = express();
7 |
8 | app.use((request, _, next) => {
9 | const requestTime = new Date(Date.now()).toString();
10 | console.log(request.method, request.hostname, request.path, requestTime);
11 | next();
12 | });
13 |
14 | app.get('/', (request, response) => {
15 | response.send(`
16 |
17 |
18 | Powered By ${lifecycle} Buildpacks
19 |
20 |
21 | Hello World from NodeJS on port ${port} from container ${os.hostname()} with ${lifecycle} buildpacks
22 |
23 | `);
24 | });
25 |
26 | app.get("/actuator/health", (request, response) => {
27 | response.json({ status: "UP" });
28 | });
29 |
30 | app.listen(port, () => {
31 | console.log(`App listening on port ${port}`);
32 | });
33 |
--------------------------------------------------------------------------------
/ruby-sinatra/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | base64 (0.3.0)
5 | logger (1.7.0)
6 | mustermann (3.0.4)
7 | ruby2_keywords (~> 0.0.1)
8 | nio4r (2.7.3)
9 | puma (6.4.3)
10 | nio4r (~> 2.0)
11 | rack (3.2.3)
12 | rack-protection (4.2.0)
13 | base64 (>= 0.1.0)
14 | logger (>= 1.6.0)
15 | rack (>= 3.0.0, < 4)
16 | rack-session (2.1.1)
17 | base64 (>= 0.1.0)
18 | rack (>= 3.0.0)
19 | rackup (2.1.0)
20 | rack (>= 3)
21 | webrick (~> 1.8)
22 | ruby2_keywords (0.0.5)
23 | sinatra (4.2.0)
24 | logger (>= 1.6.0)
25 | mustermann (~> 3.0)
26 | rack (>= 3.0.0, < 4)
27 | rack-protection (= 4.2.0)
28 | rack-session (>= 2.0.0, < 3)
29 | tilt (~> 2.0)
30 | tilt (2.6.1)
31 | webrick (1.9.1)
32 |
33 | PLATFORMS
34 | ruby
35 |
36 | DEPENDENCIES
37 | puma
38 | rackup
39 | sinatra
40 |
41 | BUNDLED WITH
42 | 2.3.26
43 |
--------------------------------------------------------------------------------
/java-hello/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | wrapperVersion=3.3.2
18 | distributionType=only-script
19 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip
20 |
--------------------------------------------------------------------------------
/java-spring-actuator/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 | wrapperVersion=3.3.2
18 | distributionType=only-script
19 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip
20 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | **Contribution Policy**
2 |
3 | Cloud.gov is an open source project operated by the U.S. General Services Administration (GSA) to support federal agency missions. While we value transparency and collaboration, we must balance openness with the responsibilities of operating a secure, compliant, and trusted federal platform.
4 |
5 | ✅ **Who can contribute**
6 | We welcome contributions from:
7 |
8 | - Employees of U.S. federal agencies
9 | - Contractors working under a current agreement with a U.S. government entity
10 | - GSA-approved contributors as part of official interagency collaboration
11 |
12 | ❌ **Who we cannot accept contributions from**
13 | To avoid the appearance of government endorsement, manage supply chain risk, and maintain the integrity of our compliance posture, we do **not** accept unsolicited contributions from:
14 |
15 | - Individuals unaffiliated with the U.S. government
16 | - International contributors or organizations
17 | - Unvetted accounts or first-time contributors submitting minor changes
18 |
19 | If you're unsure whether your contribution fits, feel free to open an issue first so we can discuss it.
20 |
--------------------------------------------------------------------------------
/cf-cron/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Meshcloud
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/cron-task/README.md:
--------------------------------------------------------------------------------
1 | # Running one-off tasks on cloud.gov
2 |
3 | This is an example of a one-off task that can be run on cloud.gov. More on how to do this can be [found in the docs](https://cloud.gov/docs/management/one-off-tasks/). Note, this example uses node.js, but you can use any language that has a cron-like library to do something similar.
4 |
5 | ## Usage
6 |
7 | To run this app locally, use `npm start`. To deploy to cloud.gov, use the instructions below:
8 |
9 | ```bash
10 | ~$ cf push -f manifest.yml --health-check-type none --no-route
11 | ```
12 |
13 | You can also add the `health-check-type` and `no-route` parameters to your manifest if it's easier:
14 |
15 | ```yaml
16 | health-check-type: none
17 | no-route: true
18 | ```
19 |
20 | When done, wait a few minutes for some log messages to show up, then check the logs:
21 |
22 | ```bash
23 | ~$ cf logs --recent task-runner
24 | ```
25 |
26 | You can also check the status of tasks that have run:
27 |
28 | ```bash
29 | ~$ cf tasks task-runner
30 | ```
31 |
32 | ## Clean up
33 |
34 | Note, when done with the example, make sure you delete your app:
35 |
36 | ```bash
37 | ~$ cf delete task-runner
38 | ```
39 |
40 |
--------------------------------------------------------------------------------
/cron-task/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "cg-task-example",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "cron": {
8 | "version": "1.8.2",
9 | "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz",
10 | "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==",
11 | "requires": {
12 | "moment-timezone": "^0.5.x"
13 | }
14 | },
15 | "moment-timezone": {
16 | "version": "0.5.45",
17 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz",
18 | "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==",
19 | "requires": {
20 | "moment": "^2.29.4"
21 | },
22 | "dependencies": {
23 | "moment": {
24 | "version": "2.30.1",
25 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
26 | "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
27 | }
28 | }
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/python-flask-socketio/hello.py:
--------------------------------------------------------------------------------
1 | import os
2 | from flask import Flask, current_app, request
3 | from flask_socketio import SocketIO, send
4 |
5 | port = os.getenv("PORT", "5000")
6 | app = Flask(__name__)
7 | app.debug = True
8 | socketio = SocketIO(app, logger=True, engineio_logger=True)
9 |
10 |
11 | @socketio.on("connect")
12 | def on_connect():
13 | send("Hello from the server!")
14 | current_app.logger.info(
15 | f"Socket {request.sid} connected from {request.environ.get('HTTP_ORIGIN')}"
16 | )
17 | return True
18 |
19 |
20 | @socketio.on("disconnect")
21 | def on_disconnect():
22 | current_app.logger.info(f"Socket {request.sid} disconnected")
23 |
24 |
25 | @socketio.on("message")
26 | def handle_message(data):
27 | print("received message: " + data)
28 |
29 |
30 | @socketio.on_error_default
31 | def default_error_handler(e):
32 | print(e)
33 | print(request.event["message"])
34 | print(request.event["args"])
35 |
36 |
37 | @socketio.on_error
38 | def default_error_handler(e):
39 | print("Error: {}".format(e))
40 |
41 |
42 | @app.route("/")
43 | def hello():
44 | return "Hello World from Flask!"
45 |
46 |
47 | if __name__ == "__main__":
48 | socketio.run(app, host="0.0.0.0", port=int(port), debug=True)
49 |
--------------------------------------------------------------------------------
/dotnet-core/Startup.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Builder;
2 | using Microsoft.AspNetCore.Hosting;
3 | using Microsoft.AspNetCore.Http;
4 | using Microsoft.Extensions.DependencyInjection;
5 | using Microsoft.Extensions.Hosting;
6 |
7 | namespace dot_net_gov
8 | {
9 | public class Startup
10 | {
11 | // This method gets called by the runtime. Use this method to add services to the container.
12 | // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
13 | public void ConfigureServices(IServiceCollection services)
14 | {
15 | }
16 |
17 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
18 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
19 | {
20 | if (env.IsDevelopment())
21 | {
22 | app.UseDeveloperExceptionPage();
23 | }
24 |
25 | app.UseRouting();
26 |
27 | app.UseEndpoints(endpoints =>
28 | {
29 | endpoints.MapGet("/", async context =>
30 | {
31 | await context.Response.WriteAsync("Hello World from .Net Core 8.0!");
32 | });
33 | });
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | As a work of the United States Government, this project is in the
2 | public domain within the United States.
3 |
4 | Additionally, we waive copyright and related rights in the work
5 | worldwide through the CC0 1.0 Universal public domain dedication.
6 |
7 | ## CC0 1.0 Universal Summary
8 |
9 | This is a human-readable summary of the [Legal Code (read the full text)](https://creativecommons.org/publicdomain/zero/1.0/legalcode).
10 |
11 | ### No Copyright
12 |
13 | The person who associated a work with this deed has dedicated the work to
14 | the public domain by waiving all of his or her rights to the work worldwide
15 | under copyright law, including all related and neighboring rights, to the
16 | extent allowed by law.
17 |
18 | You can copy, modify, distribute and perform the work, even for commercial
19 | purposes, all without asking permission.
20 |
21 | ### Other Information
22 |
23 | In no way are the patent or trademark rights of any person affected by CC0,
24 | nor are the rights that other persons may have in the work or in how the
25 | work is used, such as publicity or privacy rights.
26 |
27 | Unless expressly stated otherwise, the person who associated a work with
28 | this deed makes no warranties about the work, and disclaims liability for
29 | all uses of the work, to the fullest extent permitted by applicable law.
30 | When using or citing the work, you should not imply endorsement by the
31 | author or the affirmer.
32 |
--------------------------------------------------------------------------------
/python-flask-socketio/README.md:
--------------------------------------------------------------------------------
1 | # Python Flask + Socket IO example
2 |
3 | This example application shows how to integrate Python Flask with [Socket IO](https://socket.io/) to handle websocket traffic in your Python Flask application.
4 |
5 | ## Deploying
6 |
7 | Deploy the example application:
8 |
9 | ```shell
10 | cf push
11 | ```
12 |
13 | Assuming you are in the correct cf org and space, the above command is all you
14 | need. See also: [Cloud.gov Quickstart](https://cloud.gov/docs/getting-started/your-first-deploy/).
15 |
16 | ## Testing the websocket connection
17 |
18 | > You must have `node`/`npm` installed on your machine to use the `client.js` script for testing the websocket connection
19 |
20 | 1. Install the Node.js dependencies for the `client.js` script:
21 |
22 | ```shell
23 | npm install
24 | ```
25 |
26 | 1. Update this line in `client.js` with the URL of your application:
27 |
28 | ```javascript
29 | const socket = io("wss://.app.cloud.gov");
30 | ```
31 |
32 | 1. Run the `client.js` file:
33 |
34 | ```shell
35 | node client.js
36 | ```
37 |
38 | If you see output like:
39 |
40 | ```shell
41 | received message: Hello from the server!
42 | Sent message: Hi there!
43 | ```
44 |
45 | Then everything is working correctly. If the `client.js` script seems to produce no output, then:
46 |
47 | - Double-check that you updated the URL in `client.js` correctly
48 | - Inspect the logs from the example application for errors:
49 |
50 | ```shell
51 | cf logs test-python-flask-socketio --recent
52 | ```
53 |
--------------------------------------------------------------------------------
/java-spring-actuator/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 3.5.3
9 |
10 |
11 | gov.cloud.eng
12 | java-spring-actuator
13 | 0.0.1-SNAPSHOT
14 | java-spring-actuator
15 | Demo project for Spring Boot + Actuator
16 |
17 |
18 | 17
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter-actuator
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter
30 |
31 |
32 |
33 | org.springframework.boot
34 | spring-boot-starter-test
35 | test
36 |
37 |
38 | org.junit.vintage
39 | junit-vintage-engine
40 |
41 |
42 | junit
43 | junit
44 |
45 |
46 |
47 |
48 |
49 | org.springframework.boot
50 | spring-boot-starter-web
51 |
52 |
53 |
54 |
55 |
56 |
57 | org.springframework.boot
58 | spring-boot-maven-plugin
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/java-hello/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 3.5.3
9 |
10 |
11 | gov.cloud.eng
12 | hello-world
13 | 0.0.1-SNAPSHOT
14 | hello-world
15 | Demo project for Spring Boot
16 |
17 |
18 | 11
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter
25 |
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-test
30 | test
31 |
32 |
33 | org.junit.vintage
34 | junit-vintage-engine
35 |
36 |
37 | junit
38 | junit
39 |
40 |
41 |
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-starter-web
46 |
47 |
48 |
49 |
50 |
51 |
52 | org.springframework.boot
53 | spring-boot-maven-plugin
54 |
55 |
56 |
57 |
58 |
59 |
60 | spring-snapshots
61 | Spring Snapshots
62 | https://repo.spring.io/snapshot
63 |
64 | true
65 |
66 |
67 |
68 | spring-milestones
69 | Spring Milestones
70 | https://repo.spring.io/milestone
71 |
72 |
73 |
74 |
75 | spring-snapshots
76 | Spring Snapshots
77 | https://repo.spring.io/snapshot
78 |
79 | true
80 |
81 |
82 |
83 | spring-milestones
84 | Spring Milestones
85 | https://repo.spring.io/milestone
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/cf-cron/README.md:
--------------------------------------------------------------------------------
1 | # Running Cron Jobs on Cloud Foundry
2 |
3 | ## Note: originally from https://github.com/meshcloud/cf-cron,
4 |
5 | ## Quickstart
6 |
7 | * Edit the `crontab` to do what you want,
8 | * Download, checksum, and chmod the `supercronic` binary:
9 | `make`
10 | * Push the app:
11 | `cf push`
12 |
13 | ## Notes
14 |
15 | This repository demonstrates how to run scheduled tasks on Cloud Foundry with a very small footprint (8 to 16 MB RAM) using a traditional crontab. This means you can run it for a few cents of monthly cost.
16 |
17 | Traditional cron daemons need to run as root and have opinionated defaults for logging and error notifications. This makes them unsuitable for running in a containerized environment like Cloud Foundry. Instead of a system cron daemon we're thus using [supercronic](https://github.com/aptible/supercronic) to run our cron tab.
18 |
19 | ## How it works
20 |
21 | This application is built using the binary buildpack and executes `supercronic` on the `crontab` file. The `crontab`file specifies all your cron jobs. To add additional jobs, simply add a new line which specifies a schedule and command to the `crontab`.
22 |
23 | > Note: By default, `supercronic` will log [all output to stderr](https://github.com/aptible/supercronic/issues/16) so we redirect that to stdout in our cf manifest.
24 |
25 | You can also include additional scripts and binaries to execute more complex actions.
26 |
27 | After `cf push`ing this sample app to Cloud Foundry, you can see that it happily executes the jobs from the `crontab` in the log output:
28 |
29 | ```text
30 | Apr 18, 2025 @ 13:51:29.911 {"level":"info","msg":"read crontab: ./crontab","time":"2025-04-18T17:51:29Z"}
31 | Apr 18, 2025 @ 14:00:00.099 {"iteration":0,"job.command":"curl -s https://logs-workshop.app.cloud.gov/ 1\u003e/dev/null 2\u003e/dev/null","job.position":0,"job.schedule":"*/10 00-19,30-49 * * * * *","level":"info","msg":"starting","time":"2025-04-18T18:00:00Z"}
32 | Apr 18, 2025 @ 14:00:00.237 {"iteration":0,"job.command":"curl -s https://logs-workshop.app.cloud.gov/ 1\u003e/dev/null 2\u003e/dev/null","job.position":0,"job.schedule":"*/10 00-19,30-49 * * * * *","level":"info","msg":"job succeeded","time":"2025-04-18T18:00:00Z"}
33 | ```
34 |
35 | ## Maintaining Supercronic
36 |
37 | The binary for Supercronic comes from https://github.com/aptible/supercronic/releases, and you should check the periodically for updates.
38 |
39 | ## Running Scheduled Tasks on Cloud Foundry
40 |
41 | While the cron container here is designed to be small and lightweight, you may want to use it to trigger more resource intensive tasks and processes. When a simple `curl` to an http endpoint is not enough to kick off such a task on your existing app, [Cloud Foundry Tasks](https://docs.cloudfoundry.org/devguide/using-tasks.html) are a great solution to run these processes.
42 |
43 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Hello World apps for cloud.gov
2 |
3 | This repository contains minimal "Hello World" applications for a handful of different languages/frameworks for testing deployment to [cloud.gov](https://www.cloud.gov/), in particular, and other instances of [Cloud Foundry](https://www.cloudfoundry.org) ("CF") in general.
4 |
5 | For [cloud.gov](https://cloud.gov), follow the [quickstart guide](https://cloud.gov/docs/getting-started/your-first-deploy/) for a guided tour, or follow the USAGE below.
6 |
7 | ## Usage
8 |
9 | All of these examples, except Java, have the same usage. For Java, see its [INSTRUCTIONS.md](./java-hello-instructions/INSTRUCTIONS.md).
10 |
11 | 1. Follow the [Cloud Foundry command-line (CLI) setup instructions](https://docs.cloudfoundry.org/cf-cli/install-go-cli.html).
12 | 1. Log into your Cloud Foundry account. (For example, if you use cloud.gov, follow [the "Set up the command line" instructions](https://cloud.gov/docs/getting-started/setup/#set-up-the-command-line) to log in.)
13 | 1. Clone or download this repository, and `cd` into the directory `cf-hello-worlds`.
14 | 1. `cd` into the subdirectory for whatever language/framework you feel most comfortable with.
15 | 1. Deploy the application with `cf push`. Look for `urls` value when the push completes.
16 |
17 | ```bash{9}
18 | cf push --random-route
19 | ...
20 | Creating app APP in org / space
21 | OK
22 | ...[snip]...
23 | requested state: started
24 | instances: 1/1
25 | usage: 512M x 1 instances
26 | urls: php-random-words.app.cloud.gov
27 | last uploaded: Fri Nov 3 17:50:30 UTC 2017
28 | stack: cflinuxfs2
29 | ```
30 |
31 | 1. Visit your app with your browser at the URL assigned to your app. In the example above, that would be: e.g.
32 |
33 | All of examples produce web applications that respond "Hello World from <framework>" on their index page.
34 |
35 | ## See also
36 |
37 | * [Cloud Foundry community collection of sample applications](https://github.com/cloudfoundry-samples)
38 | * [cloud.gov Java Spring Boot example](https://github.com/18F/cf-sample-app-spring): This doesn't require `gradle` or any other dependencies.
39 | * [cloud.gov Drupal 8 example](https://github.com/18F/cf-ex-drupal8)
40 | * [cloud.gov Drupal 7 example](https://github.com/18F/cf-ex-drupal)
41 | * [cloud.gov Wordpress example](https://github.com/18F/cf-ex-wordpress)
42 |
43 | ## Public domain
44 |
45 | This project is in the worldwide [public domain](LICENSE.md). As stated in [CONTRIBUTING](CONTRIBUTING.md):
46 |
47 | >This project is in the public domain within the United States, and copyright and related rights in the work worldwide are waived through the [CC0 1.0 Universal public domain dedication](https://creativecommons.org/publicdomain/zero/1.0/).
48 | >
49 | >All contributions to this project will be released under the CC0
50 | >dedication. By submitting a pull request, you are agreeing to comply
51 | >with this waiver of copyright interest.
52 |
--------------------------------------------------------------------------------
/python-flask-socketio/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "python-flask-socketio",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "dependencies": {
8 | "socket.io-client": "^4.8.1"
9 | }
10 | },
11 | "node_modules/@socket.io/component-emitter": {
12 | "version": "3.1.2",
13 | "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
14 | "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
15 | "license": "MIT"
16 | },
17 | "node_modules/debug": {
18 | "version": "4.3.7",
19 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
20 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
21 | "license": "MIT",
22 | "dependencies": {
23 | "ms": "^2.1.3"
24 | },
25 | "engines": {
26 | "node": ">=6.0"
27 | },
28 | "peerDependenciesMeta": {
29 | "supports-color": {
30 | "optional": true
31 | }
32 | }
33 | },
34 | "node_modules/engine.io-client": {
35 | "version": "6.6.3",
36 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz",
37 | "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==",
38 | "license": "MIT",
39 | "dependencies": {
40 | "@socket.io/component-emitter": "~3.1.0",
41 | "debug": "~4.3.1",
42 | "engine.io-parser": "~5.2.1",
43 | "ws": "~8.17.1",
44 | "xmlhttprequest-ssl": "~2.1.1"
45 | }
46 | },
47 | "node_modules/engine.io-parser": {
48 | "version": "5.2.3",
49 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
50 | "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
51 | "license": "MIT",
52 | "engines": {
53 | "node": ">=10.0.0"
54 | }
55 | },
56 | "node_modules/ms": {
57 | "version": "2.1.3",
58 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
59 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
60 | "license": "MIT"
61 | },
62 | "node_modules/socket.io-client": {
63 | "version": "4.8.1",
64 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz",
65 | "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
66 | "license": "MIT",
67 | "dependencies": {
68 | "@socket.io/component-emitter": "~3.1.0",
69 | "debug": "~4.3.2",
70 | "engine.io-client": "~6.6.1",
71 | "socket.io-parser": "~4.2.4"
72 | },
73 | "engines": {
74 | "node": ">=10.0.0"
75 | }
76 | },
77 | "node_modules/socket.io-parser": {
78 | "version": "4.2.4",
79 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
80 | "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
81 | "license": "MIT",
82 | "dependencies": {
83 | "@socket.io/component-emitter": "~3.1.0",
84 | "debug": "~4.3.1"
85 | },
86 | "engines": {
87 | "node": ">=10.0.0"
88 | }
89 | },
90 | "node_modules/ws": {
91 | "version": "8.17.1",
92 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
93 | "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
94 | "license": "MIT",
95 | "engines": {
96 | "node": ">=10.0.0"
97 | },
98 | "peerDependencies": {
99 | "bufferutil": "^4.0.1",
100 | "utf-8-validate": ">=5.0.2"
101 | },
102 | "peerDependenciesMeta": {
103 | "bufferutil": {
104 | "optional": true
105 | },
106 | "utf-8-validate": {
107 | "optional": true
108 | }
109 | }
110 | },
111 | "node_modules/xmlhttprequest-ssl": {
112 | "version": "2.1.2",
113 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
114 | "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
115 | "engines": {
116 | "node": ">=0.4.0"
117 | }
118 | }
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/java-spring-actuator/README.md:
--------------------------------------------------------------------------------
1 | # How to deploy the Java Spring Actuator example app
2 |
3 | This example application demonstrates the ability to:
4 |
5 | - [route traffic to a custom port on a CloudFoundry application][custom-ports]
6 | - [use multiple routes to connect to multiple ports opened by an application][custom-ports]
7 | - [connect to an application using an internal route](https://docs.cloudfoundry.org/devguide/deploy-apps/routes-domains.html#internal-routes)
8 | - [use secure container-to-container networking with TLS][secure-c2c-with-tls]
9 |
10 | ## Build the application
11 |
12 | First, use the following command to download all of the dependencies and create the application for deploying.
13 |
14 | ### Mac OS X, Unix, or Linux
15 |
16 | ```bash
17 | ./mvnw compile
18 | ./mvnw package
19 | ```
20 |
21 | ## Windows
22 |
23 | ```powershell
24 | .\mvnw.cmd compile
25 | .\mvnw.cmd package
26 | ```
27 |
28 | ## Deploy the application and configure the networking
29 |
30 | 1. After building the application, follow the usual process for deploying:
31 |
32 | ```bash
33 | cf push --var app-domain=app.cloud.gov
34 | ```
35 |
36 | 2. Use the provided shell script to update the route for the Spring Boot process to listen on port `8081` (configured in [`manifest.yml`](./manifest.yml)):
37 |
38 | ```shell
39 | ./set-route-custom-port.sh test-java-spring-actuator test-java-spring-boot 8081
40 | ```
41 |
42 | 3. Restart the app so the route is properly handled:
43 |
44 | ```shell
45 | cf restart test-java-spring-actuator
46 | ```
47 |
48 | 4. Add a network policy allowing a separate app to reach the internal route for the Actuator process:
49 |
50 | ```shell
51 | cf add-network-policy SOURCE_APP test-java-spring-actuator --protocol tcp --port 61443
52 | ```
53 |
54 | You should be able to successfully make a request to the route for the Spring Boot process:
55 |
56 | ```shell
57 | $ curl https://test-java-spring-boot.app.cloud.gov/
58 | Greetings from cloud.gov!
59 | ```
60 |
61 | And if you `cf ssh SOURCE_APP`, you should be able to successfully make a request to the health check endpoint for the Acutator component:
62 |
63 | ```shell
64 | $ curl https://actuator.apps.internal:61443/actuator/health
65 | {"status":"UP","groups":["liveness","readiness"]}
66 | ```
67 |
68 | ## How it works
69 |
70 | ```mermaid
71 | flowchart LR
72 | spring-boot-url(test-java-spring.app.cloud.gov)
73 | user[User] --> spring-boot-url:::traffic
74 | spring-boot-url --> gorouter[Gorouter]
75 | gorouter --> spring-boot-port:::traffic
76 | internal-app-route --> spring-actuator-port:::traffic
77 |
78 | subgraph overlay-network[overlay network]
79 | internal-app-route(actuator.apps.internal:61443)
80 | end
81 | subgraph diego-cell[diego-cell VM]
82 | source-app[source app]
83 | source-app:::app --> internal-app-route:::traffic
84 |
85 | subgraph test-java-spring-actuator[test-java-spring-actuator app]
86 | spring-boot-port(:8081) --> spring-boot-process[Spring Boot]
87 | spring-actuator-port(:8080) --> spring-actuator-process[Actuator]
88 | end
89 | end
90 | ```
91 |
92 | There are two processes running in the `test-java-spring-actuator` app:
93 |
94 | - Spring Boot on port `8081` (configured in [`manifest.yml`](./manifest.yml))
95 | - Actuator on port `8080` (configured in [`src/main/resources/application.properties`](./src/main/resources/application.properties))
96 |
97 | Traffic is routed to the processes as follows:
98 |
99 | - Requests to the route `test-java-spring.app.cloud.gov` go over the public internet and hit the Gorouter, which directs the request to port `8081` on the `test-java-spring-actuator` app. By default, a route would usually go to port `8080` on the app, but we updated the route to use port `8081` using the [`set-route-custom-port.sh`](./set-route-custom-port.sh) script.
100 | - Requests to the route `actuator.apps.internal:61443` from a separate application go through a container overlay network to the `test-java-spring-actuator` app. These requests **do not go out to the public internet**. By default, [requests to port `61443` for secure container-to-container networking are proxied to port `8080`](secure-c2c-with-tls), so the request hits port `8080` in the container and thus the Actuator process.
101 |
102 | ## Helpful resources
103 |
104 | - [Configuring Cloud Foundry to route traffic to apps on custom ports][custom-ports]
105 | - [Building a RESTful Web Service with Spring Boot Actuator](https://spring.io/guides/gs/actuator-service/)
106 | - [Container to container networking in CloudFoundry](https://docs.cloudfoundry.org/concepts/understand-cf-networking.html)
107 | - [Securing Container-to-Container Networking with TLS][secure-c2c-with-tls]
108 |
109 | [custom-ports]: https://docs.cloudfoundry.org/devguide/custom-ports.html
110 | [secure-c2c-with-tls]: https://www.cloudfoundry.org/blog/secure-container-networking-with-tls/
111 |
--------------------------------------------------------------------------------
/java-hello/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM http://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Apache Maven Wrapper startup batch script, version 3.3.0
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
28 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
29 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
30 | @REM e.g. to debug Maven itself, use
31 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
32 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
33 | @REM ----------------------------------------------------------------------------
34 |
35 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
36 | @echo off
37 | @REM set title of command window
38 | title %0
39 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
40 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
41 |
42 | @REM set %HOME% to equivalent of $HOME
43 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
44 |
45 | @REM Execute a user defined script before this one
46 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
47 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
48 | if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
49 | if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
50 | :skipRcPre
51 |
52 | @setlocal
53 |
54 | set ERROR_CODE=0
55 |
56 | @REM To isolate internal variables from possible post scripts, we use another setlocal
57 | @setlocal
58 |
59 | @REM ==== START VALIDATION ====
60 | if not "%JAVA_HOME%" == "" goto OkJHome
61 |
62 | echo. >&2
63 | echo Error: JAVA_HOME not found in your environment. >&2
64 | echo Please set the JAVA_HOME variable in your environment to match the >&2
65 | echo location of your Java installation. >&2
66 | echo. >&2
67 | goto error
68 |
69 | :OkJHome
70 | if exist "%JAVA_HOME%\bin\java.exe" goto init
71 |
72 | echo. >&2
73 | echo Error: JAVA_HOME is set to an invalid directory. >&2
74 | echo JAVA_HOME = "%JAVA_HOME%" >&2
75 | echo Please set the JAVA_HOME variable in your environment to match the >&2
76 | echo location of your Java installation. >&2
77 | echo. >&2
78 | goto error
79 |
80 | @REM ==== END VALIDATION ====
81 |
82 | :init
83 |
84 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
85 | @REM Fallback to current working directory if not found.
86 |
87 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
88 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
89 |
90 | set EXEC_DIR=%CD%
91 | set WDIR=%EXEC_DIR%
92 | :findBaseDir
93 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
94 | cd ..
95 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
96 | set WDIR=%CD%
97 | goto findBaseDir
98 |
99 | :baseDirFound
100 | set MAVEN_PROJECTBASEDIR=%WDIR%
101 | cd "%EXEC_DIR%"
102 | goto endDetectBaseDir
103 |
104 | :baseDirNotFound
105 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
106 | cd "%EXEC_DIR%"
107 |
108 | :endDetectBaseDir
109 |
110 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
111 |
112 | @setlocal EnableExtensions EnableDelayedExpansion
113 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
114 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
115 |
116 | :endReadAdditionalConfig
117 |
118 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
121 |
122 | set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
123 |
124 | FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
125 | IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
126 | )
127 |
128 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
129 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
130 | if exist %WRAPPER_JAR% (
131 | if "%MVNW_VERBOSE%" == "true" (
132 | echo Found %WRAPPER_JAR%
133 | )
134 | ) else (
135 | if not "%MVNW_REPOURL%" == "" (
136 | SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
137 | )
138 | if "%MVNW_VERBOSE%" == "true" (
139 | echo Couldn't find %WRAPPER_JAR%, downloading it ...
140 | echo Downloading from: %WRAPPER_URL%
141 | )
142 |
143 | powershell -Command "&{"^
144 | "$webclient = new-object System.Net.WebClient;"^
145 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
146 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
147 | "}"^
148 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
149 | "}"
150 | if "%MVNW_VERBOSE%" == "true" (
151 | echo Finished downloading %WRAPPER_JAR%
152 | )
153 | )
154 | @REM End of extension
155 |
156 | @REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
157 | SET WRAPPER_SHA_256_SUM=""
158 | FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
159 | IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
160 | )
161 | IF NOT %WRAPPER_SHA_256_SUM%=="" (
162 | powershell -Command "&{"^
163 | "Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash;"^
164 | "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
165 | "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
166 | " Write-Error 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
167 | " Write-Error 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
168 | " Write-Error 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
169 | " exit 1;"^
170 | "}"^
171 | "}"
172 | if ERRORLEVEL 1 goto error
173 | )
174 |
175 | @REM Provide a "standardized" way to retrieve the CLI args that will
176 | @REM work with both Windows and non-Windows executions.
177 | set MAVEN_CMD_LINE_ARGS=%*
178 |
179 | %MAVEN_JAVA_EXE% ^
180 | %JVM_CONFIG_MAVEN_PROPS% ^
181 | %MAVEN_OPTS% ^
182 | %MAVEN_DEBUG_OPTS% ^
183 | -classpath %WRAPPER_JAR% ^
184 | "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
185 | %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
186 | if ERRORLEVEL 1 goto error
187 | goto end
188 |
189 | :error
190 | set ERROR_CODE=1
191 |
192 | :end
193 | @endlocal & set ERROR_CODE=%ERROR_CODE%
194 |
195 | if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
196 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
197 | if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
198 | if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
199 | :skipRcPost
200 |
201 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
202 | if "%MAVEN_BATCH_PAUSE%"=="on" pause
203 |
204 | if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
205 |
206 | cmd /C exit /B %ERROR_CODE%
207 |
--------------------------------------------------------------------------------
/java-spring-actuator/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM http://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Apache Maven Wrapper startup batch script, version 3.3.0
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
28 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
29 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
30 | @REM e.g. to debug Maven itself, use
31 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
32 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
33 | @REM ----------------------------------------------------------------------------
34 |
35 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
36 | @echo off
37 | @REM set title of command window
38 | title %0
39 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
40 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
41 |
42 | @REM set %HOME% to equivalent of $HOME
43 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
44 |
45 | @REM Execute a user defined script before this one
46 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
47 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
48 | if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
49 | if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
50 | :skipRcPre
51 |
52 | @setlocal
53 |
54 | set ERROR_CODE=0
55 |
56 | @REM To isolate internal variables from possible post scripts, we use another setlocal
57 | @setlocal
58 |
59 | @REM ==== START VALIDATION ====
60 | if not "%JAVA_HOME%" == "" goto OkJHome
61 |
62 | echo. >&2
63 | echo Error: JAVA_HOME not found in your environment. >&2
64 | echo Please set the JAVA_HOME variable in your environment to match the >&2
65 | echo location of your Java installation. >&2
66 | echo. >&2
67 | goto error
68 |
69 | :OkJHome
70 | if exist "%JAVA_HOME%\bin\java.exe" goto init
71 |
72 | echo. >&2
73 | echo Error: JAVA_HOME is set to an invalid directory. >&2
74 | echo JAVA_HOME = "%JAVA_HOME%" >&2
75 | echo Please set the JAVA_HOME variable in your environment to match the >&2
76 | echo location of your Java installation. >&2
77 | echo. >&2
78 | goto error
79 |
80 | @REM ==== END VALIDATION ====
81 |
82 | :init
83 |
84 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
85 | @REM Fallback to current working directory if not found.
86 |
87 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
88 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
89 |
90 | set EXEC_DIR=%CD%
91 | set WDIR=%EXEC_DIR%
92 | :findBaseDir
93 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
94 | cd ..
95 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
96 | set WDIR=%CD%
97 | goto findBaseDir
98 |
99 | :baseDirFound
100 | set MAVEN_PROJECTBASEDIR=%WDIR%
101 | cd "%EXEC_DIR%"
102 | goto endDetectBaseDir
103 |
104 | :baseDirNotFound
105 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
106 | cd "%EXEC_DIR%"
107 |
108 | :endDetectBaseDir
109 |
110 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
111 |
112 | @setlocal EnableExtensions EnableDelayedExpansion
113 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
114 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
115 |
116 | :endReadAdditionalConfig
117 |
118 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
121 |
122 | set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
123 |
124 | FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
125 | IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
126 | )
127 |
128 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
129 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
130 | if exist %WRAPPER_JAR% (
131 | if "%MVNW_VERBOSE%" == "true" (
132 | echo Found %WRAPPER_JAR%
133 | )
134 | ) else (
135 | if not "%MVNW_REPOURL%" == "" (
136 | SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
137 | )
138 | if "%MVNW_VERBOSE%" == "true" (
139 | echo Couldn't find %WRAPPER_JAR%, downloading it ...
140 | echo Downloading from: %WRAPPER_URL%
141 | )
142 |
143 | powershell -Command "&{"^
144 | "$webclient = new-object System.Net.WebClient;"^
145 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
146 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
147 | "}"^
148 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
149 | "}"
150 | if "%MVNW_VERBOSE%" == "true" (
151 | echo Finished downloading %WRAPPER_JAR%
152 | )
153 | )
154 | @REM End of extension
155 |
156 | @REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
157 | SET WRAPPER_SHA_256_SUM=""
158 | FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
159 | IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
160 | )
161 | IF NOT %WRAPPER_SHA_256_SUM%=="" (
162 | powershell -Command "&{"^
163 | "Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash;"^
164 | "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
165 | "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
166 | " Write-Error 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
167 | " Write-Error 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
168 | " Write-Error 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
169 | " exit 1;"^
170 | "}"^
171 | "}"
172 | if ERRORLEVEL 1 goto error
173 | )
174 |
175 | @REM Provide a "standardized" way to retrieve the CLI args that will
176 | @REM work with both Windows and non-Windows executions.
177 | set MAVEN_CMD_LINE_ARGS=%*
178 |
179 | %MAVEN_JAVA_EXE% ^
180 | %JVM_CONFIG_MAVEN_PROPS% ^
181 | %MAVEN_OPTS% ^
182 | %MAVEN_DEBUG_OPTS% ^
183 | -classpath %WRAPPER_JAR% ^
184 | "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
185 | %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
186 | if ERRORLEVEL 1 goto error
187 | goto end
188 |
189 | :error
190 | set ERROR_CODE=1
191 |
192 | :end
193 | @endlocal & set ERROR_CODE=%ERROR_CODE%
194 |
195 | if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
196 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
197 | if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
198 | if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
199 | :skipRcPost
200 |
201 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
202 | if "%MAVEN_BATCH_PAUSE%"=="on" pause
203 |
204 | if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
205 |
206 | cmd /C exit /B %ERROR_CODE%
207 |
--------------------------------------------------------------------------------
/java-hello/hello-world.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
--------------------------------------------------------------------------------
/pipeline.yml:
--------------------------------------------------------------------------------
1 | jobs:
2 | - name: set-self
3 | plan:
4 | - get: cf-hello-worlds
5 | trigger: true
6 | - set_pipeline: self
7 | file: cf-hello-worlds/pipeline.yml
8 |
9 | - name: deploy-python-flask
10 | serial_groups: [apps]
11 | plan:
12 | - in_parallel: &plan-gets
13 | - get: cf-hello-worlds
14 | trigger: true
15 | passed: [set-self]
16 | - get: timer
17 | trigger: true
18 | - put: deploy-python-flask-staging
19 | params:
20 | path: cf-hello-worlds/python-flask
21 | manifest: cf-hello-worlds/python-flask/manifest.yml
22 | - put: deploy-python-flask-production
23 | params:
24 | path: cf-hello-worlds/python-flask
25 | manifest: cf-hello-worlds/python-flask/manifest.yml
26 | on_failure:
27 | put: slack
28 | params: &slack-params
29 | text: |
30 | :x: Failed to deploy python-flask sample app
31 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
32 | channel: ((slack-failure-channel))
33 | username: ((slack-username))
34 | icon_url: ((slack-icon-url))
35 |
36 | - name: deploy-ruby-sinatra
37 | serial_groups: [apps]
38 | plan:
39 | - in_parallel: *plan-gets
40 | - put: deploy-ruby-sinatra-staging
41 | params:
42 | path: cf-hello-worlds/ruby-sinatra
43 | manifest: cf-hello-worlds/ruby-sinatra/manifest.yml
44 | - put: deploy-ruby-sinatra-production
45 | params:
46 | path: cf-hello-worlds/ruby-sinatra
47 | manifest: cf-hello-worlds/ruby-sinatra/manifest.yml
48 | on_failure:
49 | put: slack
50 | params:
51 | <<: *slack-params
52 | text: |
53 | :x: Failed to deploy ruby-sinatra sample app
54 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
55 |
56 | - name: deploy-nodejs
57 | serial_groups: [apps]
58 | plan:
59 | - in_parallel: *plan-gets
60 | - put: deploy-nodejs-staging
61 | params:
62 | path: cf-hello-worlds/nodejs
63 | manifest: cf-hello-worlds/nodejs/manifest.yml
64 | - put: deploy-nodejs-production
65 | params:
66 | path: cf-hello-worlds/nodejs
67 | manifest: cf-hello-worlds/nodejs/manifest.yml
68 | on_failure:
69 | put: slack
70 | params:
71 | <<: *slack-params
72 | text: |
73 | :x: Failed to deploy nodejs sample app
74 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
75 |
76 | - name: deploy-nodejs-cnb
77 | serial_groups: [apps]
78 | plan:
79 | - in_parallel: *plan-gets
80 | - put: deploy-nodejs-cnb-staging
81 | params:
82 | path: cf-hello-worlds/nodejs
83 | manifest: cf-hello-worlds/nodejs/manifest-cnb.yml
84 | - put: deploy-nodejs-cnb-production
85 | params:
86 | path: cf-hello-worlds/nodejs
87 | manifest: cf-hello-worlds/nodejs/manifest-cnb.yml
88 | on_failure:
89 | put: slack
90 | params:
91 | <<: *slack-params
92 | text: |
93 | :x: Failed to deploy nodejs CNB sample app
94 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
95 |
96 | - name: deploy-php
97 | serial_groups: [apps]
98 | plan:
99 | - in_parallel: *plan-gets
100 | - put: deploy-php-staging
101 | params:
102 | path: cf-hello-worlds/php
103 | manifest: cf-hello-worlds/php/manifest.yml
104 | - put: deploy-php-production
105 | params:
106 | path: cf-hello-worlds/php
107 | manifest: cf-hello-worlds/php/manifest.yml
108 | on_failure:
109 | put: slack
110 | params:
111 | <<: *slack-params
112 | text: |
113 | :x: Failed to deploy php sample app
114 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
115 |
116 | - name: deploy-java
117 | serial_groups: [apps]
118 | plan:
119 | - in_parallel: *plan-gets
120 | - task: build
121 | file: cf-hello-worlds/java-hello/build-java-hello.yml
122 | - put: deploy-java-staging
123 | params:
124 | path: cf-hello-worlds-build/java-hello/target/hello-world-0.0.1-SNAPSHOT.jar
125 | manifest: cf-hello-worlds-build/java-hello/manifest.yml
126 | - put: deploy-java-production
127 | params:
128 | path: cf-hello-worlds-build/java-hello/target/hello-world-0.0.1-SNAPSHOT.jar
129 | manifest: cf-hello-worlds-build/java-hello/manifest.yml
130 | on_failure:
131 | put: slack
132 | params:
133 | <<: *slack-params
134 | text: |
135 | :x: Failed to deploy java sample app
136 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
137 |
138 | - name: deploy-dotnet-core
139 | serial_groups: [apps]
140 | plan:
141 | - in_parallel: *plan-gets
142 | - put: deploy-dotnet-core-staging
143 | params:
144 | path: cf-hello-worlds/dotnet-core
145 | manifest: cf-hello-worlds/dotnet-core/manifest.yml
146 | - put: deploy-dotnet-core-production
147 | params:
148 | path: cf-hello-worlds/dotnet-core
149 | manifest: cf-hello-worlds/dotnet-core/manifest.yml
150 | on_failure:
151 | put: slack
152 | params:
153 | <<: *slack-params
154 | text: |
155 | :x: Failed to deploy dotnet-core sample app
156 | <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
157 |
158 | resources:
159 | - name: cf-hello-worlds
160 | type: git
161 | source:
162 | uri: https://github.com/cloud-gov/cf-hello-worlds
163 | branch: main
164 | commit_verification_keys: ((cloud-gov-pgp-keys))
165 |
166 | - name: timer
167 | type: time
168 | source:
169 | interval: 24h
170 |
171 | - name: deploy-python-flask-staging
172 | type: cf
173 | source: &cf-source-staging
174 | api: ((staging-cf-api-url))
175 | username: ((cf-username-staging))
176 | password: ((cf-password-staging))
177 | organization: ((cf-organization-staging))
178 | space: ((cf-space-staging))
179 |
180 | - name: deploy-ruby-sinatra-staging
181 | type: cf
182 | source: *cf-source-staging
183 |
184 | - name: deploy-nodejs-staging
185 | type: cf
186 | source: *cf-source-staging
187 |
188 | - name: deploy-nodejs-cnb-staging
189 | type: cf
190 | source: *cf-source-staging
191 |
192 | - name: deploy-php-staging
193 | type: cf
194 | source: *cf-source-staging
195 |
196 | - name: deploy-java-staging
197 | type: cf
198 | source: *cf-source-staging
199 |
200 | - name: deploy-dotnet-core-staging
201 | type: cf
202 | source: *cf-source-staging
203 |
204 | - name: deploy-python-flask-production
205 | type: cf
206 | source: &cf-source-production
207 | api: ((prod-cf-api-url))
208 | username: ((cf-username-production))
209 | password: ((cf-password-production))
210 | organization: ((cf-organization-production))
211 | space: ((cf-space-production))
212 |
213 | - name: deploy-ruby-sinatra-production
214 | type: cf
215 | source: *cf-source-production
216 |
217 | - name: deploy-nodejs-production
218 | type: cf
219 | source: *cf-source-production
220 |
221 | - name: deploy-nodejs-cnb-production
222 | type: cf
223 | source: *cf-source-production
224 |
225 | - name: deploy-php-production
226 | type: cf
227 | source: *cf-source-production
228 |
229 | - name: deploy-java-production
230 | type: cf
231 | source: *cf-source-production
232 |
233 | - name: deploy-dotnet-core-production
234 | type: cf
235 | source: *cf-source-production
236 |
237 | - name: slack
238 | type: slack-notification
239 | source:
240 | url: ((slack-webhook-url))
241 |
242 | resource_types:
243 | - name: slack-notification
244 | type: registry-image
245 | source:
246 | aws_access_key_id: ((ecr_aws_key))
247 | aws_secret_access_key: ((ecr_aws_secret))
248 | repository: slack-notification-resource
249 | aws_region: us-gov-west-1
250 | tag: latest
251 |
252 | - name: git
253 | type: registry-image
254 | source:
255 | aws_access_key_id: ((ecr_aws_key))
256 | aws_secret_access_key: ((ecr_aws_secret))
257 | repository: git-resource
258 | aws_region: us-gov-west-1
259 | tag: latest
260 |
261 | - name: cf
262 | type: registry-image
263 | source:
264 | aws_access_key_id: ((ecr_aws_key))
265 | aws_secret_access_key: ((ecr_aws_secret))
266 | repository: cf-resource
267 | aws_region: us-gov-west-1
268 | tag: latest
269 |
270 | - name: registry-image
271 | type: registry-image
272 | source:
273 | aws_access_key_id: ((ecr_aws_key))
274 | aws_secret_access_key: ((ecr_aws_secret))
275 | repository: registry-image-resource
276 | aws_region: us-gov-west-1
277 | tag: latest
278 |
279 | - name: time
280 | type: registry-image
281 | source:
282 | aws_access_key_id: ((ecr_aws_key))
283 | aws_secret_access_key: ((ecr_aws_secret))
284 | repository: time-resource
285 | aws_region: us-gov-west-1
286 | tag: latest
287 |
--------------------------------------------------------------------------------
/dotnet-core/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/java-hello/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Apache Maven Wrapper startup batch script, version 3.3.0
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | # e.g. to debug Maven itself, use
32 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | # ----------------------------------------------------------------------------
35 |
36 | if [ -z "$MAVEN_SKIP_RC" ]; then
37 |
38 | if [ -f /usr/local/etc/mavenrc ]; then
39 | . /usr/local/etc/mavenrc
40 | fi
41 |
42 | if [ -f /etc/mavenrc ]; then
43 | . /etc/mavenrc
44 | fi
45 |
46 | if [ -f "$HOME/.mavenrc" ]; then
47 | . "$HOME/.mavenrc"
48 | fi
49 |
50 | fi
51 |
52 | # OS specific support. $var _must_ be set to either true or false.
53 | cygwin=false
54 | darwin=false
55 | mingw=false
56 | case "$(uname)" in
57 | CYGWIN*) cygwin=true ;;
58 | MINGW*) mingw=true ;;
59 | Darwin*)
60 | darwin=true
61 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63 | if [ -z "$JAVA_HOME" ]; then
64 | if [ -x "/usr/libexec/java_home" ]; then
65 | JAVA_HOME="$(/usr/libexec/java_home)"
66 | export JAVA_HOME
67 | else
68 | JAVA_HOME="/Library/Java/Home"
69 | export JAVA_HOME
70 | fi
71 | fi
72 | ;;
73 | esac
74 |
75 | if [ -z "$JAVA_HOME" ]; then
76 | if [ -r /etc/gentoo-release ]; then
77 | JAVA_HOME=$(java-config --jre-home)
78 | fi
79 | fi
80 |
81 | # For Cygwin, ensure paths are in UNIX format before anything is touched
82 | if $cygwin; then
83 | [ -n "$JAVA_HOME" ] \
84 | && JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
85 | [ -n "$CLASSPATH" ] \
86 | && CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
87 | fi
88 |
89 | # For Mingw, ensure paths are in UNIX format before anything is touched
90 | if $mingw; then
91 | [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] \
92 | && JAVA_HOME="$(
93 | cd "$JAVA_HOME" || (
94 | echo "cannot cd into $JAVA_HOME." >&2
95 | exit 1
96 | )
97 | pwd
98 | )"
99 | fi
100 |
101 | if [ -z "$JAVA_HOME" ]; then
102 | javaExecutable="$(which javac)"
103 | if [ -n "$javaExecutable" ] && ! [ "$(expr "$javaExecutable" : '\([^ ]*\)')" = "no" ]; then
104 | # readlink(1) is not available as standard on Solaris 10.
105 | readLink=$(which readlink)
106 | if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
107 | if $darwin; then
108 | javaHome="$(dirname "$javaExecutable")"
109 | javaExecutable="$(cd "$javaHome" && pwd -P)/javac"
110 | else
111 | javaExecutable="$(readlink -f "$javaExecutable")"
112 | fi
113 | javaHome="$(dirname "$javaExecutable")"
114 | javaHome=$(expr "$javaHome" : '\(.*\)/bin')
115 | JAVA_HOME="$javaHome"
116 | export JAVA_HOME
117 | fi
118 | fi
119 | fi
120 |
121 | if [ -z "$JAVACMD" ]; then
122 | if [ -n "$JAVA_HOME" ]; then
123 | if [ -x "$JAVA_HOME/jre/sh/java" ]; then
124 | # IBM's JDK on AIX uses strange locations for the executables
125 | JAVACMD="$JAVA_HOME/jre/sh/java"
126 | else
127 | JAVACMD="$JAVA_HOME/bin/java"
128 | fi
129 | else
130 | JAVACMD="$(
131 | \unset -f command 2>/dev/null
132 | \command -v java
133 | )"
134 | fi
135 | fi
136 |
137 | if [ ! -x "$JAVACMD" ]; then
138 | echo "Error: JAVA_HOME is not defined correctly." >&2
139 | echo " We cannot execute $JAVACMD" >&2
140 | exit 1
141 | fi
142 |
143 | if [ -z "$JAVA_HOME" ]; then
144 | echo "Warning: JAVA_HOME environment variable is not set." >&2
145 | fi
146 |
147 | # traverses directory structure from process work directory to filesystem root
148 | # first directory with .mvn subdirectory is considered project base directory
149 | find_maven_basedir() {
150 | if [ -z "$1" ]; then
151 | echo "Path not specified to find_maven_basedir" >&2
152 | return 1
153 | fi
154 |
155 | basedir="$1"
156 | wdir="$1"
157 | while [ "$wdir" != '/' ]; do
158 | if [ -d "$wdir"/.mvn ]; then
159 | basedir=$wdir
160 | break
161 | fi
162 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
163 | if [ -d "${wdir}" ]; then
164 | wdir=$(
165 | cd "$wdir/.." || exit 1
166 | pwd
167 | )
168 | fi
169 | # end of workaround
170 | done
171 | printf '%s' "$(
172 | cd "$basedir" || exit 1
173 | pwd
174 | )"
175 | }
176 |
177 | # concatenates all lines of a file
178 | concat_lines() {
179 | if [ -f "$1" ]; then
180 | # Remove \r in case we run on Windows within Git Bash
181 | # and check out the repository with auto CRLF management
182 | # enabled. Otherwise, we may read lines that are delimited with
183 | # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
184 | # splitting rules.
185 | tr -s '\r\n' ' ' <"$1"
186 | fi
187 | }
188 |
189 | log() {
190 | if [ "$MVNW_VERBOSE" = true ]; then
191 | printf '%s\n' "$1"
192 | fi
193 | }
194 |
195 | BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
196 | if [ -z "$BASE_DIR" ]; then
197 | exit 1
198 | fi
199 |
200 | MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
201 | export MAVEN_PROJECTBASEDIR
202 | log "$MAVEN_PROJECTBASEDIR"
203 |
204 | ##########################################################################################
205 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
206 | # This allows using the maven wrapper in projects that prohibit checking in binary data.
207 | ##########################################################################################
208 | wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
209 | if [ -r "$wrapperJarPath" ]; then
210 | log "Found $wrapperJarPath"
211 | else
212 | log "Couldn't find $wrapperJarPath, downloading it ..."
213 |
214 | if [ -n "$MVNW_REPOURL" ]; then
215 | wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
216 | else
217 | wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
218 | fi
219 | while IFS="=" read -r key value; do
220 | # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
221 | safeValue=$(echo "$value" | tr -d '\r')
222 | case "$key" in wrapperUrl)
223 | wrapperUrl="$safeValue"
224 | break
225 | ;;
226 | esac
227 | done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
228 | log "Downloading from: $wrapperUrl"
229 |
230 | if $cygwin; then
231 | wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
232 | fi
233 |
234 | if command -v wget >/dev/null; then
235 | log "Found wget ... using wget"
236 | [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
237 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
238 | wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
239 | else
240 | wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241 | fi
242 | elif command -v curl >/dev/null; then
243 | log "Found curl ... using curl"
244 | [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
245 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
246 | curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
247 | else
248 | curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
249 | fi
250 | else
251 | log "Falling back to using Java to download"
252 | javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
253 | javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
254 | # For Cygwin, switch paths to Windows format before running javac
255 | if $cygwin; then
256 | javaSource=$(cygpath --path --windows "$javaSource")
257 | javaClass=$(cygpath --path --windows "$javaClass")
258 | fi
259 | if [ -e "$javaSource" ]; then
260 | if [ ! -e "$javaClass" ]; then
261 | log " - Compiling MavenWrapperDownloader.java ..."
262 | ("$JAVA_HOME/bin/javac" "$javaSource")
263 | fi
264 | if [ -e "$javaClass" ]; then
265 | log " - Running MavenWrapperDownloader.java ..."
266 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
267 | fi
268 | fi
269 | fi
270 | fi
271 | ##########################################################################################
272 | # End of extension
273 | ##########################################################################################
274 |
275 | # If specified, validate the SHA-256 sum of the Maven wrapper jar file
276 | wrapperSha256Sum=""
277 | while IFS="=" read -r key value; do
278 | case "$key" in wrapperSha256Sum)
279 | wrapperSha256Sum=$value
280 | break
281 | ;;
282 | esac
283 | done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
284 | if [ -n "$wrapperSha256Sum" ]; then
285 | wrapperSha256Result=false
286 | if command -v sha256sum >/dev/null; then
287 | if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c >/dev/null 2>&1; then
288 | wrapperSha256Result=true
289 | fi
290 | elif command -v shasum >/dev/null; then
291 | if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c >/dev/null 2>&1; then
292 | wrapperSha256Result=true
293 | fi
294 | else
295 | echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
296 | echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." >&2
297 | exit 1
298 | fi
299 | if [ $wrapperSha256Result = false ]; then
300 | echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
301 | echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
302 | echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
303 | exit 1
304 | fi
305 | fi
306 |
307 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
308 |
309 | # For Cygwin, switch paths to Windows format before running java
310 | if $cygwin; then
311 | [ -n "$JAVA_HOME" ] \
312 | && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
313 | [ -n "$CLASSPATH" ] \
314 | && CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
315 | [ -n "$MAVEN_PROJECTBASEDIR" ] \
316 | && MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
317 | fi
318 |
319 | # Provide a "standardized" way to retrieve the CLI args that will
320 | # work with both Windows and non-Windows executions.
321 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
322 | export MAVEN_CMD_LINE_ARGS
323 |
324 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
325 |
326 | # shellcheck disable=SC2086 # safe args
327 | exec "$JAVACMD" \
328 | $MAVEN_OPTS \
329 | $MAVEN_DEBUG_OPTS \
330 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
331 | "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
332 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
333 |
--------------------------------------------------------------------------------
/java-spring-actuator/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Apache Maven Wrapper startup batch script, version 3.3.0
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | # e.g. to debug Maven itself, use
32 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | # ----------------------------------------------------------------------------
35 |
36 | if [ -z "$MAVEN_SKIP_RC" ]; then
37 |
38 | if [ -f /usr/local/etc/mavenrc ]; then
39 | . /usr/local/etc/mavenrc
40 | fi
41 |
42 | if [ -f /etc/mavenrc ]; then
43 | . /etc/mavenrc
44 | fi
45 |
46 | if [ -f "$HOME/.mavenrc" ]; then
47 | . "$HOME/.mavenrc"
48 | fi
49 |
50 | fi
51 |
52 | # OS specific support. $var _must_ be set to either true or false.
53 | cygwin=false
54 | darwin=false
55 | mingw=false
56 | case "$(uname)" in
57 | CYGWIN*) cygwin=true ;;
58 | MINGW*) mingw=true ;;
59 | Darwin*)
60 | darwin=true
61 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63 | if [ -z "$JAVA_HOME" ]; then
64 | if [ -x "/usr/libexec/java_home" ]; then
65 | JAVA_HOME="$(/usr/libexec/java_home)"
66 | export JAVA_HOME
67 | else
68 | JAVA_HOME="/Library/Java/Home"
69 | export JAVA_HOME
70 | fi
71 | fi
72 | ;;
73 | esac
74 |
75 | if [ -z "$JAVA_HOME" ]; then
76 | if [ -r /etc/gentoo-release ]; then
77 | JAVA_HOME=$(java-config --jre-home)
78 | fi
79 | fi
80 |
81 | # For Cygwin, ensure paths are in UNIX format before anything is touched
82 | if $cygwin; then
83 | [ -n "$JAVA_HOME" ] \
84 | && JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
85 | [ -n "$CLASSPATH" ] \
86 | && CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
87 | fi
88 |
89 | # For Mingw, ensure paths are in UNIX format before anything is touched
90 | if $mingw; then
91 | [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] \
92 | && JAVA_HOME="$(
93 | cd "$JAVA_HOME" || (
94 | echo "cannot cd into $JAVA_HOME." >&2
95 | exit 1
96 | )
97 | pwd
98 | )"
99 | fi
100 |
101 | if [ -z "$JAVA_HOME" ]; then
102 | javaExecutable="$(which javac)"
103 | if [ -n "$javaExecutable" ] && ! [ "$(expr "$javaExecutable" : '\([^ ]*\)')" = "no" ]; then
104 | # readlink(1) is not available as standard on Solaris 10.
105 | readLink=$(which readlink)
106 | if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
107 | if $darwin; then
108 | javaHome="$(dirname "$javaExecutable")"
109 | javaExecutable="$(cd "$javaHome" && pwd -P)/javac"
110 | else
111 | javaExecutable="$(readlink -f "$javaExecutable")"
112 | fi
113 | javaHome="$(dirname "$javaExecutable")"
114 | javaHome=$(expr "$javaHome" : '\(.*\)/bin')
115 | JAVA_HOME="$javaHome"
116 | export JAVA_HOME
117 | fi
118 | fi
119 | fi
120 |
121 | if [ -z "$JAVACMD" ]; then
122 | if [ -n "$JAVA_HOME" ]; then
123 | if [ -x "$JAVA_HOME/jre/sh/java" ]; then
124 | # IBM's JDK on AIX uses strange locations for the executables
125 | JAVACMD="$JAVA_HOME/jre/sh/java"
126 | else
127 | JAVACMD="$JAVA_HOME/bin/java"
128 | fi
129 | else
130 | JAVACMD="$(
131 | \unset -f command 2>/dev/null
132 | \command -v java
133 | )"
134 | fi
135 | fi
136 |
137 | if [ ! -x "$JAVACMD" ]; then
138 | echo "Error: JAVA_HOME is not defined correctly." >&2
139 | echo " We cannot execute $JAVACMD" >&2
140 | exit 1
141 | fi
142 |
143 | if [ -z "$JAVA_HOME" ]; then
144 | echo "Warning: JAVA_HOME environment variable is not set." >&2
145 | fi
146 |
147 | # traverses directory structure from process work directory to filesystem root
148 | # first directory with .mvn subdirectory is considered project base directory
149 | find_maven_basedir() {
150 | if [ -z "$1" ]; then
151 | echo "Path not specified to find_maven_basedir" >&2
152 | return 1
153 | fi
154 |
155 | basedir="$1"
156 | wdir="$1"
157 | while [ "$wdir" != '/' ]; do
158 | if [ -d "$wdir"/.mvn ]; then
159 | basedir=$wdir
160 | break
161 | fi
162 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
163 | if [ -d "${wdir}" ]; then
164 | wdir=$(
165 | cd "$wdir/.." || exit 1
166 | pwd
167 | )
168 | fi
169 | # end of workaround
170 | done
171 | printf '%s' "$(
172 | cd "$basedir" || exit 1
173 | pwd
174 | )"
175 | }
176 |
177 | # concatenates all lines of a file
178 | concat_lines() {
179 | if [ -f "$1" ]; then
180 | # Remove \r in case we run on Windows within Git Bash
181 | # and check out the repository with auto CRLF management
182 | # enabled. Otherwise, we may read lines that are delimited with
183 | # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
184 | # splitting rules.
185 | tr -s '\r\n' ' ' <"$1"
186 | fi
187 | }
188 |
189 | log() {
190 | if [ "$MVNW_VERBOSE" = true ]; then
191 | printf '%s\n' "$1"
192 | fi
193 | }
194 |
195 | BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
196 | if [ -z "$BASE_DIR" ]; then
197 | exit 1
198 | fi
199 |
200 | MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
201 | export MAVEN_PROJECTBASEDIR
202 | log "$MAVEN_PROJECTBASEDIR"
203 |
204 | ##########################################################################################
205 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
206 | # This allows using the maven wrapper in projects that prohibit checking in binary data.
207 | ##########################################################################################
208 | wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
209 | if [ -r "$wrapperJarPath" ]; then
210 | log "Found $wrapperJarPath"
211 | else
212 | log "Couldn't find $wrapperJarPath, downloading it ..."
213 |
214 | if [ -n "$MVNW_REPOURL" ]; then
215 | wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
216 | else
217 | wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.0/maven-wrapper-3.3.0.jar"
218 | fi
219 | while IFS="=" read -r key value; do
220 | # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
221 | safeValue=$(echo "$value" | tr -d '\r')
222 | case "$key" in wrapperUrl)
223 | wrapperUrl="$safeValue"
224 | break
225 | ;;
226 | esac
227 | done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
228 | log "Downloading from: $wrapperUrl"
229 |
230 | if $cygwin; then
231 | wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
232 | fi
233 |
234 | if command -v wget >/dev/null; then
235 | log "Found wget ... using wget"
236 | [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
237 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
238 | wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
239 | else
240 | wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241 | fi
242 | elif command -v curl >/dev/null; then
243 | log "Found curl ... using curl"
244 | [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
245 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
246 | curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
247 | else
248 | curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
249 | fi
250 | else
251 | log "Falling back to using Java to download"
252 | javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
253 | javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
254 | # For Cygwin, switch paths to Windows format before running javac
255 | if $cygwin; then
256 | javaSource=$(cygpath --path --windows "$javaSource")
257 | javaClass=$(cygpath --path --windows "$javaClass")
258 | fi
259 | if [ -e "$javaSource" ]; then
260 | if [ ! -e "$javaClass" ]; then
261 | log " - Compiling MavenWrapperDownloader.java ..."
262 | ("$JAVA_HOME/bin/javac" "$javaSource")
263 | fi
264 | if [ -e "$javaClass" ]; then
265 | log " - Running MavenWrapperDownloader.java ..."
266 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
267 | fi
268 | fi
269 | fi
270 | fi
271 | ##########################################################################################
272 | # End of extension
273 | ##########################################################################################
274 |
275 | # If specified, validate the SHA-256 sum of the Maven wrapper jar file
276 | wrapperSha256Sum=""
277 | while IFS="=" read -r key value; do
278 | case "$key" in wrapperSha256Sum)
279 | wrapperSha256Sum=$value
280 | break
281 | ;;
282 | esac
283 | done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
284 | if [ -n "$wrapperSha256Sum" ]; then
285 | wrapperSha256Result=false
286 | if command -v sha256sum >/dev/null; then
287 | if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c >/dev/null 2>&1; then
288 | wrapperSha256Result=true
289 | fi
290 | elif command -v shasum >/dev/null; then
291 | if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c >/dev/null 2>&1; then
292 | wrapperSha256Result=true
293 | fi
294 | else
295 | echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
296 | echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." >&2
297 | exit 1
298 | fi
299 | if [ $wrapperSha256Result = false ]; then
300 | echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
301 | echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
302 | echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
303 | exit 1
304 | fi
305 | fi
306 |
307 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
308 |
309 | # For Cygwin, switch paths to Windows format before running java
310 | if $cygwin; then
311 | [ -n "$JAVA_HOME" ] \
312 | && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
313 | [ -n "$CLASSPATH" ] \
314 | && CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
315 | [ -n "$MAVEN_PROJECTBASEDIR" ] \
316 | && MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
317 | fi
318 |
319 | # Provide a "standardized" way to retrieve the CLI args that will
320 | # work with both Windows and non-Windows executions.
321 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
322 | export MAVEN_CMD_LINE_ARGS
323 |
324 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
325 |
326 | # shellcheck disable=SC2086 # safe args
327 | exec "$JAVACMD" \
328 | $MAVEN_OPTS \
329 | $MAVEN_DEBUG_OPTS \
330 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
331 | "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
332 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
333 |
--------------------------------------------------------------------------------
/nodejs/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sample",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "sample",
9 | "version": "0.0.0",
10 | "license": "Apache-2.0",
11 | "dependencies": {
12 | "express": "^4.19.2"
13 | }
14 | },
15 | "node_modules/accepts": {
16 | "version": "1.3.8",
17 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
18 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
19 | "license": "MIT",
20 | "dependencies": {
21 | "mime-types": "~2.1.34",
22 | "negotiator": "0.6.3"
23 | },
24 | "engines": {
25 | "node": ">= 0.6"
26 | }
27 | },
28 | "node_modules/array-flatten": {
29 | "version": "1.1.1",
30 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
31 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
32 | "license": "MIT"
33 | },
34 | "node_modules/body-parser": {
35 | "version": "1.20.3",
36 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
37 | "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
38 | "license": "MIT",
39 | "dependencies": {
40 | "bytes": "3.1.2",
41 | "content-type": "~1.0.5",
42 | "debug": "2.6.9",
43 | "depd": "2.0.0",
44 | "destroy": "1.2.0",
45 | "http-errors": "2.0.0",
46 | "iconv-lite": "0.4.24",
47 | "on-finished": "2.4.1",
48 | "qs": "6.13.0",
49 | "raw-body": "2.5.2",
50 | "type-is": "~1.6.18",
51 | "unpipe": "1.0.0"
52 | },
53 | "engines": {
54 | "node": ">= 0.8",
55 | "npm": "1.2.8000 || >= 1.4.16"
56 | }
57 | },
58 | "node_modules/bytes": {
59 | "version": "3.1.2",
60 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
61 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
62 | "license": "MIT",
63 | "engines": {
64 | "node": ">= 0.8"
65 | }
66 | },
67 | "node_modules/call-bind-apply-helpers": {
68 | "version": "1.0.2",
69 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
70 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
71 | "license": "MIT",
72 | "dependencies": {
73 | "es-errors": "^1.3.0",
74 | "function-bind": "^1.1.2"
75 | },
76 | "engines": {
77 | "node": ">= 0.4"
78 | }
79 | },
80 | "node_modules/call-bound": {
81 | "version": "1.0.4",
82 | "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
83 | "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
84 | "license": "MIT",
85 | "dependencies": {
86 | "call-bind-apply-helpers": "^1.0.2",
87 | "get-intrinsic": "^1.3.0"
88 | },
89 | "engines": {
90 | "node": ">= 0.4"
91 | },
92 | "funding": {
93 | "url": "https://github.com/sponsors/ljharb"
94 | }
95 | },
96 | "node_modules/content-disposition": {
97 | "version": "0.5.4",
98 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
99 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
100 | "license": "MIT",
101 | "dependencies": {
102 | "safe-buffer": "5.2.1"
103 | },
104 | "engines": {
105 | "node": ">= 0.6"
106 | }
107 | },
108 | "node_modules/content-type": {
109 | "version": "1.0.5",
110 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
111 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
112 | "license": "MIT",
113 | "engines": {
114 | "node": ">= 0.6"
115 | }
116 | },
117 | "node_modules/cookie": {
118 | "version": "0.7.1",
119 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
120 | "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
121 | "license": "MIT",
122 | "engines": {
123 | "node": ">= 0.6"
124 | }
125 | },
126 | "node_modules/cookie-signature": {
127 | "version": "1.0.6",
128 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
129 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
130 | "license": "MIT"
131 | },
132 | "node_modules/debug": {
133 | "version": "2.6.9",
134 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
135 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
136 | "license": "MIT",
137 | "dependencies": {
138 | "ms": "2.0.0"
139 | }
140 | },
141 | "node_modules/depd": {
142 | "version": "2.0.0",
143 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
144 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
145 | "license": "MIT",
146 | "engines": {
147 | "node": ">= 0.8"
148 | }
149 | },
150 | "node_modules/destroy": {
151 | "version": "1.2.0",
152 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
153 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
154 | "license": "MIT",
155 | "engines": {
156 | "node": ">= 0.8",
157 | "npm": "1.2.8000 || >= 1.4.16"
158 | }
159 | },
160 | "node_modules/dunder-proto": {
161 | "version": "1.0.1",
162 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
163 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
164 | "license": "MIT",
165 | "dependencies": {
166 | "call-bind-apply-helpers": "^1.0.1",
167 | "es-errors": "^1.3.0",
168 | "gopd": "^1.2.0"
169 | },
170 | "engines": {
171 | "node": ">= 0.4"
172 | }
173 | },
174 | "node_modules/ee-first": {
175 | "version": "1.1.1",
176 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
177 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
178 | "license": "MIT"
179 | },
180 | "node_modules/encodeurl": {
181 | "version": "2.0.0",
182 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
183 | "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
184 | "license": "MIT",
185 | "engines": {
186 | "node": ">= 0.8"
187 | }
188 | },
189 | "node_modules/es-define-property": {
190 | "version": "1.0.1",
191 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
192 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
193 | "license": "MIT",
194 | "engines": {
195 | "node": ">= 0.4"
196 | }
197 | },
198 | "node_modules/es-errors": {
199 | "version": "1.3.0",
200 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
201 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
202 | "license": "MIT",
203 | "engines": {
204 | "node": ">= 0.4"
205 | }
206 | },
207 | "node_modules/es-object-atoms": {
208 | "version": "1.1.1",
209 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
210 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
211 | "license": "MIT",
212 | "dependencies": {
213 | "es-errors": "^1.3.0"
214 | },
215 | "engines": {
216 | "node": ">= 0.4"
217 | }
218 | },
219 | "node_modules/escape-html": {
220 | "version": "1.0.3",
221 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
222 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
223 | "license": "MIT"
224 | },
225 | "node_modules/etag": {
226 | "version": "1.8.1",
227 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
228 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
229 | "license": "MIT",
230 | "engines": {
231 | "node": ">= 0.6"
232 | }
233 | },
234 | "node_modules/express": {
235 | "version": "4.21.2",
236 | "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
237 | "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
238 | "license": "MIT",
239 | "dependencies": {
240 | "accepts": "~1.3.8",
241 | "array-flatten": "1.1.1",
242 | "body-parser": "1.20.3",
243 | "content-disposition": "0.5.4",
244 | "content-type": "~1.0.4",
245 | "cookie": "0.7.1",
246 | "cookie-signature": "1.0.6",
247 | "debug": "2.6.9",
248 | "depd": "2.0.0",
249 | "encodeurl": "~2.0.0",
250 | "escape-html": "~1.0.3",
251 | "etag": "~1.8.1",
252 | "finalhandler": "1.3.1",
253 | "fresh": "0.5.2",
254 | "http-errors": "2.0.0",
255 | "merge-descriptors": "1.0.3",
256 | "methods": "~1.1.2",
257 | "on-finished": "2.4.1",
258 | "parseurl": "~1.3.3",
259 | "path-to-regexp": "0.1.12",
260 | "proxy-addr": "~2.0.7",
261 | "qs": "6.13.0",
262 | "range-parser": "~1.2.1",
263 | "safe-buffer": "5.2.1",
264 | "send": "0.19.0",
265 | "serve-static": "1.16.2",
266 | "setprototypeof": "1.2.0",
267 | "statuses": "2.0.1",
268 | "type-is": "~1.6.18",
269 | "utils-merge": "1.0.1",
270 | "vary": "~1.1.2"
271 | },
272 | "engines": {
273 | "node": ">= 0.10.0"
274 | },
275 | "funding": {
276 | "type": "opencollective",
277 | "url": "https://opencollective.com/express"
278 | }
279 | },
280 | "node_modules/finalhandler": {
281 | "version": "1.3.1",
282 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
283 | "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
284 | "license": "MIT",
285 | "dependencies": {
286 | "debug": "2.6.9",
287 | "encodeurl": "~2.0.0",
288 | "escape-html": "~1.0.3",
289 | "on-finished": "2.4.1",
290 | "parseurl": "~1.3.3",
291 | "statuses": "2.0.1",
292 | "unpipe": "~1.0.0"
293 | },
294 | "engines": {
295 | "node": ">= 0.8"
296 | }
297 | },
298 | "node_modules/forwarded": {
299 | "version": "0.2.0",
300 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
301 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
302 | "license": "MIT",
303 | "engines": {
304 | "node": ">= 0.6"
305 | }
306 | },
307 | "node_modules/fresh": {
308 | "version": "0.5.2",
309 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
310 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
311 | "license": "MIT",
312 | "engines": {
313 | "node": ">= 0.6"
314 | }
315 | },
316 | "node_modules/function-bind": {
317 | "version": "1.1.2",
318 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
319 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
320 | "license": "MIT",
321 | "funding": {
322 | "url": "https://github.com/sponsors/ljharb"
323 | }
324 | },
325 | "node_modules/get-intrinsic": {
326 | "version": "1.3.0",
327 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
328 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
329 | "license": "MIT",
330 | "dependencies": {
331 | "call-bind-apply-helpers": "^1.0.2",
332 | "es-define-property": "^1.0.1",
333 | "es-errors": "^1.3.0",
334 | "es-object-atoms": "^1.1.1",
335 | "function-bind": "^1.1.2",
336 | "get-proto": "^1.0.1",
337 | "gopd": "^1.2.0",
338 | "has-symbols": "^1.1.0",
339 | "hasown": "^2.0.2",
340 | "math-intrinsics": "^1.1.0"
341 | },
342 | "engines": {
343 | "node": ">= 0.4"
344 | },
345 | "funding": {
346 | "url": "https://github.com/sponsors/ljharb"
347 | }
348 | },
349 | "node_modules/get-proto": {
350 | "version": "1.0.1",
351 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
352 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
353 | "license": "MIT",
354 | "dependencies": {
355 | "dunder-proto": "^1.0.1",
356 | "es-object-atoms": "^1.0.0"
357 | },
358 | "engines": {
359 | "node": ">= 0.4"
360 | }
361 | },
362 | "node_modules/gopd": {
363 | "version": "1.2.0",
364 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
365 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
366 | "license": "MIT",
367 | "engines": {
368 | "node": ">= 0.4"
369 | },
370 | "funding": {
371 | "url": "https://github.com/sponsors/ljharb"
372 | }
373 | },
374 | "node_modules/has-symbols": {
375 | "version": "1.1.0",
376 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
377 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
378 | "license": "MIT",
379 | "engines": {
380 | "node": ">= 0.4"
381 | },
382 | "funding": {
383 | "url": "https://github.com/sponsors/ljharb"
384 | }
385 | },
386 | "node_modules/hasown": {
387 | "version": "2.0.2",
388 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
389 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
390 | "license": "MIT",
391 | "dependencies": {
392 | "function-bind": "^1.1.2"
393 | },
394 | "engines": {
395 | "node": ">= 0.4"
396 | }
397 | },
398 | "node_modules/http-errors": {
399 | "version": "2.0.0",
400 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
401 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
402 | "license": "MIT",
403 | "dependencies": {
404 | "depd": "2.0.0",
405 | "inherits": "2.0.4",
406 | "setprototypeof": "1.2.0",
407 | "statuses": "2.0.1",
408 | "toidentifier": "1.0.1"
409 | },
410 | "engines": {
411 | "node": ">= 0.8"
412 | }
413 | },
414 | "node_modules/iconv-lite": {
415 | "version": "0.4.24",
416 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
417 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
418 | "license": "MIT",
419 | "dependencies": {
420 | "safer-buffer": ">= 2.1.2 < 3"
421 | },
422 | "engines": {
423 | "node": ">=0.10.0"
424 | }
425 | },
426 | "node_modules/inherits": {
427 | "version": "2.0.4",
428 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
429 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
430 | "license": "ISC"
431 | },
432 | "node_modules/ipaddr.js": {
433 | "version": "1.9.1",
434 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
435 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
436 | "license": "MIT",
437 | "engines": {
438 | "node": ">= 0.10"
439 | }
440 | },
441 | "node_modules/math-intrinsics": {
442 | "version": "1.1.0",
443 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
444 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
445 | "license": "MIT",
446 | "engines": {
447 | "node": ">= 0.4"
448 | }
449 | },
450 | "node_modules/media-typer": {
451 | "version": "0.3.0",
452 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
453 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
454 | "license": "MIT",
455 | "engines": {
456 | "node": ">= 0.6"
457 | }
458 | },
459 | "node_modules/merge-descriptors": {
460 | "version": "1.0.3",
461 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
462 | "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
463 | "license": "MIT",
464 | "funding": {
465 | "url": "https://github.com/sponsors/sindresorhus"
466 | }
467 | },
468 | "node_modules/methods": {
469 | "version": "1.1.2",
470 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
471 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
472 | "license": "MIT",
473 | "engines": {
474 | "node": ">= 0.6"
475 | }
476 | },
477 | "node_modules/mime": {
478 | "version": "1.6.0",
479 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
480 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
481 | "license": "MIT",
482 | "bin": {
483 | "mime": "cli.js"
484 | },
485 | "engines": {
486 | "node": ">=4"
487 | }
488 | },
489 | "node_modules/mime-db": {
490 | "version": "1.52.0",
491 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
492 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
493 | "license": "MIT",
494 | "engines": {
495 | "node": ">= 0.6"
496 | }
497 | },
498 | "node_modules/mime-types": {
499 | "version": "2.1.35",
500 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
501 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
502 | "license": "MIT",
503 | "dependencies": {
504 | "mime-db": "1.52.0"
505 | },
506 | "engines": {
507 | "node": ">= 0.6"
508 | }
509 | },
510 | "node_modules/ms": {
511 | "version": "2.0.0",
512 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
513 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
514 | "license": "MIT"
515 | },
516 | "node_modules/negotiator": {
517 | "version": "0.6.3",
518 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
519 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
520 | "license": "MIT",
521 | "engines": {
522 | "node": ">= 0.6"
523 | }
524 | },
525 | "node_modules/object-inspect": {
526 | "version": "1.13.4",
527 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
528 | "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
529 | "license": "MIT",
530 | "engines": {
531 | "node": ">= 0.4"
532 | },
533 | "funding": {
534 | "url": "https://github.com/sponsors/ljharb"
535 | }
536 | },
537 | "node_modules/on-finished": {
538 | "version": "2.4.1",
539 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
540 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
541 | "license": "MIT",
542 | "dependencies": {
543 | "ee-first": "1.1.1"
544 | },
545 | "engines": {
546 | "node": ">= 0.8"
547 | }
548 | },
549 | "node_modules/parseurl": {
550 | "version": "1.3.3",
551 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
552 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
553 | "license": "MIT",
554 | "engines": {
555 | "node": ">= 0.8"
556 | }
557 | },
558 | "node_modules/path-to-regexp": {
559 | "version": "0.1.12",
560 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
561 | "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
562 | "license": "MIT"
563 | },
564 | "node_modules/proxy-addr": {
565 | "version": "2.0.7",
566 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
567 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
568 | "license": "MIT",
569 | "dependencies": {
570 | "forwarded": "0.2.0",
571 | "ipaddr.js": "1.9.1"
572 | },
573 | "engines": {
574 | "node": ">= 0.10"
575 | }
576 | },
577 | "node_modules/qs": {
578 | "version": "6.13.0",
579 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
580 | "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
581 | "license": "BSD-3-Clause",
582 | "dependencies": {
583 | "side-channel": "^1.0.6"
584 | },
585 | "engines": {
586 | "node": ">=0.6"
587 | },
588 | "funding": {
589 | "url": "https://github.com/sponsors/ljharb"
590 | }
591 | },
592 | "node_modules/range-parser": {
593 | "version": "1.2.1",
594 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
595 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
596 | "license": "MIT",
597 | "engines": {
598 | "node": ">= 0.6"
599 | }
600 | },
601 | "node_modules/raw-body": {
602 | "version": "2.5.2",
603 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
604 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
605 | "license": "MIT",
606 | "dependencies": {
607 | "bytes": "3.1.2",
608 | "http-errors": "2.0.0",
609 | "iconv-lite": "0.4.24",
610 | "unpipe": "1.0.0"
611 | },
612 | "engines": {
613 | "node": ">= 0.8"
614 | }
615 | },
616 | "node_modules/safe-buffer": {
617 | "version": "5.2.1",
618 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
619 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
620 | "funding": [
621 | {
622 | "type": "github",
623 | "url": "https://github.com/sponsors/feross"
624 | },
625 | {
626 | "type": "patreon",
627 | "url": "https://www.patreon.com/feross"
628 | },
629 | {
630 | "type": "consulting",
631 | "url": "https://feross.org/support"
632 | }
633 | ],
634 | "license": "MIT"
635 | },
636 | "node_modules/safer-buffer": {
637 | "version": "2.1.2",
638 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
639 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
640 | "license": "MIT"
641 | },
642 | "node_modules/send": {
643 | "version": "0.19.0",
644 | "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
645 | "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
646 | "license": "MIT",
647 | "dependencies": {
648 | "debug": "2.6.9",
649 | "depd": "2.0.0",
650 | "destroy": "1.2.0",
651 | "encodeurl": "~1.0.2",
652 | "escape-html": "~1.0.3",
653 | "etag": "~1.8.1",
654 | "fresh": "0.5.2",
655 | "http-errors": "2.0.0",
656 | "mime": "1.6.0",
657 | "ms": "2.1.3",
658 | "on-finished": "2.4.1",
659 | "range-parser": "~1.2.1",
660 | "statuses": "2.0.1"
661 | },
662 | "engines": {
663 | "node": ">= 0.8.0"
664 | }
665 | },
666 | "node_modules/send/node_modules/encodeurl": {
667 | "version": "1.0.2",
668 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
669 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
670 | "license": "MIT",
671 | "engines": {
672 | "node": ">= 0.8"
673 | }
674 | },
675 | "node_modules/send/node_modules/ms": {
676 | "version": "2.1.3",
677 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
678 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
679 | "license": "MIT"
680 | },
681 | "node_modules/serve-static": {
682 | "version": "1.16.2",
683 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
684 | "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
685 | "license": "MIT",
686 | "dependencies": {
687 | "encodeurl": "~2.0.0",
688 | "escape-html": "~1.0.3",
689 | "parseurl": "~1.3.3",
690 | "send": "0.19.0"
691 | },
692 | "engines": {
693 | "node": ">= 0.8.0"
694 | }
695 | },
696 | "node_modules/setprototypeof": {
697 | "version": "1.2.0",
698 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
699 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
700 | "license": "ISC"
701 | },
702 | "node_modules/side-channel": {
703 | "version": "1.1.0",
704 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
705 | "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
706 | "license": "MIT",
707 | "dependencies": {
708 | "es-errors": "^1.3.0",
709 | "object-inspect": "^1.13.3",
710 | "side-channel-list": "^1.0.0",
711 | "side-channel-map": "^1.0.1",
712 | "side-channel-weakmap": "^1.0.2"
713 | },
714 | "engines": {
715 | "node": ">= 0.4"
716 | },
717 | "funding": {
718 | "url": "https://github.com/sponsors/ljharb"
719 | }
720 | },
721 | "node_modules/side-channel-list": {
722 | "version": "1.0.0",
723 | "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
724 | "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
725 | "license": "MIT",
726 | "dependencies": {
727 | "es-errors": "^1.3.0",
728 | "object-inspect": "^1.13.3"
729 | },
730 | "engines": {
731 | "node": ">= 0.4"
732 | },
733 | "funding": {
734 | "url": "https://github.com/sponsors/ljharb"
735 | }
736 | },
737 | "node_modules/side-channel-map": {
738 | "version": "1.0.1",
739 | "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
740 | "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
741 | "license": "MIT",
742 | "dependencies": {
743 | "call-bound": "^1.0.2",
744 | "es-errors": "^1.3.0",
745 | "get-intrinsic": "^1.2.5",
746 | "object-inspect": "^1.13.3"
747 | },
748 | "engines": {
749 | "node": ">= 0.4"
750 | },
751 | "funding": {
752 | "url": "https://github.com/sponsors/ljharb"
753 | }
754 | },
755 | "node_modules/side-channel-weakmap": {
756 | "version": "1.0.2",
757 | "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
758 | "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
759 | "license": "MIT",
760 | "dependencies": {
761 | "call-bound": "^1.0.2",
762 | "es-errors": "^1.3.0",
763 | "get-intrinsic": "^1.2.5",
764 | "object-inspect": "^1.13.3",
765 | "side-channel-map": "^1.0.1"
766 | },
767 | "engines": {
768 | "node": ">= 0.4"
769 | },
770 | "funding": {
771 | "url": "https://github.com/sponsors/ljharb"
772 | }
773 | },
774 | "node_modules/statuses": {
775 | "version": "2.0.1",
776 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
777 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
778 | "license": "MIT",
779 | "engines": {
780 | "node": ">= 0.8"
781 | }
782 | },
783 | "node_modules/toidentifier": {
784 | "version": "1.0.1",
785 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
786 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
787 | "license": "MIT",
788 | "engines": {
789 | "node": ">=0.6"
790 | }
791 | },
792 | "node_modules/type-is": {
793 | "version": "1.6.18",
794 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
795 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
796 | "license": "MIT",
797 | "dependencies": {
798 | "media-typer": "0.3.0",
799 | "mime-types": "~2.1.24"
800 | },
801 | "engines": {
802 | "node": ">= 0.6"
803 | }
804 | },
805 | "node_modules/unpipe": {
806 | "version": "1.0.0",
807 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
808 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
809 | "license": "MIT",
810 | "engines": {
811 | "node": ">= 0.8"
812 | }
813 | },
814 | "node_modules/utils-merge": {
815 | "version": "1.0.1",
816 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
817 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
818 | "license": "MIT",
819 | "engines": {
820 | "node": ">= 0.4.0"
821 | }
822 | },
823 | "node_modules/vary": {
824 | "version": "1.1.2",
825 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
826 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
827 | "license": "MIT",
828 | "engines": {
829 | "node": ">= 0.8"
830 | }
831 | }
832 | }
833 | }
834 |
--------------------------------------------------------------------------------