aboutsummaryrefslogblamecommitdiffstats
path: root/etherpad/src/etherpad/pad/padevents.js
blob: 52b303ceb592b3dd872cb8118e8cb0394288c580 (plain) (tree)









































































































































































                                                                                   
/**
 * Copyright 2009 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// src/etherpad/events.js

import("etherpad.licensing");
import("etherpad.log");
import("etherpad.pad.chatarchive");
import("etherpad.pad.activepads");
import("etherpad.pad.padutils");
import("etherpad.sessions");
import("etherpad.pro.pro_padmeta");
import("etherpad.pro.pro_pad_db");
import("etherpad.pad.padusers");
import("etherpad.pad.pad_security");
import("etherpad.pad.noprowatcher");
import("etherpad.collab.collab_server");
jimport("java.lang.System.out.println");

function onNewPad(pad) {
  log.custom("padevents", {
    type: "newpad",
    padId: pad.getId()
  });
  pro_pad_db.onCreatePad(pad);
}

function onDestroyPad(pad) {
  log.custom("padevents", {
    type: "destroypad",
    padId: pad.getId()
  });
  pro_pad_db.onDestroyPad(pad);
}

function onUserJoin(pad, userInfo) {
  log.callCatchingExceptions(function() {

    var name = userInfo.name || "unnamed";
    log.custom("padevents", {
      type: "userjoin",
      padId: pad.getId(),
      username: name,
      ip: userInfo.ip,
      userId: userInfo.userId
    });
    activepads.touch(pad.getId());
    licensing.onUserJoin(userInfo);
    log.onUserJoin(userInfo.userId);
    padusers.notifyActive();
    noprowatcher.onUserJoin(pad, userInfo);

  });
}

function onUserLeave(pad, userInfo) {
  log.callCatchingExceptions(function() {

    var name = userInfo.name || "unnamed";
    log.custom("padevents", {
      type: "userleave",
      padId: pad.getId(),
      username: name,
      ip: userInfo.ip,
      userId: userInfo.userId
    });
    activepads.touch(pad.getId());
    licensing.onUserLeave(userInfo);
    noprowatcher.onUserLeave(pad, userInfo);

  });
}

function onUserInfoChange(pad, userInfo) {
  log.callCatchingExceptions(function() {

    activepads.touch(pad.getId());

  });
}

function onClientMessage(pad, senderUserInfo, msg) {
  var padId = pad.getId();
  activepads.touch(padId);

  if (msg.type == "chat") {

    chatarchive.onChatMessage(pad, senderUserInfo, msg);

    var name = "unnamed";
    if (senderUserInfo.name) {
      name = senderUserInfo.name;
    }

    log.custom("chat", {
      padId: padId,
      userId: senderUserInfo.userId,
      username: name,
      text: msg.lineText
    });
  }
  else if (msg.type == "padtitle") {
    if (msg.title && padutils.isProPadId(pad.getId())) {
      pro_padmeta.accessProPad(pad.getId(), function(propad) {
        propad.setTitle(String(msg.title).substring(0, 80));
      });
    }
  }
  else if (msg.type == "padpassword") {
    if (padutils.isProPadId(pad.getId())) {
      pro_padmeta.accessProPad(pad.getId(), function(propad) {
        propad.setPassword(msg.password || null);
      });
    }
  }
  else if (msg.type == "padoptions") {
    // options object is a full set of options or just
    // some options to change
    var opts = msg.options;
    var padOptions = pad.getPadOptionsObj();
    if (opts.view) {
      if (! padOptions.view) {
        padOptions.view = {};
      }
      for(var k in opts.view) {
        padOptions.view[k] = opts.view[k];
      }
    }
    if (opts.guestPolicy) {
      padOptions.guestPolicy = opts.guestPolicy;
      if (opts.guestPolicy == 'deny') {
        // boot guests!
        collab_server.bootUsersFromPad(pad, "unauth", function(userInfo) {
          return padusers.isGuest(userInfo.userId); }).forEach(function(userInfo) {
            pad_security.revokePadUserAccess(padId, userInfo.userId); });
      }
    }
  }
  else if (msg.type == "guestanswer") {
    if ((! msg.authId) || padusers.isGuest(msg.authId)) {
      // not a pro user, forbid.
    }
    else {
      pad_security.answerKnock(msg.guestId, padId, msg.answer);
    }
  }
}

function onEditPad(pad, authorId) {
  log.callCatchingExceptions(function() {

    pro_pad_db.onEditPad(pad, authorId);

  });
}