generated from gCubeCI/Pipeline-Docker-Template
65 lines
1.9 KiB
Bash
65 lines
1.9 KiB
Bash
#!/usr/bin/with-contenv bash
|
|
|
|
# Functions that decode a JWT token
|
|
_decode_base64_url() {
|
|
local len=$((${#1} % 4))
|
|
local result="$1"
|
|
if [ $len -eq 2 ]; then result="$1"'=='
|
|
elif [ $len -eq 3 ]; then result="$1"'='
|
|
fi
|
|
echo "$result" | tr '_-' '/+' | base64 -d
|
|
}
|
|
|
|
# $1 => JWT to decode
|
|
# $2 => either 1 for header or 2 for body (default is 2)
|
|
decode_jwt() { _decode_base64_url $(echo -n $1 | cut -d "." -f ${2:-2}) | jq .; }
|
|
|
|
_workspace_scope="/d4science.research-infrastructures.eu"
|
|
echo "Manage the user's workspace"
|
|
workspace_dir='/workspace'
|
|
workspace_logdir='/var/log/workspace-lib'
|
|
workspace_libdir='/opt/workspace-lib'
|
|
workspace_fuse_jar="$workspace_libdir/fuse-workspace.jar"
|
|
|
|
[[ ! -d "$workspace_dir" ]] || [[ -z `ls -A "$workspace_dir"` ]] || mv $workspace_dir ${workspace_dir}.old
|
|
|
|
mkdir -p $workspace_dir
|
|
chown ${USER}:${USER} $workspace_dir
|
|
chown -R ${USER}:${USER} $workspace_logdir
|
|
chmod 444 $workspace_fuse_jar
|
|
|
|
_retval=
|
|
if [ -d /home/${USER}/workspace ]; then
|
|
rmdir /home/${USER}/workspace
|
|
_retval=$?
|
|
if [ $_retval -ne 0 ]; then
|
|
echo "The user has a directory named 'workspace' inside their home directory and it is not empty."
|
|
echo "Not starting the workspace mount"
|
|
exit $_retval
|
|
fi
|
|
fi
|
|
|
|
echo "Mount the workspace"
|
|
su - "$USER" -c "/usr/bin/java -cp .:${workspace_dir}:${workspace_logdir}/ -Dlogback.configurationFile=${workspace_logdir}/logback.xml -jar $workspace_fuse_jar $SHINYPROXY_OIDC_ACCESS_TOKEN ${_workspace_scope} $workspace_dir" >/dev/null 2>&1 &
|
|
|
|
sleep 5
|
|
_retval=
|
|
_fuse_process=$(ps auwwx | grep fuse | grep java)
|
|
_retval=$?
|
|
if [ $_retval -ne 0 ]; then
|
|
echo "The mount of the workspace failed"
|
|
exit 1
|
|
else
|
|
pushd /home/${USER}
|
|
if [ $? -ne 0 ]; then
|
|
if ! [ -L workspace ]; then
|
|
su - "$USER" -c "ln -s $workspace_dir /workspace"
|
|
fi
|
|
else
|
|
echo "Cannot cd inside the user's home directory"
|
|
exit 1
|
|
fi
|
|
echo "The workspace has been mounted"
|
|
exit 0
|
|
fi
|