/* * Zed Attack Proxy (ZAP) and its related class files. * * ZAP is an HTTP/HTTPS proxy for assessing web application security. * * Copyright The OWASP ZAP Development Team * * 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. */ package org.zaproxy.zap.db.sql; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.parosproxy.paros.db.DatabaseException; import org.parosproxy.paros.db.RecordSession; import org.parosproxy.paros.db.TableSession; public class SqlTableSession extends SqlAbstractTable implements TableSession { private static final String SESSIONID = DbSQL.getSQL("session.field.sessionid"); private static final String SESSIONNAME = DbSQL.getSQL("session.field.sessionname"); private static final String LASTACCESS = DbSQL.getSQL("session.field.lastaccess"); public SqlTableSession() { } @Override protected void reconnect(Connection conn) throws DatabaseException { } /* (non-Javadoc) * @see org.parosproxy.paros.db.paros.TableSession#insert(long, java.lang.String) */ @Override public synchronized void insert(long sessionId, String sessionName) throws DatabaseException { SqlPreparedStatementWrapper psInsert = null; try { psInsert = DbSQL.getSingleton().getPreparedStatement("session.ps.insert"); psInsert.getPs().setLong(1, sessionId); psInsert.getPs().setString(2, sessionName); psInsert.getPs().executeUpdate(); } catch (SQLException e) { throw new DatabaseException(e); } finally { DbSQL.getSingleton().releasePreparedStatement(psInsert); } } /* (non-Javadoc) * @see org.parosproxy.paros.db.paros.TableSession#update(long, java.lang.String) */ @Override public synchronized void update(long sessionId, String sessionName) throws DatabaseException { SqlPreparedStatementWrapper psUpdate = null; try { psUpdate = DbSQL.getSingleton().getPreparedStatement("session.ps.update"); psUpdate.getPs().setLong(2, sessionId); psUpdate.getPs().setString(1, sessionName); psUpdate.getPs().executeUpdate(); } catch (SQLException e) { throw new DatabaseException(e); } finally { DbSQL.getSingleton().releasePreparedStatement(psUpdate); } } @Override public List<RecordSession> listSessions() throws DatabaseException { SqlPreparedStatementWrapper psList = null; try { psList = DbSQL.getSingleton().getPreparedStatement("session.ps.list"); List<RecordSession> result = new ArrayList<RecordSession>(); try (ResultSet rs = psList.getPs().executeQuery()) { RecordSession ra = build(rs); while (ra != null) { result.add(ra); ra = build(rs); } } return result; } catch (SQLException e) { throw new DatabaseException(e); } finally { DbSQL.getSingleton().releasePreparedStatement(psList); } } private RecordSession build(ResultSet rs) throws DatabaseException { try { RecordSession session = null; if (rs.next()) { session = new RecordSession( rs.getLong(SESSIONID), rs.getString(SESSIONNAME), rs.getDate(LASTACCESS) ); } return session; } catch (SQLException e) { throw new DatabaseException(e); } } }