summaryrefslogtreecommitdiffstats
path: root/datarouter-node/src
diff options
context:
space:
mode:
Diffstat (limited to 'datarouter-node/src')
0 files changed, 0 insertions, 0 deletions
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
/*******************************************************************************
 * ============LICENSE_START====================================================
 * * org.onap.aaf
 * * ===========================================================================
 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
 * * ===========================================================================
 * * Licensed under the Apache License, Version 2.0 (the "License");
 * * you may not use this file except in compliance with the License.
 * * You may obtain a copy of the License at
 * * 
 *  *      http://www.apache.org/licenses/LICENSE-2.0
 * * 
 *  * Unless required by applicable law or agreed to in writing, software
 * * distributed under the License is distributed on an "AS IS" BASIS,
 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * * See the License for the specific language governing permissions and
 * * limitations under the License.
 * * ============LICENSE_END====================================================
 * *
 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 * *
 ******************************************************************************/
package com.att.cadi.cm;

import java.io.File;

import com.att.cadi.CadiException;
import com.att.cadi.util.Chmod;
import com.att.inno.env.Trans;
import com.att.inno.env.util.Chrono;
import com.att.inno.env.util.Split;

import certman.v1_0.Artifacts.Artifact;
import certman.v1_0.CertInfo;

public class PlaceArtifactScripts extends ArtifactDir {
	@Override
	public boolean _place(Trans trans, CertInfo certInfo, Artifact arti) throws CadiException {
		try {
			// Setup check.sh script
			String filename = arti.getAppName()+".check.sh";
			File f1 = new File(dir,filename);
			String email = arti.getNotification() + '\n';
			if(email.startsWith("mailto:")) {
				email=email.substring(7);
			}  else {
				email=arti.getOsUser() + '\n';
			}
			
			StringBuilder classpath = new StringBuilder();
			boolean first = true;
			for(String pth : Split.split(File.pathSeparatorChar, System.getProperty("java.class.path"))) {
				if(first) {
					first=false;
				} else {
					classpath.append(File.pathSeparatorChar);
				}
				File f = new File(pth);
				classpath.append(f.getCanonicalPath().replaceAll("[0-9]+\\.[0-9]+\\.[0-9]+","*"));
			}
			
			write(f1,Chmod.to644,
					"#!/bin/bash " + f1.getCanonicalPath()+'\n',
					"# Certificate Manager Check Script\n",
					"# Check on Certificate, and renew if needed.\n",
					"# Generated by Certificate Manager " + Chrono.timeStamp()+'\n',
					"DIR="+arti.getDir()+'\n',
					"APP="+arti.getAppName()+'\n',
					"EMAIL="+email,
					"CP=\""+classpath.toString()+"\"\n",
					checkScript
					);
			
			// Setup check.sh script
			File f2 = new File(dir,arti.getAppName()+".crontab.sh");
			write(f2,Chmod.to644,
					"#!/bin/bash " + f1.getCanonicalPath()+'\n',
					"# Certificate Manager Crontab Loading Script\n",
					"# Add/Update a Crontab entry, that adds a check on Certificate Manager generated Certificate nightly.\n",
					"# Generated by Certificate Manager " + Chrono.timeStamp()+'\n',
					"TFILE=\"/tmp/cmcron$$.temp\"\n",
					"DIR=\""+arti.getDir()+"\"\n",
					"CF=\""+arti.getAppName()+" Certificate Check Script\"\n",
					"SCRIPT=\""+f1.getCanonicalPath()+"\"\n",
					cronScript
					);

		} catch (Exception e) {
			throw new CadiException(e);
		}
		return true;
	}
	
	private final static String checkScript = 
			"> $DIR/$APP.msg\n\n" +
			"function mailit {\n" +
			"  printf \"$*\" | /bin/mail -s \"AAF Certman Notification for `uname -n`\" $EMAIL\n"+
			"}\n\n" +
			System.getProperty("java.home") + "/bin/" +"java -cp $CP " +
				CmAgent.class.getName() + 
				" cadi_prop_files=$DIR/$APP.props check 2>  $DIR/$APP.STDERR > $DIR/$APP.STDOUT\n" +
			"case \"$?\" in\n" +
			"  0)\n" +
			"    # Note: Validation will be mailed only the first day after any modification\n" +
			"    if [ \"`find $DIR -mtime 0 -name $APP.check.sh`\" != \"\" ] ; then\n" +
			"       mailit `echo \"Certficate Validated:\\n\\n\" | cat - $DIR/$APP.msg`\n" +
			"    else\n" +
			"       cat $DIR/$APP.msg\n" +
			"    fi\n" +
			"    ;;\n" +
			"  1) mailit \"Error with Certificate Check:\\\\n\\\\nCheck logs $DIR/$APP.STDOUT and $DIR/$APP.STDERR on `uname -n`\"\n" +
			"    ;;\n" +
			"  2) mailit `echo \"Certificate Check Error\\\\n\\\\n\" | cat - $DIR/$APP.msg`\n" +
			"    ;;\n" +
			"  10) mailit `echo \"Certificate Replaced\\\\n\\\\n\" | cat - $DIR/$APP.msg`\n" +
			"      if [ -e $DIR/$APP.restart.sh ]; then\n" +
			"        # Note: it is THIS SCRIPT'S RESPONSIBILITY to notify upon success or failure as necessary!!\n" +
			"        /bin/sh $DIR/$APP.restart.sh\n" +
			"      fi\n" +
			"    ;;\n" +
			"  *) mailit `echo \"Unknown Error code for CM Agent\\\\n\\\\n\" | cat - $DIR/$APP.msg`\n" +
			"    ;;\n" +
			" esac\n\n" +
			" # Note: make sure to cover this sripts' exit Code\n";
	
	private final static String cronScript = 
			"crontab -l | sed -n \"/#### BEGIN $CF/,/END $CF ####/!p\" > $TFILE\n" +
			"# Note: Randomize Minutes (0-60) and hours (1-4)\n" +
			"echo \"#### BEGIN $CF ####\" >> $TFILE\n" +
			"echo \"$(( $RANDOM % 60)) $(( $(( $RANDOM % 3 )) + 1 )) * * * /bin/bash $SCRIPT " +
				">> $DIR/cronlog 2>&1 \" >> $TFILE\n" +
			"echo \"#### END $CF ####\" >> $TFILE\n" +
			"crontab $TFILE\n" +
			"rm $TFILE\n";
}