2022-08-24 12:01:07 +10:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
set -eu
|
|
|
|
|
|
|
|
source ./utils/common.sh
|
|
|
|
|
|
|
|
WORKDIR=/home/oscarzhou/source/github.com/portainer
|
|
|
|
GLOBAL_VOLUME=/home/oscarzhou/volumes
|
|
|
|
TRUE=0;
|
|
|
|
FALSE=1;
|
|
|
|
REPO_DIR=
|
|
|
|
REPO_VOLUME=
|
|
|
|
|
|
|
|
function debug_portainer_client() {
|
|
|
|
print_highlight "[debug portainer client]"
|
|
|
|
yarn
|
|
|
|
yarn start:client
|
|
|
|
}
|
|
|
|
|
|
|
|
function generate_portainer_jwt_token() {
|
|
|
|
print_highlight "[generate portainer jwt token]"
|
|
|
|
|
|
|
|
read -p "Username(admin):" username
|
|
|
|
if [ -z "$username" ]; then
|
|
|
|
username="admin";
|
|
|
|
fi
|
|
|
|
|
|
|
|
read -p "Password(****):" password
|
|
|
|
read -p "Address(http://127.0.0.1:9000):" address
|
|
|
|
if [ -z "$address" ]; then
|
|
|
|
address="http://127.0.0.1:9000";
|
|
|
|
fi
|
|
|
|
|
|
|
|
payload="{\"username\":\"${username}\",\"password\":\"${password}\"}"
|
|
|
|
curl -d ${payload} -H 'Content-Type: application/json' "${address}/api/auth"
|
|
|
|
}
|
|
|
|
|
|
|
|
function list_portainer_ee_menu() {
|
|
|
|
print_highlight "Your current working directory is ${WORKDIR}/portainer-ee"
|
|
|
|
if ! prompt_continue; then
|
|
|
|
exit;
|
|
|
|
fi
|
|
|
|
|
|
|
|
REPO_DIR=${WORKDIR}/portainer-ee
|
|
|
|
print_highlight "Your current volume is ${VOLUME}/portainer-ee-data"
|
|
|
|
if ! prompt_continue; then
|
|
|
|
exit;
|
|
|
|
fi
|
|
|
|
|
|
|
|
REPO_VOLUME=${VOLUME}/portainer-ee-data
|
|
|
|
|
|
|
|
PS3='Please select the action: '
|
|
|
|
OPTIONS=(
|
|
|
|
'Debug Client'
|
|
|
|
'Lint Client'
|
|
|
|
'Run Unit Test for Client'
|
|
|
|
'Before Commit'
|
|
|
|
'Build Client'
|
|
|
|
'Build Server'
|
|
|
|
'Run Unit Test for Server'
|
|
|
|
'Get Portainer CE API Reference'
|
|
|
|
'Quit'
|
|
|
|
)
|
|
|
|
|
|
|
|
select opt in "${OPTIONS[@]}"
|
|
|
|
do
|
|
|
|
case $opt in
|
|
|
|
'Debug Client')
|
|
|
|
debug_portainer_client
|
|
|
|
;;
|
|
|
|
'PortainerCE')
|
|
|
|
build_portainer_frontend
|
|
|
|
;;
|
|
|
|
'Build Portainer EE/CE Backend')
|
|
|
|
build_portainer_backend
|
|
|
|
;;
|
|
|
|
'Generate Portainer EE/CE JWT')
|
|
|
|
generate_portainer_jwt
|
|
|
|
;;
|
|
|
|
'Run Before Commit [Portainer EE/CE]')
|
|
|
|
run_before_commit
|
|
|
|
;;
|
|
|
|
'Get Portainer CE API Reference')
|
|
|
|
get_portainer_ce_api_reference
|
|
|
|
;;
|
|
|
|
'Quit')
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
function code_security_scan_summary() {
|
|
|
|
echo "
|
|
|
|
1. Scan client with snyk: $(print_highlight "snyk test")
|
|
|
|
2. Scan server with snyk: $(print_highlight "cd api && snyk test")
|
|
|
|
3. If snyk is not authenticated: $(print_highlight "snyk auth")
|
|
|
|
4. Specify the severity threshold: $(print_highlight "snyk test --severity-threshold=<low|medium|high|critical>")
|
|
|
|
5. Other commands with snyk: $(print_highlight "snyk --help")
|
|
|
|
"
|
|
|
|
|
|
|
|
echo "
|
|
|
|
Steps to scan portainer image with Trivy:
|
|
|
|
1. Build the local image: $(print_highlight "docker build -t oscarzhou/portainer:dev-ee -f build/linux/Dockfile .")
|
|
|
|
2. Scan with trivy: $(print_highlight 'docker run --rm -v "/var/run/docker.sock":"/var/run/docker.sock" aquasec/trivy:latest image oscarzhou/portainer:dev-ee')
|
|
|
|
3. Other commands with trivy: $(print_highlight 'docker run --rm -v "/var/run/docker.sock":"/var/run/docker.sock" aquasec/trivy:latest --help')
|
|
|
|
"
|
|
|
|
}
|
|
|
|
|
2022-08-24 13:53:27 +10:00
|
|
|
function look_up_curl_commands() {
|
|
|
|
input "1.POST 2.GET 3.PUT 4.DELETE :" option
|
|
|
|
if [[ "${option}" == "1" ]]; then
|
|
|
|
echo "$(print_highlight "curl -d '{\"repository\":\"https://github.com/portainer/portainer-ee\",\"username\":\"oscarzhou\", \"password\":\"your PAT\"}' -H 'Content-Type: application/json' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGUiOjEsInNjb3BlIjoiZGVmYXVsdCIsImZvcmNlQ2hhbmdlUGFzc3dvcmQiOmZhbHNlLCJleHAiOjE2NjAwMzQ2MjUsImlhdCI6MTY2MDAwNTgyNX0.S0UbPO4POD9kbuWOmvO9WR6LY6v424bpGw46rlEkNs0' http://127.0.0.1:9000/api/gitops/repo/refs")"
|
|
|
|
elif [[ "${option}" == "2" ]]; then
|
|
|
|
echo "$(print_highlight "curl -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGUiOjEsInNjb3BlIjoiZGVmYXVsdCIsImZvcmNlQ2hhbmdlUGFzc3dvcmQiOmZhbHNlLCJleHAiOjE2NTUxMTg2ODUsImlhdCI6MTY1NTA4OTg4NX0.mJSZomeiEpRlz36MxSsLFWpUbA0BHRXWYijsZAo1NWc' http://127.0.0.1:9000/api/users/1/gitcredentials")"
|
|
|
|
elif [[ "${option}" == "3" ]]; then
|
|
|
|
echo "$(print_highlight "curl -X PUT http://127.0.0.1:9000/api/users/1/gitcredentials/11 -d '{"name":"test-credential-11","username":"cred11", "password":"cred11"}' -H 'Content-Type: application/json' -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGUiOjEsInNjb3BlIjoiZGVmYXVsdCIsImZvcmNlQ2hhbmdlUGFzc3dvcmQiOmZhbHNlLCJleHAiOjE2NTcwODQ5MzUsImlhdCI6MTY1NzA1NjEzNX0.kUhkhhSt4WH33Q3hYzLwsYDv1a9a2ygCi6p8MkKMbwc'")"
|
|
|
|
elif [[ "${option}" == "4" ]]; then
|
|
|
|
echo "$(print_highlight "curl -X DELETE http://192.168.1.109:9000/api/users/1/gitcredentials/1 -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGUiOjEsInNjb3BlIjoiZGVmYXVsdCIsImZvcmNlQ2hhbmdlUGFzc3dvcmQiOmZhbHNlLCJleHAiOjE2NTQ3NTc1NzYsImlhdCI6MTY1NDcyODc3Nn0.GlxGmL6XTTH29Ns8aRnX5qp1qBfDVF2zaPzuSmG7qUs'")"
|
|
|
|
else
|
|
|
|
print_error "Invalid option"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2022-08-24 12:01:07 +10:00
|
|
|
|
|
|
|
function menu() {
|
|
|
|
PS3='Please select the action/repository: '
|
|
|
|
OPTIONS=(
|
|
|
|
'PortainerEE'
|
|
|
|
'PortainerCE'
|
|
|
|
'Build Portainer EE/CE Backend'
|
|
|
|
'Generate Portainer JWT Token'
|
|
|
|
'Run Before Commit [Portainer EE/CE]'
|
|
|
|
'Get Portainer CE API Reference'
|
2022-08-24 13:53:27 +10:00
|
|
|
'Look Up Curl Commands'
|
2022-08-24 12:01:07 +10:00
|
|
|
'Code Security Scan'
|
|
|
|
'Cleanup Temporary Volume'
|
|
|
|
'Quit'
|
|
|
|
)
|
|
|
|
|
|
|
|
select opt in "${OPTIONS[@]}"
|
|
|
|
do
|
|
|
|
case $opt in
|
|
|
|
'PortainerEE')
|
|
|
|
list_portainer_ee_menu
|
|
|
|
;;
|
|
|
|
'PortainerCE')
|
|
|
|
build_portainer_frontend
|
|
|
|
;;
|
|
|
|
'Build Portainer EE/CE Backend')
|
|
|
|
build_portainer_backend
|
|
|
|
;;
|
|
|
|
'Generate Portainer JWT Token')
|
|
|
|
generate_portainer_jwt
|
|
|
|
;;
|
|
|
|
'Run Before Commit [Portainer EE/CE]')
|
|
|
|
run_before_commit
|
|
|
|
;;
|
|
|
|
'Get Portainer CE API Reference')
|
|
|
|
get_portainer_ce_api_reference
|
|
|
|
;;
|
2022-08-24 13:53:27 +10:00
|
|
|
'Look Up Curl Commands')
|
|
|
|
look_up_curl_commands
|
2022-08-24 12:01:07 +10:00
|
|
|
;;
|
|
|
|
'Code Security Scan')
|
|
|
|
code_security_scan_summary
|
|
|
|
;;
|
|
|
|
'Cleanup Temporary Volume')
|
|
|
|
cleanup_temporary_volume
|
|
|
|
;;
|
|
|
|
'Quit')
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
# check if the function exists (bash specific)
|
|
|
|
if [ "$#" -eq 0 ]; then
|
|
|
|
menu
|
|
|
|
else
|
|
|
|
"$@"
|
|
|
|
fi
|