# Copyright (C) 2025 James Brotosky, Brandon Wickline # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import logging from services.agenthandler import selectAgents from utils.utils import colorText from utils.selector import Selector logger = logging.getLogger(__name__) from services.API import AirlockAPIWrapper def generate(api: AirlockAPIWrapper): agents = selectAgents(api) purpose = input(colorText(" Please enter the purpose for the OTP: ", "white")) possible_durations = [15, 60, 360, 1440, 10080] print(colorText("Please select a duration:", "white")) duration_selected = Selector.select_int(possible_durations) otp_dict = {} if duration_selected: for agent in agents: otp_code = api.otp_generate(agent.agentid, duration_selected, purpose) logger.info(f"Generated OTP for {agent.hostname}: {otp_code}") otp_dict[agent.hostname] = otp_code return otp_dict def otp_activities_by_agent(api: AirlockAPIWrapper): agents = selectAgents(api) otp_dict = {} for agent in agents: otp_info = api.otp_find_by_agent(agent.agentid) otp_dict[agent.hostname] = otp_info return otp_dict def revoke(api: AirlockAPIWrapper): otp_dict = otp_activities_by_agent(api) list_to_revoke = [entry["otpid"] for entry in otp_dict] for revokee in list_to_revoke: api.otp_revoke(revokee)