To version 2.1.17-SNAPSHOT
[aaf/authz.git] / auth / sample / bin / client.sh
1 #!/bin/bash
2 #########
3 #  ============LICENSE_START====================================================
4 #  org.onap.aaf
5 #  ===========================================================================
6 #  Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
7 #  ===========================================================================
8 #  Licensed under the Apache License, Version 2.0 (the "License");
9 #  you may not use this file except in compliance with the License.
10 #  You may obtain a copy of the License at
11 #
12 #       http://www.apache.org/licenses/LICENSE-2.0
13 #
14 #  Unless required by applicable law or agreed to in writing, software
15 #  distributed under the License is distributed on an "AS IS" BASIS,
16 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 #  See the License for the specific language governing permissions and
18 #  limitations under the License.
19 #  ============LICENSE_END====================================================
20 #
21 # This script is run when starting client Container.
22 #  It needs to cover the cases where the initial data doesn't exist, and when it has already been configured (don't overwrite)
23 #
24 JAVA=${JAVA_HOME}/bin/java
25 AAF_INTERFACE_VERSION=2.1
26
27 # Extract Name, Domain and NS from FQI
28 FQIA=($(echo ${APP_FQI} | tr '@' '\n'))
29 FQI_SHORT=${FQIA[0]}
30 FQI_DOMAIN=${FQIA[1]}
31 #   Reverse DOMAIN for NS
32 FQIA_E=($(echo ${FQI_DOMAIN} | tr '.' '\n'))
33 for (( i=( ${#FQIA_E[@]} -1 ); i>0; i-- )); do
34    NS=${NS}${FQIA_E[i]}'.'
35 done
36 NS=${NS}${FQIA_E[0]}
37 CONFIG="/opt/app/aaf_config"
38 OSAAF="/opt/app/osaaf"
39 LOCAL="$OSAAF/local"
40 DOT_AAF="$HOME/.aaf"
41 SSO="$DOT_AAF/sso.props"
42
43 if [ -e "$CONFIG" ]; then
44   CONFIG_BIN="$CONFIG/bin" 
45 else 
46   CONFIG_BIN="."
47 fi
48
49 AGENT_JAR="$CONFIG_BIN/aaf-cadi-aaf-*-full.jar"
50
51 JAVA_AGENT="$JAVA -Dcadi_loglevel=DEBUG -Dcadi_etc_dir=${LOCAL} -Dcadi_log_dir=${LOCAL} -jar $AGENT_JAR "
52
53 # Setup SSO info for Deploy ID
54 function sso_encrypt() {
55    $JAVA_AGENT cadi digest ${1} $DOT_AAF/keyfile
56 }
57
58 # Setup Bash, first time only
59 if [ ! -e "$HOME/.bashrc" ] || [ -z "$(grep agent $HOME/.bashrc)" ]; then
60   echo "alias agent='$CONFIG_BIN/agent.sh agent \$*'" >>$HOME/.bashrc
61   chmod a+x $CONFIG_BIN/agent.sh
62   . $HOME/.bashrc
63 fi
64 if [ ! -e "$DOT_AAF/truststoreONAPall.jks" ]; then
65     mkdir -p $DOT_AAF
66     base64 -d $CONFIG/cert/truststoreONAPall.jks.b64 > $DOT_AAF/truststoreONAPall.jks
67 fi
68
69 # Create Deployer Info, located at /root/.aaf
70 if [ ! -e "$DOT_AAF/keyfile" ]; then
71     $JAVA_AGENT cadi keygen $DOT_AAF/keyfile
72     chmod 400 $DOT_AAF/keyfile
73     echo "cadi_keyfile=$DOT_AAF/keyfile" > ${SSO}
74
75     # Add Deployer Creds to Root's SSO
76     DEPLOY_FQI="${DEPLOY_FQI:=$app_id}"
77     echo "aaf_id=${DEPLOY_FQI}" >> ${SSO}
78     if [ ! "${DEPLOY_PASSWORD}" = "" ]; then
79        echo aaf_password=enc:$(sso_encrypt ${DEPLOY_PASSWORD}) >> ${SSO}
80     fi
81     
82     # Cover case where using app.props
83     aaf_locator_container_ns=${aaf_locator_container_ns:=$CONTAINER_NS}
84     if [ "$aaf_locator_container" = "docker" ]; then
85         echo "aaf_locate_url=https://aaf-locate:8095" >> ${SSO}
86         echo "aaf_url_cm=https://aaf-cm:8150" >> ${SSO}
87         echo "aaf_url=https://aaf-service:8100" >> ${SSO}
88     else 
89         echo "aaf_locate_url=https://$aaf-locator.${CONTAINER_NS}:8095" >> ${SSO}
90         echo "aaf_url_cm=https://AAF_LOCATE_URL/%CNS.%NS.cm:2.1" >> ${SSO}
91         echo "aaf_url=https://AAF_LOCATE_URL/%CNS.%NS.service:2.1" >> ${SSO}
92     fi
93
94     echo "cadi_truststore=$DOT_AAF/truststoreONAPall.jks" >> ${SSO}
95     echo "cadi_truststore_password=changeit" >> ${SSO}
96     echo "cadi_latitude=${LATITUDE}" >> ${SSO}
97     echo "cadi_longitude=${LONGITUDE}" >> ${SSO}
98     echo "hostname=${aaf_locator_fqdn}" >> ${SSO}
99
100     # Push in all AAF and CADI properties to SSO
101     for E in $(env); do
102         if [ "${E:0:4}" = "aaf_" ] || [ "${E:0:5}" = "cadi_" ]; then
103            # Use Deployer ID in ${SSO}
104            if [ "app_id" != "${E%=*}" ]; then
105               S="${E/_helm/.helm}"
106               S="${S/_oom/.oom}"
107              echo "$S" >> ${SSO}
108            fi
109         fi
110     done
111
112     . ${SSO}
113     echo "Caller Properties Initialized"
114     INITIALIZED="true"
115     echo "cat SSO"
116     cat ${SSO}
117 fi
118
119 # Check for local dir
120 if [ -d $LOCAL ]; then
121     echo "$LOCAL exists"
122 else
123     mkdir -p $LOCAL
124     echo "Created $LOCAL"
125 fi
126
127 cd $LOCAL
128 echo "Existing files in $LOCAL"
129 ls -l
130
131 # Should we clean up?
132 if [ "${VERSION}" != "$(cat ${LOCAL}/VERSION 2> /dev/null)" ]; then
133   echo "Clean up directory ${LOCAL}"
134   rm -Rf ${LOCAL}/*
135 fi
136 echo "${VERSION}" > $LOCAL/VERSION
137
138 echo "Namespace is ${NS}"
139 # Only initialize once, automatically...
140 if [ ! -e $LOCAL/${NS}.props ]; then
141     echo "#### Create Configuration files "
142     $JAVA_AGENT config $APP_FQI $APP_FQDN 
143     cat $LOCAL/$NS.props
144
145     echo
146     echo "#### Certificate Authorization Artifact"
147     # TMP=$(mktemp)
148     TMP=$LOCAL/agent.log
149     $JAVA_AGENT read ${APP_FQI} ${APP_FQDN} | tee $TMP
150
151     if [ -n "$(grep 'Namespace:' $TMP)" ]; then
152         echo "#### Place Certificates (by deployer)"
153         $JAVA_AGENT place $APP_FQI $APP_FQDN
154     
155         if [ -z "$(grep cadi_alias $NS.cred.props)" ]; then
156             echo "FAILED to get Certificate"
157           INITIALIZED="false"
158         else 
159           echo "Obtained Certificates"
160           echo "#### Validate Configuration and Certificate with live call"
161           $JAVA_AGENT validate cadi_prop_files=${NS}.props
162           INITIALIZED="true"
163         fi
164     else
165         echo "#### Certificate Authorization Artifact must be valid to continue"
166     fi
167     rm $TMP    
168 else
169     INITIALIZED="true"
170 fi
171
172 # Now run a command
173 CMD=$2
174 if [ -z "$CMD" ]; then
175     if [ -n "$INITIALIZED" ]; then
176       echo "Initialization complete"
177     fi
178 else 
179     shift
180     shift
181     case "$CMD" in
182     ls)
183         echo ls requested
184         find /opt/app/osaaf -depth
185         ;;
186     cat)
187         if [ "$1" = "" ]; then
188             echo "usage: cat <file... ONLY files ending in .props>"
189         else
190             if [[ $1 == *.props ]]; then
191                 echo
192                 echo "## CONTENTS OF $3"
193                 echo
194                 cat "$1"
195             else
196                 echo "### ERROR ####"
197                 echo "   \"cat\" may only be used with files ending with \".props\""
198             fi
199         fi
200         ;;
201     read)
202         echo "## Read Artifacts"
203         $JAVA_AGENT read $APP_FQI $APP_FQDN cadi_prop_files=${SSO} cadi_loglevel=INFO
204         ;;
205     showpass)
206         echo "## Show Passwords"
207         $JAVA_AGENT showpass $APP_FQI $APP_FQDN cadi_prop_files=${SSO} cadi_loglevel=ERROR
208         ;;
209     check)
210         echo "## Check Certificate"
211         echo "$JAVA_AGENT check $APP_FQI $APP_FQDN cadi_prop_files=${LOCAL}/${NS}.props"
212         $JAVA_AGENT check $APP_FQI $APP_FQDN cadi_prop_files=${LOCAL}/${NS}.props
213         ;;
214     validate)
215         echo "## validate requested"
216         $JAVA_AGENT validate $APP_FQI $APP_FQDN
217         ;;
218     place)
219         echo "## Renew Certificate"
220         $JAVA_AGENT place $APP_FQI $APP_FQDN cadi_prop_files=${SSO}
221         ;;
222     renew)
223         echo "## Renew Certificate"
224         $JAVA_AGENT place $APP_FQI $APP_FQDN
225         ;;
226     bash)
227         shift
228         cd $LOCAL || exit
229         exec bash "$@"
230         ;;
231     setProp)
232         cd $LOCAL || exit
233         FILES=$(grep -l "$1" ./*.props)
234         if [ -z "$FILES" ]; then 
235             if [ -z "$3" ]; then
236                FILES=${NS}.props
237             else 
238                FILES="$3"
239             fi
240             ADD=Y
241         fi
242         for F in $FILES; do
243             if [ "$ADD" = "Y" ]; then
244                 echo "Changing $1 to $F"
245                 echo "$1=$2" >> $F
246             else 
247                echo "Changing $1 in $F"
248                sed -i.backup -e "s/\\(${1}.*=\\).*/\\1${2}/" $F
249             fi
250             cat $F
251         done
252         ;;
253     encrypt)
254         cd $LOCAL || exit
255         echo $1
256         FILES=$(grep -l "$1" ./*.props)
257         if [ "$FILES" = "" ]; then
258              FILES=$LOCAL/${NS}.cred.props
259              ADD=Y
260         fi
261         for F in $FILES; do
262             echo "Changing $1 in $F"
263             if [ "$2" = "" ]; then
264                 read -r -p "Password (leave blank to cancel): " -s ORIG_PW
265                 echo " "
266                 if [ "$ORIG_PW" = "" ]; then
267                     echo canceling...
268                     break
269                 fi
270             else
271                 ORIG_PW="$2"
272             fi
273             PWD=$($JAVA_CADI digest "$ORIG_PW" $LOCAL/${NS}.keyfile)
274             if [ "$ADD" = "Y" ]; then
275                   echo "$1=enc:$PWD" >> $F
276             else 
277                 sed -i.backup -e "s/\\($1.*enc:\\).*/\\1$PWD/" $F
278            fi
279             cat $F
280         done
281         ;;
282     taillog) 
283         sh /opt/app/osaaf/logs/taillog
284         ;;
285     testConnectivity|testconnectivity)
286         echo "--- Test Connectivity ---"
287         $JAVA -cp $CONFIG_BIN/aaf-auth-cmd-*-full.jar org.onap.aaf.cadi.aaf.TestConnectivity $LOCAL/org.osaaf.aaf.props 
288         ;;
289     --help | -?)
290         case "$1" in
291         "")
292             echo "--- Agent Container Comands ---"
293             echo "  ls                      - Lists all files in Configuration"
294             echo "  cat <file.props>>       - Shows the contents (Prop files only)"
295             echo "  validate                - Runs a test using Configuration"
296             echo "  setProp <tag> [<value>] - set value on 'tag' (if no value, it will be queried from config)"
297             echo "  encrypt <tag> [<pass>]  - set passwords on Configuration (if no pass, it will be queried)"
298             echo "  bash                    - run bash in Container"
299             echo "     Note: the following aliases are preset"
300             echo "       cadi               - CADI CmdLine tool"
301             echo "       agent              - Agent Java tool (see above help)"
302             echo ""
303             echo " --help|-? [cadi|agent]   - This help, cadi help or agent help"
304             ;;
305         cadi)
306             echo "--- cadi Tool Comands ---"
307             $JAVA_CADI
308             ;;
309         agent)
310             echo "--- agent Tool Comands ---"
311             $JAVA_AGENT
312             ;;
313         aafcli)
314             echo "--- aafcli Tool Comands ---"
315             $JAVA_AAFCLI
316             ;;
317         esac
318         echo ""
319         ;;
320     ### Possible Dublin
321     # sample)
322     #    echo "--- run Sample Servlet App ---"
323     #    $JAVA -Dcadi_prop_files=$LOCAL/${NS}.props -cp $CONFIG_BIN/aaf-auth-cmd-*-full.jar:$CONFIG_BIN/aaf-cadi-servlet-sample-*-sample.jar org.onap.aaf.sample.cadi.jetty.JettyStandalone ${NS}.props
324     #    ;;
325     *)
326         $JAVA_AGENT "$CMD" "$@"
327         ;;
328     esac
329 fi