summaryrefslogtreecommitdiffstats
path: root/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/reports/PrepExtend.java
blob: 3e0dd01190f8a460f90a9144f389452ab76075a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/**
 * ============LICENSE_START====================================================
 * org.onap.aaf
 * ===========================================================================
 * Copyright (c) 2018 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====================================================
 *
 */
package org.onap.aaf.auth.batch.reports;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;

import org.onap.aaf.auth.batch.Batch;
import org.onap.aaf.auth.batch.helpers.Cred;
import org.onap.aaf.auth.batch.helpers.Cred.Instance;
import org.onap.aaf.auth.batch.helpers.UserRole;
import org.onap.aaf.auth.dao.cass.CredDAO;
import org.onap.aaf.auth.env.AuthzTrans;
import org.onap.aaf.auth.org.OrganizationException;
import org.onap.aaf.cadi.util.CSV;
import org.onap.aaf.cadi.util.CSV.Writer;
import org.onap.aaf.misc.env.APIException;
import org.onap.aaf.misc.env.Env;
import org.onap.aaf.misc.env.TimeTaken;
import org.onap.aaf.misc.env.util.Chrono;

public class PrepExtend extends Batch {

	public static final String PREP_EXTEND = "PrepExtend";
	private static final String CSV = ".csv";
	private static final String INFO = "info";

	/**
	 * Create a list of Creds and UserRoles to extend
	 * Note: Certificates cannot be renewed in this way.
	 * 
	 * Arguments From (0 = today, -2 = 2 weeks back) and To (weeks from today)
	 * 
	 * @param trans
	 * @throws APIException
	 * @throws IOException
	 * @throws OrganizationException
	 */
	public PrepExtend(AuthzTrans trans) throws APIException, IOException, OrganizationException {
		super(trans.env());
		trans.info().log("Starting Connection Process");

		TimeTaken tt0 = trans.start("Cassandra Initialization", Env.SUB);
		try {
			TimeTaken tt = trans.start("Connect to Cluster", Env.REMOTE);
			try {
				session = cluster.connect();
			} finally {
				tt.done();
			}
		} finally {
			tt0.done();
		}
	}

	@Override
	protected void run(AuthzTrans trans) {
		GregorianCalendar gc = new GregorianCalendar();
		Date now = gc.getTime();
		
		int ifrom = 0;
		int ito = 0;
		
		for(int i=0; i< args().length;++i) {
			switch(args()[i]) {
				case "-from":
					if(args().length>i+1) {
						ifrom = Integer.parseInt(args()[i++ +1]); 
					}
					break;
				case "-to":
					if(args().length>i+1) {
						ito = Integer.parseInt(args()[i++ +1]);
					}
					break;
			}
		}
		if(ifrom < -4) {
			System.err.println("Invalid -from param");
			return;
		}
		
		if(ito<=0 || ito>24 || ifrom>ito) {
			System.err.println("Invalid -to param");
			return;
		}
		
		// Make sure to is Zero based from today.
		if(ifrom<0) {
			ito+= ifrom*-1;
		}
		
		gc.add(GregorianCalendar.WEEK_OF_MONTH, ifrom);
		Date from = gc.getTime();
		
		gc.add(GregorianCalendar.WEEK_OF_MONTH, ito /* with From calculated in */);
		Date to = gc.getTime();
		
		try {
			File file = new File(logDir(), PREP_EXTEND + Chrono.dateOnlyStamp(now) + CSV);
			final CSV puntCSV = new CSV(env.access(),file);
			final Writer cw = puntCSV.writer();
			cw.row(INFO,PREP_EXTEND,Chrono.dateOnlyStamp(now),0);

			try {
				trans.info().log("Process UserRoles for Extending");
				/**
				   Run through User Roles.  
				   If match Date Range, write out to appropriate file.
				*/
				UserRole.load(trans, session, UserRole.v2_0_11, ur -> {
					if(from.before(ur.expires()) && to.after(ur.expires())) {
						ur.row(cw);
					}
				});
				
				trans.info().log("Process BasicAuth for Extending");
				TimeTaken tt0 = trans.start("Load Credentials", Env.REMOTE);
				try {
					// Load only Valid Basic Auth
					Cred.load(trans, session, CredDAO.BASIC_AUTH_SHA256);
				} finally {
					tt0.done();
				}


				/**
				   Run through Creds.  
				   If match Date Range, write out to appropriate file.
				*/
				Map<Integer,Instance> imap = new HashMap<>();
				Instance prev;
				for(Cred cred : Cred.data.values()) {
					imap.clear();
					for(Instance i : cred.instances) {
						if(from.before(i.expires) && to.after(i.expires)) {
							prev = imap.get(i.other);
							// Only do LATEST instance of same cred (accounts for previously extended creds)
							if(prev==null || prev.expires.before(i.expires)) {
								imap.put(i.other,i);
							}
						}
					};
					for(Instance i: imap.values()) {
						cred.row(cw,i);
					}
				}
			} finally {
				cw.close();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	@Override
	protected void _close(AuthzTrans trans) {
		session.close();
	}


}