/* * The MIT License * * Copyright 2014 Jason Unger <entityreborn@gmail.com>. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.entityreborn.socpuppet.extensions.builtins; import com.entityreborn.socbot.events.PrivmsgEvent; import com.entityreborn.socpuppet.SocPuppet; import com.entityreborn.socpuppet.extensions.AbstractTrigger; import com.entityreborn.socpuppet.extensions.annotations.Permission; import com.entityreborn.socpuppet.extensions.annotations.Trigger; import com.entityreborn.socpuppet.users.RegisteredUser; import com.entityreborn.socpuppet.users.SocPuppetUser; import com.entityreborn.socpuppet.users.UserException; import com.entityreborn.socpuppet.users.UserManager; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Jason Unger <entityreborn@gmail.com> */ public class Permissions { @Trigger(name="login", id="core.user.login") public static class login extends AbstractTrigger { @Override public String exec(PrivmsgEvent event, String trigger, String args) { if (!(event.getUser() instanceof SocPuppetUser)) { return null; } SocPuppetUser user = (SocPuppetUser)event.getUser(); String[] parts = args.split(" ", 2); try { if (parts.length == 1) { String username = event.getSender().getName(); user.attemptLogin(username, parts[0]); } else { user.attemptLogin(parts[0], parts[1]); } return "Successfully logged in."; } catch (UserException.IncorrectPassword | UserException.UnknownUser ex) { return "Incorrect password or unknown user."; } catch (Exception ex) { return "Error ocurred during login: " + ex.getMessage(); } } @Override public String docs() { return "login [username] <password> - Login to the bot." + " Username is optional, and defaults to your nick."; } } @Trigger(name="register", id="core.user.register") public static class register extends AbstractTrigger { @Override public String exec(PrivmsgEvent event, String trigger, String args) { if (!(event.getUser() instanceof SocPuppetUser)) { return null; } SocPuppetUser user = (SocPuppetUser)event.getUser(); boolean isGlobal = args.startsWith("--global"); if (isGlobal) { args = args.replaceFirst("^--global\\s+", ""); } String[] parts = args.split(" ", 3); // username, email, password if (parts.length != 3) { return docs(); } UserManager manager; if (!isGlobal) { manager = UserManager.get((SocPuppet) user.getBot()); } else { manager = UserManager.get(null); } try { manager.registerUser(parts[0], parts[2], parts[1]); } catch (UserException.UserExists ex) { return "That user already exists!"; } catch (UserException.UserRegistrationException ex) { return "Error ocurred during registration: " + ex.getMessage(); } return "Successfully registered! Use ^login to log in."; } @Override public String docs() { return "register <username> <email> <password>"; } } @Trigger(name="hasperm", id="core.user.perms.has") public static class hasperm extends AbstractTrigger { @Override public String exec(PrivmsgEvent event, String trigger, String args) { if (!(event.getUser() instanceof SocPuppetUser)) { return null; } String[] parts = args.split(" "); UserManager manager = UserManager.get((SocPuppet) event.getBot()); RegisteredUser user; try { user = manager.getUser(parts[0]); } catch (UserException.UnknownUser ex) { return "Unknown user"; } String relative = user.getRelativePerm(parts[1]); if (relative != null) { if (!relative.equalsIgnoreCase(parts[1])) { return "Yep, provided by '" + relative + "'!"; } else { return "Yep!"; } } return "Nope"; } @Override public String docs() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } } @Trigger(name="addperm", id="core.user.perms.add") @Permission(node="core.user.perms.add") public static class addperm extends AbstractTrigger { @Override public String exec(PrivmsgEvent event, String trigger, String args) { if (!(event.getUser() instanceof SocPuppetUser)) { return null; } String[] parts = args.split(" "); UserManager manager = UserManager.get((SocPuppet) event.getBot()); RegisteredUser user; try { user = manager.getUser(parts[0]); } catch (UserException.UnknownUser ex) { return "Unknown user"; } String relative = user.getRelativePerm(parts[1]); if (relative != null) { if (relative.equalsIgnoreCase(parts[1])) { return "User already has that perm!"; } else { return "User already has that perm, provided by '" + relative + "'!"; } } user.addPerm(parts[1]); try { user.update(); } catch (SQLException ex) { Logger.getLogger(SocBotCore.class.getName()).log(Level.SEVERE, null, ex); } return "Done"; } @Override public String docs() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } } @Trigger(name="addmask", id="core.user.masks.add") public static class addmask extends AbstractTrigger { @Override public String exec(PrivmsgEvent event, String trigger, String args) { if (!(event.getUser() instanceof SocPuppetUser)) { return null; } SocPuppetUser user = (SocPuppetUser)event.getUser(); if (user.getRegistration() == null) { return "You need to be logged in to do that!"; } RegisteredUser registration; try { registration = UserManager.get(null).getUser(user.getName()); } catch (UserException.UnknownUser ex) { return "Unknown user registration"; } if (registration.getAuthMasks().contains(user.getHostmask())) { return "User already has that mask!"; } registration.addAuthMask(user.getHostmask()); try { registration.update(); } catch (SQLException ex) { Logger.getLogger(SocBotCore.class.getName()).log(Level.SEVERE, null, ex); } return "Done"; } @Override public String docs() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } } @Trigger(name="remperm", id="core.user.perms.remove") @Permission(node="core.user.perms.remove") public static class remperm extends AbstractTrigger { @Override public String exec(PrivmsgEvent event, String trigger, String args) { if (!(event.getUser() instanceof SocPuppetUser)) { return null; } String[] parts = args.split(" "); UserManager manager = UserManager.get((SocPuppet) event.getBot()); RegisteredUser user; try { user = manager.getUser(parts[0]); } catch (UserException.UnknownUser ex) { return "Unknown user"; } String relative = user.getRelativePerm(parts[1]); if (relative != null) { if (!relative.equalsIgnoreCase(parts[1])) { return "User has that perm, but it is provided by '" + relative + "'. Remove that perm instead."; } } user.removePerm(parts[1]); try { user.update(); } catch (SQLException ex) { Logger.getLogger(SocBotCore.class.getName()).log(Level.SEVERE, null, ex); } return "Done"; } @Override public String docs() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } } }