/** Some type specific calls */ @Override public void deleteUser(CallingContext context, String userName) { checkParameter("User", userName); // $NON-NLS-1$ // Assuming the userName is not "you", mark the user as inactive if (userName.equals(context.getUser())) { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoDeleteYourself")); // $NON-NLS-1$ } log.info(Messages.getString("Admin.RemovingUser") + userName); // $NON-NLS-1$ RaptureUser usr = getUser(context, userName); if (!usr.getInactive()) { if (usr.getHasRoot()) { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoDeleteRoot")); // $NON-NLS-1$ } usr.setInactive(true); RaptureUserStorage.add( usr, context.getUser(), Messages.getString("Admin.Made") + userName + Messages.getString("Admin.Inactive")); // $NON-NLS-1$ //$NON-NLS-2$ } }
@Override public void addUser( CallingContext context, String userName, String description, String hashPassword, String email) { checkParameter("User", userName); // $NON-NLS-1$ // Does the user already exist? RaptureUser usr = getUser(context, userName); if (usr == null) { usr = new RaptureUser(); usr.setUsername(userName); usr.setDescription(description); usr.setHashPassword(hashPassword); usr.setEmailAddress(email); RaptureUserHelper.validateSalt(usr); usr.setInactive(false); RaptureUserStorage.add( usr, context.getUser(), Messages.getString("Admin.AddedUser") + userName); // $NON-NLS-1$ } else { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.UserAlreadyExists")); // $NON-NLS-1$ } }
@Override public void deleteRemote(CallingContext context, String name) { RaptureRemoteStorage.deleteByFields( name, context.getUser(), Messages.getString("Admin.RemoveRemote")); // $NON-NLS-1$ //$NON-NLS-2$ }
@Override public void deleteArchiveConfig(CallingContext context, String raptureURIString) { RaptureURI addressURI = new RaptureURI(raptureURIString, Scheme.DOCUMENT); checkParameter(NAME, addressURI.getDocPath()); TypeArchiveConfigStorage.deleteByAddress( addressURI, context.getUser(), "Removed archive config"); }
/** The ip white list is a document that is stored in the settings repo */ @Override public void addIPToWhiteList(CallingContext context, String ipAddress) { RaptureIPWhiteList wlist = RaptureIPWhiteListStorage.readByFields(); wlist.getIpWhiteList().add(ipAddress); RaptureIPWhiteListStorage.add( wlist, context.getUser(), Messages.getString("Admin.AddedToWhiteList")); // $NON-NLS-1$ }
@Override public String publishNotification( CallingContext context, String referenceId, String content, String contentType) { String uuid = IDGenerator.getUUID(); NotificationInfo info = new NotificationInfo(); info.setId(uuid); info.setWho(context.getUser()); info.setContent(content); info.setReference(referenceId); info.setEpoch(currentEpoch); info.setWhen(new Date()); info.setContentType(contentType); info.setKernelId(context.getContext()); currentEpoch++; notifications.put(info.getEpoch(), info); notificationsById.put(info.getId(), info); return uuid; }
@Override public void putArchiveConfig( CallingContext context, String raptureURIString, TypeArchiveConfig config) { RaptureURI internalURI = new RaptureURI(raptureURIString, Scheme.DOCUMENT); checkParameter(NAME, internalURI.getDocPath()); config.setAuthority(internalURI.getAuthority()); config.setTypeName(internalURI.getDocPath()); TypeArchiveConfigStorage.add(config, context.getUser(), "Created type archive config"); }
@Override public void addMetadata(CallingContext context, Map<String, String> values, Boolean overwrite) { if ((values == null) || values.isEmpty()) return; Map<String, String> metadata = context.getMetadata(); if (metadata == null) metadata = new HashMap<String, String>(); for (String key : values.keySet()) { if (!overwrite && metadata.containsKey(key)) { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, key + " exists and overwrite was disallowed"); } metadata.put(key, values.get(key)); } context.setMetadata(metadata); getEphemeralRepo() .addToStage( RaptureConstants.OFFICIAL_STAGE, "session/" + context.getContext(), JacksonUtil.jsonFromObject(context), false); }
@Override public void cancelPasswordResetToken(CallingContext context, String username) { checkParameter("User", username); RaptureUser user = getUser(context, username); if (user == null) { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoExistUser")); // $NON-NLS-1$ } // expire token now user.setTokenExpirationTime(System.currentTimeMillis()); RaptureUserStorage.add( user, context.getUser(), "Cancel password reset token for user " + username); // $NON-NLS-1$ }
@Override public void updateUserEmail(CallingContext context, String userName, String newEmail) { checkParameter("User", userName); // $NON-NLS-1$ RaptureUser user = getUser(context, userName); if (user != null) { user.setEmailAddress(newEmail); RaptureUserStorage.add( user, context.getUser(), Messages.getString("Admin.UpdateEmail") + userName); } else { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoExistUser")); // $NON-NLS-1$ } }
private void process( Map<String, String> parameterMap, HttpServletRequest req, HttpServletResponse resp) throws IOException { logger.debug("req is " + req); logger.debug("resp is " + resp); logger.debug("parameterMap is " + parameterMap); // check script exists RaptureURI scriptURI = getScriptURI(req); logger.info(String.format("Running script for uri %s", scriptURI.toString())); RaptureScript script = Kernel.getScript().getScript(ContextFactory.ADMIN, scriptURI.toString()); if (script == null || StringUtils.isBlank(script.getScript())) { logger.warn("Could not locate script for uri - " + scriptURI.toString()); resp.setStatus(HttpStatus.SC_NOT_FOUND); return; } // run JavaScript try { CallingContext context = BaseDispatcher.validateSession(req); if (context != null) { logger.trace("Got session context " + context.debug()); String result = Kernel.getScript().runScript(context, scriptURI.getFullPath(), parameterMap); resp.setCharacterEncoding("UTF-8"); resp.getWriter().append(result); resp.setContentType("text/plain"); } else { String err = "Cannot execute script " + script + " : cannot get session context for authorization"; logger.error(err); resp.sendError(HttpURLConnection.HTTP_UNAUTHORIZED, err); } } catch (RaptNotLoggedInException re) { logger.error("Cannot execute script " + script + " : " + re.getMessage()); resp.sendError(re.getStatus(), re.getMessage()); } }
@Override public void updateRemoteApiKey(CallingContext context, String name, String apiKey) { checkParameter(NAME, name); checkParameter("ApiKey", apiKey); // $NON-NLS-1$ RaptureRemote ret = Kernel.INSTANCE.getRemote(name); if (ret == null) { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoFindRemote") + name); // $NON-NLS-1$ } else { ret.setApiKey(apiKey); RaptureRemoteStorage.add( ret, context.getUser(), Messages.getString("Admin.UpdatedApi")); // $NON-NLS-1$ } }
@Override public NotificationResult findNotificationsAfterEpoch( CallingContext context, Long lastEpochSeen) { NotificationResult result = new NotificationResult(currentEpoch); for (long epoch = lastEpochSeen; epoch < currentEpoch; epoch++) { NotificationInfo info = notifications.get(epoch); String originKernelId = info.getKernelId(); // prevent kernel from receiving notifications from itself, which can cause race conditions if (originKernelId != null && originKernelId.equals(context.getContext())) { continue; } result.addId(info.getId()); } return result; }
@Override public void restoreUser(CallingContext context, String userName) { checkParameter("User", userName); // $NON-NLS-1$ log.info(Messages.getString("Admin.RestoringUser") + userName); // $NON-NLS-1$ RaptureUser usr = getUser(context, userName); if (usr.getInactive()) { usr.setInactive(false); RaptureUserStorage.add( usr, context.getUser(), Messages.getString("Admin.Made") + userName + Messages.getString("Admin.Active")); // $NON-NLS-1$ //$NON-NLS-2$ } }
@Override public void destroyUser(CallingContext context, String userName) { checkParameter("User", userName); // $NON-NLS-1$ log.info("Destroying user: "******"User '" + userName + "' not found. Cannot destroy"; log.error(error); throw RaptureExceptionFactory.create("User '" + userName + "' not found. Cannot destroy"); } if (usr.getInactive()) { String error = "User '" + userName + "' has not been disabled. Cannot Destroy"; log.error(error); throw RaptureExceptionFactory.create(error); } RaptureUserStorage.deleteByFields(userName, context.getUser(), "Destroying user record"); }
@Override public String createPasswordResetToken(CallingContext context, String username) { checkParameter("User", username); RaptureUser user = getUser(context, username); if (user == null) { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoExistUser")); // $NON-NLS-1$ } String token = generateSecureToken(); user.setPasswordResetToken(token); user.setTokenExpirationTime(DateTime.now().plusDays(1).getMillis()); RaptureUserStorage.add( user, context.getUser(), "Generate password reset token for user " + username); // $NON-NLS-1$ return token; }
@Override public void resetUserPassword(CallingContext context, String userName, String newHashPassword) { checkParameter("User", userName); // $NON-NLS-1$ checkParameter("Password", newHashPassword); // $NON-NLS-1$ // Set a new password for this user RaptureUser usr = getUser(context, userName); if (usr != null) { usr.setInactive(false); usr.setHashPassword(newHashPassword); RaptureUserStorage.add( usr, context.getUser(), Messages.getString("Admin.PasswordChange") + userName); // $NON-NLS-1$ } else { throw RaptureExceptionFactory.create( HttpURLConnection.HTTP_BAD_REQUEST, Messages.getString("Admin.NoExistUser")); // $NON-NLS-1$ } }
@Override public RaptureUser generateApiUser(CallingContext context, String prefix, String description) { // Special treatment of prefix "debug" checkParameter("Prefix", prefix); // $NON-NLS-1$ String userId = "zz-" + prefix; // $NON-NLS-1$ if (!prefix.equals("debug")) { // $NON-NLS-1$ userId = prefix + "-" + IDGenerator.getUUID(); // $NON-NLS-1$ } RaptureUser usr = new RaptureUser(); usr.setUsername(userId); usr.setDescription(description); usr.setHashPassword(""); // $NON-NLS-1$ usr.setInactive(false); usr.setApiKey(true); RaptureUserStorage.add( usr, context.getUser(), Messages.getString("Admin.CreatedApi")); // $NON-NLS-1$ return usr; }
@Override public RaptureRemote addRemote( CallingContext context, String name, String description, String url, String apiKey, String optPass) { checkParameter(NAME, name); checkParameter("Url", url); // $NON-NLS-1$ checkParameter("ApiKey", apiKey); // $NON-NLS-1$ RaptureRemote ret = new RaptureRemote(); ret.setName(name); ret.setDescription(description); ret.setUrl(url); ret.setApiKey(apiKey); ret.setOptionalPass(optPass); RaptureRemoteStorage.add( ret, context.getUser(), Messages.getString("Admin.AddRemote")); // $NON-NLS-1$ return ret; }
private void putEnvInfo(CallingContext context, EnvironmentInfo info) { EnvironmentInfoStorage.add(info, context.getUser(), "Updated environment info"); }