forked from Azure/azure-sdk-for-net
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial KeyVaultProxy solution (Azure#15123)
* Initial KeyVaultProxy solution Ported with permission from @heaths from https://github.com/heaths/KeyVaultProxy. Builds both within and without the Azure/azure-sdk-for-net repo. * Upload sample from src only
- Loading branch information
Showing
32 changed files
with
1,968 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
sdk/keyvault/samples/keyvaultproxy/.devcontainer/Dockerfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# Update the VARIANT arg in devcontainer.json to pick a .NET Core version: 3.1-bionic, 2.1-bionic | ||
ARG VARIANT="3.1-bionic" | ||
FROM mcr.microsoft.com/dotnet/core/sdk:${VARIANT} | ||
|
||
# Options for setup script | ||
ARG INSTALL_ZSH="false" | ||
ARG UPGRADE_PACKAGES="false" | ||
ARG USERNAME=vscode | ||
ARG USER_UID=1000 | ||
ARG USER_GID=$USER_UID | ||
|
||
# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies. | ||
COPY library-scripts/common-debian.sh /tmp/library-scripts/ | ||
RUN apt-get update \ | ||
&& /bin/bash /tmp/library-scripts/common-debian.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "${UPGRADE_PACKAGES}" \ | ||
&& apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/library-scripts | ||
|
||
# [Optional] Install Node.js for use with web applications - update the INSTALL_NODE arg in devcontainer.json to enable. | ||
ARG INSTALL_NODE="false" | ||
ARG NODE_VERSION="lts/*" | ||
ENV NVM_DIR=/usr/local/share/nvm | ||
ENV NVM_SYMLINK_CURRENT=true \ | ||
PATH=${NVM_DIR}/current/bin:${PATH} | ||
COPY library-scripts/node-debian.sh /tmp/library-scripts/ | ||
RUN if [ "$INSTALL_NODE" = "true" ]; then /bin/bash /tmp/library-scripts/node-debian.sh "${NVM_DIR}" "${NODE_VERSION}" "${USERNAME}"; fi \ | ||
&& rm -rf /var/lib/apt/lists/* /tmp/library-scripts | ||
|
||
# [Optional] Install the Azure CLI - update the INSTALL_AZURE_CLI arg in devcontainer.json to enable. | ||
ARG INSTALL_AZURE_CLI="false" | ||
RUN if [ "$INSTALL_AZURE_CLI" = "true" ]; then \ | ||
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/azure-cli.list \ | ||
&& curl -sL https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 2>/dev/null \ | ||
&& apt-get update \ | ||
&& apt-get install -y azure-cli \ | ||
&& rm -rf /var/lib/apt/lists/*; \ | ||
fi | ||
|
||
# Install .NET 2.1 runtime and clean up | ||
RUN export DEBIAN_FRONTEND=noninteractive \ | ||
&& wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O /tmp/packages-microsoft-prod.deb \ | ||
&& dpkg -i /tmp/packages-microsoft-prod.deb \ | ||
&& rm -f /tmp/packages-microsoft-prod.deb \ | ||
&& apt-get update \ | ||
&& apt-get install -y apt-transport-https \ | ||
&& apt-get update \ | ||
&& apt-get install -y dotnet-runtime-2.1 \ | ||
&& apt-get autoremove -y \ | ||
&& apt-get clean -y \ | ||
&& rm -rf /var/lib/apt/lists/* |
16 changes: 16 additions & 0 deletions
16
sdk/keyvault/samples/keyvaultproxy/.devcontainer/devcontainer.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
"name": "Azure SDK Samples for .NET", | ||
"build": { | ||
"dockerfile": "Dockerfile", | ||
"args": { | ||
"VARIANT": "3.1-bionic" | ||
} | ||
}, | ||
"settings": { | ||
"terminal.integrated.shell.linux": "/bin/bash" | ||
}, | ||
"extensions": [ | ||
"editorconfig.editorconfig", | ||
"ms-dotnettools.csharp" | ||
] | ||
} |
171 changes: 171 additions & 0 deletions
171
sdk/keyvault/samples/keyvaultproxy/.devcontainer/library-scripts/common-debian.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,171 @@ | ||
#!/usr/bin/env bash | ||
#------------------------------------------------------------------------------------------------------------- | ||
# Copyright (c) Microsoft Corporation. All rights reserved. | ||
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. | ||
#------------------------------------------------------------------------------------------------------------- | ||
|
||
# Syntax: ./common-debian.sh [install zsh flag] [username] [user UID] [user GID] [upgrade packages flag] | ||
|
||
INSTALL_ZSH=${1:-"true"} | ||
USERNAME=${2:-"vscode"} | ||
USER_UID=${3:-1000} | ||
USER_GID=${4:-1000} | ||
UPGRADE_PACKAGES=${5:-"true"} | ||
|
||
set -e | ||
|
||
if [ "$(id -u)" -ne 0 ]; then | ||
echo -e 'Script must be run a root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' | ||
exit 1 | ||
fi | ||
|
||
# Treat a user name of "none" as root | ||
if [ "${USERNAME}" = "none" ] || [ "${USERNAME}" = "root" ]; then | ||
USERNAME=root | ||
USER_UID=0 | ||
USER_GID=0 | ||
fi | ||
|
||
# Load markers to see which steps have already run | ||
MARKER_FILE="/usr/local/etc/vscode-dev-containers/common" | ||
if [ -f "${MARKER_FILE}" ]; then | ||
echo "Marker file found:" | ||
cat "${MARKER_FILE}" | ||
source "${MARKER_FILE}" | ||
fi | ||
|
||
# Ensure apt is in non-interactive to avoid prompts | ||
export DEBIAN_FRONTEND=noninteractive | ||
|
||
# Function to call apt-get if needed | ||
apt-get-update-if-needed() | ||
{ | ||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then | ||
echo "Running apt-get update..." | ||
apt-get update | ||
else | ||
echo "Skipping apt-get update." | ||
fi | ||
} | ||
|
||
# Run install apt-utils to avoid debconf warning then verify presence of other common developer tools and dependencies | ||
if [ "${PACKAGES_ALREADY_INSTALLED}" != "true" ]; then | ||
apt-get-update-if-needed | ||
|
||
PACKAGE_LIST="apt-utils \ | ||
git \ | ||
openssh-client \ | ||
less \ | ||
iproute2 \ | ||
procps \ | ||
curl \ | ||
wget \ | ||
unzip \ | ||
nano \ | ||
jq \ | ||
lsb-release \ | ||
ca-certificates \ | ||
apt-transport-https \ | ||
dialog \ | ||
gnupg2 \ | ||
libc6 \ | ||
libgcc1 \ | ||
libgssapi-krb5-2 \ | ||
libicu[0-9][0-9] \ | ||
liblttng-ust0 \ | ||
libstdc++6 \ | ||
zlib1g \ | ||
locales \ | ||
sudo" | ||
|
||
# Install libssl1.1 if available | ||
if [[ ! -z $(apt-cache --names-only search ^libssl1.1$) ]]; then | ||
PACKAGE_LIST="${PACKAGE_LIST} libssl1.1" | ||
fi | ||
|
||
# Install appropriate version of libssl1.0.x if available | ||
LIBSSL=$(dpkg-query -f '${db:Status-Abbrev}\t${binary:Package}\n' -W 'libssl1\.0\.?' 2>&1 || echo '') | ||
if [ "$(echo "$LIBSSL" | grep -o 'libssl1\.0\.[0-9]:' | uniq | sort | wc -l)" -eq 0 ]; then | ||
if [[ ! -z $(apt-cache --names-only search ^libssl1.0.2$) ]]; then | ||
# Debian 9 | ||
PACKAGE_LIST="${PACKAGE_LIST} libssl1.0.2" | ||
elif [[ ! -z $(apt-cache --names-only search ^libssl1.0.0$) ]]; then | ||
# Ubuntu 18.04, 16.04, earlier | ||
PACKAGE_LIST="${PACKAGE_LIST} libssl1.0.0" | ||
fi | ||
fi | ||
|
||
echo "Packages to verify are installed: ${PACKAGE_LIST}" | ||
apt-get -y install --no-install-recommends ${PACKAGE_LIST} 2> >( grep -v 'debconf: delaying package configuration, since apt-utils is not installed' >&2 ) | ||
|
||
PACKAGES_ALREADY_INSTALLED="true" | ||
fi | ||
|
||
# Get to latest versions of all packages | ||
if [ "${UPGRADE_PACKAGES}" = "true" ]; then | ||
apt-get-update-if-needed | ||
apt-get -y upgrade --no-install-recommends | ||
apt-get autoremove -y | ||
fi | ||
|
||
# Ensure at least the en_US.UTF-8 UTF-8 locale is available. | ||
# Common need for both applications and things like the agnoster ZSH theme. | ||
if [ "${LOCALE_ALREADY_SET}" != "true" ]; then | ||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen | ||
locale-gen | ||
LOCALE_ALREADY_SET="true" | ||
fi | ||
|
||
# Create or update a non-root user to match UID/GID - see https://aka.ms/vscode-remote/containers/non-root-user. | ||
if id -u $USERNAME > /dev/null 2>&1; then | ||
# User exists, update if needed | ||
if [ "$USER_GID" != "$(id -G $USERNAME)" ]; then | ||
groupmod --gid $USER_GID $USERNAME | ||
usermod --gid $USER_GID $USERNAME | ||
fi | ||
if [ "$USER_UID" != "$(id -u $USERNAME)" ]; then | ||
usermod --uid $USER_UID $USERNAME | ||
fi | ||
else | ||
# Create user | ||
groupadd --gid $USER_GID $USERNAME | ||
useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME | ||
fi | ||
|
||
# Add add sudo support for non-root user | ||
if [ "${EXISTING_NON_ROOT_USER}" != "${USERNAME}" ]; then | ||
echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME | ||
chmod 0440 /etc/sudoers.d/$USERNAME | ||
EXISTING_NON_ROOT_USER="${USERNAME}" | ||
fi | ||
|
||
# Ensure ~/.local/bin is in the PATH for root and non-root users for bash. (zsh is later) | ||
if [ "${DOT_LOCAL_ALREADY_ADDED}" != "true" ]; then | ||
echo "export PATH=\$PATH:\$HOME/.local/bin" | tee -a /root/.bashrc >> /home/$USERNAME/.bashrc | ||
chown $USER_UID:$USER_GID /home/$USERNAME/.bashrc | ||
DOT_LOCAL_ALREADY_ADDED="true" | ||
fi | ||
|
||
# Optionally install and configure zsh | ||
if [ "${INSTALL_ZSH}" = "true" ] && [ ! -d "/root/.oh-my-zsh" ] && [ "${ZSH_ALREADY_INSTALLED}" != "true" ]; then | ||
apt-get-update-if-needed | ||
apt-get install -y zsh | ||
curl -fsSLo- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh | bash 2>&1 | ||
echo "export PATH=\$PATH:\$HOME/.local/bin" >> /root/.zshrc | ||
if [ "${USERNAME}" != "root" ]; then | ||
cp -fR /root/.oh-my-zsh /home/$USERNAME | ||
cp -f /root/.zshrc /home/$USERNAME | ||
sed -i -e "s/\/root\/.oh-my-zsh/\/home\/$USERNAME\/.oh-my-zsh/g" /home/$USERNAME/.zshrc | ||
chown -R $USER_UID:$USER_GID /home/$USERNAME/.oh-my-zsh /home/$USERNAME/.zshrc | ||
fi | ||
ZSH_ALREADY_INSTALLED="true" | ||
fi | ||
|
||
# Write marker file | ||
mkdir -p "$(dirname "${MARKER_FILE}")" | ||
echo -e "\ | ||
PACKAGES_ALREADY_INSTALLED=${PACKAGES_ALREADY_INSTALLED}\n\ | ||
LOCALE_ALREADY_SET=${LOCALE_ALREADY_SET}\n\ | ||
EXISTING_NON_ROOT_USER=${EXISTING_NON_ROOT_USER}\n\ | ||
DOT_LOCAL_ALREADY_ADDED=${DOT_LOCAL_ALREADY_ADDED}\n\ | ||
ZSH_ALREADY_INSTALLED=${ZSH_ALREADY_INSTALLED}" > "${MARKER_FILE}" |
102 changes: 102 additions & 0 deletions
102
sdk/keyvault/samples/keyvaultproxy/.devcontainer/library-scripts/node-debian.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
#!/bin/bash | ||
#------------------------------------------------------------------------------------------------------------- | ||
# Copyright (c) Microsoft Corporation. All rights reserved. | ||
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. | ||
#------------------------------------------------------------------------------------------------------------- | ||
|
||
# Syntax: ./node-debian.sh <directory to install nvm> <node version to install (use "none" to skip)> <non-root user> | ||
|
||
export NVM_DIR=${1:-"/usr/local/share/nvm"} | ||
export NODE_VERSION=${2:-"lts/*"} | ||
USERNAME=${3:-"vscode"} | ||
|
||
set -e | ||
|
||
if [ "$(id -u)" -ne 0 ]; then | ||
echo -e 'Script must be run a root. Use sudo, su, or add "USER root" to\nyour Dockerfile before running this script.' | ||
exit 1 | ||
fi | ||
|
||
# Ensure apt is in non-interactive to avoid prompts | ||
export DEBIAN_FRONTEND=noninteractive | ||
|
||
# Install curl, apt-get dependencies if missing | ||
if ! type curl > /dev/null 2>&1; then | ||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then | ||
apt-get update | ||
fi | ||
apt-get -y install --no-install-recommends apt-transport-https ca-certificates curl gnupg2 | ||
fi | ||
|
||
# Treat a user name of "none" as root | ||
if [ "${USERNAME}" = "none" ]; then | ||
USERNAME=root | ||
fi | ||
|
||
if [ "${NODE_VERSION}" = "none" ]; then | ||
export NODE_VERSION= | ||
fi | ||
|
||
# Install yarn | ||
if type yarn > /dev/null 2>&1; then | ||
echo "Yarn already installed." | ||
else | ||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - 2>/dev/null | ||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list | ||
apt-get update | ||
apt-get -y install --no-install-recommends yarn | ||
fi | ||
|
||
# Install the specified node version if NVM directory already exists, then exit | ||
if [ -d "${NVM_DIR}" ]; then | ||
echo "NVM already installed." | ||
if [ "${NODE_VERSION}" != "" ]; then | ||
suIf "nvm install ${NODE_VERSION}" | ||
fi | ||
exit 0 | ||
fi | ||
|
||
mkdir -p ${NVM_DIR} | ||
|
||
# Set up non-root user if applicable | ||
if [ "${USERNAME}" != "root" ] && id -u $USERNAME > /dev/null 2>&1; then | ||
tee -a /home/${USERNAME}/.bashrc /home/${USERNAME}/.zshrc >> /root/.zshrc \ | ||
<< EOF | ||
EOF | ||
|
||
# Add NVM init and add code to update NVM ownership if UID/GID changes | ||
tee -a /root/.bashrc /root/.zshrc /home/${USERNAME}/.bashrc >> /home/${USERNAME}/.zshrc \ | ||
<<EOF | ||
export NVM_DIR="${NVM_DIR}" | ||
[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh" | ||
[ -s "\$NVM_DIR/bash_completion" ] && . "\$NVM_DIR/bash_completion" | ||
if [ "\$(stat -c '%U' \$NVM_DIR)" != "${USERNAME}" ]; then | ||
sudo chown -R ${USERNAME}:root \$NVM_DIR | ||
fi | ||
EOF | ||
|
||
# Update ownership | ||
chown ${USERNAME} ${NVM_DIR} /home/${USERNAME}/.bashrc /home/${USERNAME}/.zshrc | ||
fi | ||
|
||
# Function to su if user exists and is not root | ||
suIf() { | ||
if [ "${USERNAME}" != "root" ] && id -u ${USERNAME} > /dev/null 2>&1; then | ||
su ${USERNAME} -c "$@" | ||
else | ||
"$@" | ||
fi | ||
|
||
} | ||
|
||
# Run NVM installer as non-root if needed | ||
suIf "$(cat \ | ||
<< EOF | ||
curl -so- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash | ||
if [ "${NODE_VERSION}" != "" ]; then | ||
source $NVM_DIR/nvm.sh | ||
nvm alias default ${NODE_VERSION} | ||
fi | ||
EOF | ||
)" 2>&1 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
root = true | ||
|
||
[*] | ||
indent_size = 4 | ||
indent_style = space | ||
insert_final_newline = true | ||
trim_trailing_whitespace = true | ||
|
||
[*.cs] | ||
# Require explicit types for samples. | ||
csharp_style_var_for_built_in_types = false:error | ||
csharp_style_var_when_type_is_apparent = false:error | ||
csharp_style_var_elsewhere = false:error | ||
|
||
[*.{csproj,props,targets}] | ||
indent_size = 2 | ||
|
||
[*.json] | ||
indent_size = 2 | ||
|
||
[*.sh] | ||
end_of_line = lf | ||
|
||
[*.{yml,yaml}] | ||
indent_size = 2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
bin/ | ||
obj/ | ||
!.vscode/ | ||
!.vscode/launch.json |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"recommendations": [ | ||
"editorconfig.editorconfig", | ||
"ms-dotnettools.csharp" | ||
] | ||
} |
Oops, something went wrong.