unit user_management; {$mode objfpc}{$H+} interface uses Classes, SysUtils, IniFiles, appprops_bom, strutils ; {: Writes out list of users in the system } procedure ListUsers; {: Add new user } procedure AddUser(const AUserName, ASecret, APermissions: string); {: Checks to see if user already exists. } function UserExists(const AUserName: string): boolean; {: Removes a user from the list. } procedure RemoveUser(const AUserName: string); implementation uses error_console ; procedure ListUsers; var INI: TIniFile; Sections: TStringList; i: integer; sLine: string; sField: string; begin WriteLn(#13#10); // 2 lines please WriteLn('-------------------------------------------------------------------'); WriteLn('* Users List *'); WriteLn; WriteLn('UserName Password Permissions'); WriteLn('-------------------------------------------------------------------'); Sections := TStringList.Create; ini := gAppINIConfig('users.conf'); try // get sections INI.ReadSections(Sections); Sections.Sort; // loop through each section and list users out. for i := 0 to Sections.Count - 1 do begin sLine := DupeString('^', 67); // username sField := Sections[i]; sLine := StuffString(sLine, 1, Length(sField), sField); // password sField := ini.ReadString(Sections[i], 'password', ''); sLine := StuffString(sLine, 34, Length(sField), sField); // permissions sField := ini.ReadString(Sections[i], 'permissions', ''); sLine := StuffString(sLine, 50, Length(sField), sField); // clean up sLine := StringReplace(sLine, '^', ' ', [rfReplaceAll]); WriteLn(sLine); end; finally Sections.free; ini.free; end; WriteLn('-------------------------------------------------------------------'); WriteLn('End ==> Report'); WriteLn(#13#10); end; procedure AddUser(const AUserName, ASecret, APermissions: string); var Config: TIniFile; begin if UserExists(AUserName) then begin WriteOutError('User already exists'); exit; end; if AUserName = '' then begin WriteOutError('UserName cannot be blank.'); exit; end; if ASecret = '' then begin WriteOutError('Secret cannot be blank'); exit; end; if APermissions = '' then begin WriteOutError('Permissions cannot be blank'); exit; end; Config := gAppINIConfig('users.conf'); try Config.WriteString(AUserName, 'password', ASecret); Config.WriteString(AUserName, 'permissions', APermissions); WriteLn('User Added' + LineEnding + LineEnding); finally; Config.free; end; end; function UserExists(const AUserName: string): boolean; var Config: TIniFile; begin Config := gAppINIConfig('users.conf'); try result := Config.SectionExists(AUserName); finally Config.Free; end; end; procedure RemoveUser( const AUserName: string) ; var Config: TIniFile; begin if not UserExists(AUserName) then begin WriteOutError('UserName does not exist.'); exit; end; Config := gAppINIConfig('users.conf'); try Config.EraseSection(AUserName); finally Config.free; end; end; end.