Skip to content

Commit

Permalink
added setup helper commands
Browse files Browse the repository at this point in the history
Added commands that assist in the system setup, i.e:

    createschema - true
    addrole admin login sysadmin sysconfig users.read users.write
    addrole test login sysadmin sysconfig users.read users.write
    adduser admin -ptest -radmin -rtest -n"System Administrator"
    addsysconfig sys.REMEMBER_PASSWORD_ENABLED true
    addsysconfig sys.MAX_LOGIN_ATTEMPTS 5
    addsysconfig sys.PASSWORD_AGE 90
  • Loading branch information
ar committed Aug 26, 2016
1 parent 3bda3c8 commit 19cd00f
Show file tree
Hide file tree
Showing 10 changed files with 247 additions and 0 deletions.
31 changes: 31 additions & 0 deletions modules/eeuser/src/main/java/org/jpos/ee/RoleManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* jPOS Project [http://jpos.org]
* Copyright (C) 2000-2016 Alejandro P. Revilla
*
* 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 <http://www.gnu.org/licenses/>.
*/

package org.jpos.ee;

public class RoleManager {
private DB db;
public RoleManager (DB db) {
this.db = db;
}

public Role getRoleByName (String name) {
return (Role) db.session().createQuery("from Role c WHERE c.name=:name").
setParameter("name", name).uniqueResult();
}
}
41 changes: 41 additions & 0 deletions modules/eeuser/src/main/java/org/jpos/q2/cli/ADDROLE.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.jpos.q2.cli;

import org.jpos.ee.DB;
import org.jpos.ee.Permission;
import org.jpos.ee.Role;
import org.jpos.ee.RoleManager;
import org.jpos.q2.CLICommand;
import org.jpos.q2.CLIContext;

import java.util.Set;

@SuppressWarnings("unused")
public class ADDROLE implements CLICommand {

@Override
public void exec(CLIContext cli, String[] args) throws Exception {
if (args.length < 2) {
cli.println("Usage: addrole <role> <permission 1> <permission 2> ... <permission n>");
return;
}
try (DB db = new DB()) {
db.open();
db.beginTransaction();
RoleManager rm = new RoleManager(db);
Role role = null;
if (rm.getRoleByName(args[1]) == null) {


role = new Role(args[1]);
Set<Permission> perms = role.getPermissions();
for (int i = 2; i < args.length; i++)
perms.add(Permission.valueOf(args[i]));
db.save(role);
}
db.commit();
cli.println (role != null ? "Role created " + role.getName() : " Role already exists");
} catch (Exception e) {
cli.println (e.getMessage());
}
}
}
90 changes: 90 additions & 0 deletions modules/eeuser/src/main/java/org/jpos/q2/cli/ADDUSER.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package org.jpos.q2.cli;

import org.apache.commons.cli.*;
import org.jpos.ee.*;
import org.jpos.q2.CLICommand;
import org.jpos.q2.CLIContext;

import java.io.PrintWriter;
import java.util.Collections;

@SuppressWarnings("unused")
public class ADDUSER implements CLICommand {
@Override
public void exec(CLIContext cli, String[] args) throws Exception {
CommandLineParser parser = new DefaultParser();
Options options = new Options();
options.addOption ("n", "name", true, "User's full name");
options.addOption ("p", "password", true, "The password");
options.addOption ("r", "role", true, "User role");
options.addOption ("h", "help", false, "This help");
CommandLine line = parser.parse(options, shl(shl(args)));

if (args.length < 2 || line.hasOption('h')) {
showHelp (cli, args, options);
return;
}
if (!line.hasOption('n')) {
cli.println ("--nick parameter is required. See --help for help");
return;
}
try (DB db = new DB()) {
db.open();
db.beginTransaction();
UserManager mgr = new UserManager(db);
User u = mgr.getUserByNick(args[1], true);
if (u != null) {
cli.println ("User already exists" + (u.isDeleted() ? " (soft-deleted)" : ""));
return;
}
RoleManager rm = new RoleManager(db);
Role[] rr = null;
if (line.hasOption('r')) {
String[] roles = line.getOptionValues('r');
rr = new Role[roles.length];
int i=0;
for (String s : roles) {
Role r = rm.getRoleByName(s);
if (r == null) {
cli.println ("Role '" + s + "' does not exist - aborting");
return;
}
rr[i++] = r;
}
}
User user = new User();
user.setNick (args[1]);
user.setName (line.getOptionValue('N'));
db.session().save(user);
if (line.hasOption('p')) {
mgr.setPassword(user, line.getOptionValue('p'));
}
if (rr != null)
Collections.addAll(user.getRoles(), rr);
user.setActive(true);
db.commit();
cli.println ("User '" + user.getNickAndId() + "' created");
} catch (Exception e) {
cli.println (e.getMessage());
}
}

private String[] shl (String[] args) {
switch (args.length) {
case 0:
return args;
case 1:
return new String[0];
}
String[] shl = new String[args.length-1];
System.arraycopy(args,1, shl, 0, args.length-1);
return shl;
}

private void showHelp (CLIContext cli, String args[], Options options) {
PrintWriter pw = new PrintWriter (cli.getOutputStream());
HelpFormatter helpFormatter = new HelpFormatter ();
helpFormatter.printHelp (args[0] + "<nick>", options);
helpFormatter.printHelp(pw, HelpFormatter.DEFAULT_WIDTH, args[0], null, options, 0, HelpFormatter.DEFAULT_DESC_PAD, null,false);
}
}
30 changes: 30 additions & 0 deletions modules/eeuser/src/main/java/org/jpos/q2/cli/RMROLE.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.jpos.q2.cli;

import org.jpos.ee.DB;
import org.jpos.ee.Role;
import org.jpos.ee.RoleManager;
import org.jpos.q2.CLICommand;
import org.jpos.q2.CLIContext;

@SuppressWarnings("unused")
public class RMROLE implements CLICommand {
@Override
public void exec(CLIContext cli, String[] args) throws Exception {
if (args.length != 2) {
cli.println("Usage: rmrole <role>");
return;
}
try (DB db = new DB()) {
db.open();
db.beginTransaction();
RoleManager rm = new RoleManager(db);
Role r = rm.getRoleByName(args[1]);
if (r != null)
db.session().delete(r);
db.commit();
cli.println (r != null ? "Role " + r + " has been deleted" : "Role not found");
} catch (Exception e) {
cli.println (e.getMessage());
}
}
}
29 changes: 29 additions & 0 deletions modules/eeuser/src/main/java/org/jpos/q2/cli/RMUSER.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.jpos.q2.cli;

import org.jpos.ee.*;
import org.jpos.q2.CLICommand;
import org.jpos.q2.CLIContext;

@SuppressWarnings("unused")
public class RMUSER implements CLICommand {
@Override
public void exec(CLIContext cli, String[] args) throws Exception {
if (args.length != 2) {
cli.println("Usage: rmuser <user>");
return;
}
try (DB db = new DB()) {
db.open();
db.beginTransaction();
UserManager mgr = new UserManager(db);
User u = mgr.getUserByNick(args[1]);
if (u != null) {
u.setDeleted(true);
}
db.commit();
cli.println(u != null ? "User " + u.getNickAndId() + " has been deleted" : "User does not exist");
} catch (Exception e) {
cli.println(e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Usage: addrole <role> <permission 1> <permission 2> ... <permission n>
7 changes: 7 additions & 0 deletions modules/eeuser/src/main/resources/org/jpos/q2/cli/adduser.man
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Usage: rmrole <role>
q2> adduser
usage: adduser <nick>
-h,--help This help
-n,--name <arg> User's full name
-p,--password <arg> The password
-r,--role <arg> User role
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Usage: rmrole <role>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Usage: rmuser <user>
16 changes: 16 additions & 0 deletions modules/sysconfig/src/main/java/org/jpos/ee/SysConfigManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,22 @@ public String get (String name, String defaultValue) {
}
return defaultValue;
}

public boolean delete (String name) {
try {
if (prefix != null)
name = prefix + name;
SysConfig cfg = db.session().get (SysConfig.class, name);
if (cfg != null) {
db.session().delete(cfg);
return true;
}
} catch (HibernateException e) {
db.getLog().warn (e);
}
return false;
}

public SysConfig[] getAll (String queryString) {
SysConfig[] values;
try {
Expand Down

0 comments on commit 19cd00f

Please # to comment.