Concierge-Auth

 view release on metacpan or  search on metacpan

examples/06-file-management.pl  view on Meta::CPAN

#!/usr/bin/env perl

=head1 NAME

06-file-management.pl - Authentication file management example

=head1 DESCRIPTION

Demonstrates file operations, backup management, and multi-file
authentication scenarios using Concierge::Auth.

=cut

use strict;
use warnings;
use Concierge::Auth;
use File::Temp qw(tempdir tempfile);
use File::Spec;

print "=== File Management Examples ===\n\n";

# Create temporary directory for demo files
my $temp_dir = tempdir(CLEANUP => 1);
print "Working in temporary directory: $temp_dir\n\n";

print "--- Basic File Operations ---\n";

# Create primary auth file
my $primary_file = File::Spec->catfile($temp_dir, 'primary_users.db');
my $auth1 = Concierge::Auth->new({file => $primary_file});

print "Created primary auth file: " . $auth1->pfile() . "\n";
print "Field separator: '" . $auth1->psep() . "'\n";

# Add some users to primary file
my @primary_users = (
    ['alice', 'password123'],
    ['bob', 'secure_pass'],
    ['charlie', 'strong_password']
);

print "\nPopulating primary file:\n";
for my $user_data (@primary_users) {
    my ($username, $password) = @$user_data;
    my ($success, $message) = $auth1->setPwd($username, $password);
    printf "  %-10s: %s\n", $username, $success ? "✓ added" : "✗ failed";
}

print "\n--- Alternative Separators ---\n";

# Create auth file with pipe separator
my $pipe_file = File::Spec->catfile($temp_dir, 'pipe_users.db');
my $auth2 = Concierge::Auth->new({file => $pipe_file, sep => '|'});

print "Created pipe-separated file: " . $auth2->pfile() . "\n";
print "Field separator: '" . $auth2->psep() . "'\n";

# Add users to pipe-separated file
for my $user_data (@primary_users) {
    my ($username, $password) = @$user_data;
    $auth2->setPwd($username, $password);
}

# Create auth file with comma separator
my $csv_file = File::Spec->catfile($temp_dir, 'csv_users.db');
my $auth3 = Concierge::Auth->new({file => $csv_file, sep => ','});

print "Created comma-separated file: " . $auth3->pfile() . "\n";
print "Field separator: '" . $auth3->psep() . "'\n";

examples/06-file-management.pl  view on Meta::CPAN


=item * B<Switching> - Change files on existing auth objects

=item * B<Validation> - Check file existence and readability

=item * B<Clearing> - Remove all users while keeping file

=item * B<Removal> - Delete file completely

=back

=head2 Security Features

=over 4

=item * Files created with restrictive permissions (0600)

=item * Atomic file operations with locking

=item * Backup file cleanup

=item * Safe in-place editing

=back

=head1 MULTI-FILE PATTERNS

=head2 Role-Based Separation

    my %auth_systems = (
        users  => Concierge::Auth->new({file => 'users.db'}),
        admins => Concierge::Auth->new({file => 'admins.db'}),
        api    => Concierge::Auth->new({file => 'api_keys.db'})
    );

=head2 Environment Separation

    my $env = $ENV{APP_ENV} || 'development';
    my $auth = Concierge::Auth->new({
        file => "users_$env.db"
    });

=head2 Application Separation

    my %apps = (
        web    => Concierge::Auth->new({file => 'web_users.db'}),
        mobile => Concierge::Auth->new({file => 'mobile_users.db'}),
        cli    => Concierge::Auth->new({file => 'cli_users.db'})
    );

=head1 BEST PRACTICES

=over 4

=item * Use absolute paths for auth files

=item * Place auth files outside web-accessible directories

=item * Use restrictive directory permissions (0700)

=item * Implement regular backup strategies

=item * Monitor file access and modifications

=item * Use separate files for different security levels

=back

=head1 SEE ALSO

L<Concierge::Auth>, 07-error-handling.pl, 04-session-management.pl

=cut



( run in 0.963 second using v1.01-cache-2.11-cpan-df04353d9ac )