----------------------------------------------------------------------- -- akt-commands-info -- Info command of keystore -- Copyright (C) 2019 Stephane Carrez -- Written by Stephane Carrez (Stephane.Carrez@gmail.com) -- -- 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. ----------------------------------------------------------------------- with Ada.Text_IO; with Keystore.Verifier; package body AKT.Commands.Info is use type Keystore.Header_Slot_Count_Type; use type Keystore.Passwords.Keys.Key_Provider_Access; -- ------------------------------ -- List the value entries of the keystore. -- ------------------------------ overriding procedure Execute (Command : in out Command_Type; Name : in String; Args : in Argument_List'Class; Context : in out Context_Type) is pragma Unreferenced (Command, Name); Path : constant String := Context.Get_Keystore_Path (Args); Stats : Keystore.Wallet_Stats; Is_Keystore : Boolean; begin Keystore.Verifier.Print_Information (Path, Is_Keystore); -- No need to proceed if this is not a keystore file. if not Is_Keystore then return; end if; Setup_Password_Provider (Context); Setup_Key_Provider (Context); Context.Wallet.Open (Path => Path, Data_Path => Context.Data_Path.all, Info => Context.Info); if Context.No_Password_Opt and Context.Info.Header_Count = 0 then return; end if; if not Context.No_Password_Opt then if Context.Key_Provider /= null then Context.Wallet.Set_Master_Key (Context.Key_Provider.all); end if; Context.Wallet.Unlock (Context.Provider.all, Context.Slot); else Context.GPG.Load_Secrets (Context.Wallet); Context.Wallet.Set_Master_Key (Context.GPG); Context.Wallet.Unlock (Context.GPG, Context.Slot); end if; Context.Wallet.Get_Stats (Stats); Ada.Text_IO.Put ("Key slots used: "); Ada.Text_IO.Set_Col (29); for Slot in Stats.Keys'Range loop if Stats.Keys (Slot) then Ada.Text_IO.Put (Keystore.Key_Slot'Image (Slot)); end if; end loop; Ada.Text_IO.New_Line; Ada.Text_IO.Put ("Entry count: "); Ada.Text_IO.Set_Col (29); Ada.Text_IO.Put_Line (Natural'Image (Stats.Entry_Count)); end Execute; end AKT.Commands.Info;