#!/usr/bin/perl -w

use Lemonldap::NG::Manager::Cli;
use POSIX qw(setuid setgid);
use strict;

sub giveUpPrivileges {
    my ( $user, $group ) = @_;

    if ( not defined($user) ) {
        $user = "nobody";
    }

    if ( not defined($group) ) {
        $group = "nobody";
    }

    # become $user:$group and give up root privileges
    setgid( ( getgrnam($group) )[2] );
    setuid( ( getpwnam($user) )[2] );

    # if we are still root
    if ( $> == 0 ) {

        # ask the user to continue or abort
        print STDERR
"$0 must not be launched as root since local cache can be corrupted.\n";
        print STDERR "Continue (y/N)? ";
        my $res = <STDIN>;
        exit 1 unless ( $res =~ /^y/i );
    }
}

&giveUpPrivileges( "www-data", "www-data" );

# Display usage unless command
unless (@ARGV) {
    print STDERR "Usage: $0 <action> <params>\n";
    print STDERR "Enter $0 help to get more information\n";
    exit 1;
}

my $app = Lemonldap::NG::Manager::Cli->new();

my $ret = $app->run(@ARGV);

exit($ret);

__END__

=head1 NAME

=encoding utf8

lemonldap-ng-cli - Command Line Interface to edit LemonLDAP::NG configuration.

=head1 SYNOPSIS

Set/get variables in the configuration:

  lemonldap-ng-cli set <variable> <value>
  lemonldap-ng-cli unset <variable>
  lemonldap-ng-cli get <variable>

Define macros:

  lemonldap-ng-cli set-macro <macro name> <perl expression>
  lemonldap-ng-cli unset-macro <macro name>
  lemonldap-ng-cli get-macro <macro name>

Modify application list:

  lemonldap-ng-cli apps-set-cat <cat id> <cat name>
  lemonldap-ng-cli apps-get-cat <cat id>
  
  lemonldap-ng-cli apps-add <app id> <cat id>
  lemonldap-ng-cli apps-set-uri <app id> <app uri>
  lemonldap-ng-cli apps-set-name <app id> <app name>
  lemonldap-ng-cli apps-set-desc <app id> <app description>
  lemonldap-ng-cli apps-set-logo <app id> <logo>
  lemonldap-ng-cli apps-set-display <app id> <app display>
  
  lemonldap-ng-cli apps-get <app id>
  lemonldap-ng-cli apps-rm <app id>

Manage rules:

  lemonldap-ng-cli rules-set <virtual host> <expr> <rule>
  lemonldap-ng-cli rules-unset <virtual host> <expr>
  lemonldap-ng-cli rules-get <virtual host>

Manage exported variables:

  lemonldap-ng-cli export-var <key> <value>
  lemonldap-ng-cli unexport-var <key>
  lemonldap-ng-cli get-exported-vars

Manage exported headers:

  lemonldap-ng-cli export-header <virtual host> <HTTP header> <perl expression>
  lemonldap-ng-cli unexport-header <virtual host> <HTTP header>
  lemonldap-ng-cli get-exported-headers <virtual host>

Manage virtual hosts:

  lemonldap-ng-cli vhost-add <virtual host uri>
  lemonldap-ng-cli vhost-del <virtual host>
  lemonldap-ng-cli vhost-set-port <virtual host> <port>
  lemonldap-ng-cli vhost-set-https <virtual host> <value>
  lemonldap-ng-cli vhost-set-maintenance  <virtual host> <value>
  lemonldap-ng-cli vhost-list

Global Storage:

  lemonldap-ng-cli global-storage
  lemonldap-ng-cli global-storage-set-dir <path>
  lemonldap-ng-cli global-storage-set-lockdir <path>

Reload URLs:

  lemonldap-ng-cli reload-urls
  lemonldap-ng-cli reload-url-add <vhost> <url>
  lemonldap-ng-cli reload-url-del <vhost>

=head1 DESCRIPTION

lemonldap-ng-cli allow user to edit the configuration of Lemonldap::NG via the
command line.

=head1 SEE ALSO

L<Lemonldap::NG::Cli>, L<http://lemonldap-ng.org/>

=head1 AUTHOR

David Delassus E<lt>david.jose.delassus@gmail.comE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2012, by David Delassus

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.10.0 or,
at your option, any later version of Perl 5 you may have available.

=cut
