public Server(int port) {
    enc = null;
    dec = null;
    char[] password = null;
    char[] passwordcopy = null;
    try {
      password = PrivateKeyHandler.checkPassword(GenerateKeys.getPasswordInput());
      if (password == null) {
        System.err.println("Please enter admin password to start the server");
        System.exit(1);
      }
      passwordcopy = Arrays.copyOf(password, password.length);
      this.network = new ServerNetworkWrapper(port, password);
      dec = LoginManager.load(password);
      enc = LoginManager.save(passwordcopy);
    } finally {
      if (password != null) {
        for (int i = 0; i < password.length; i++) {
          password[i] = '\0';
          passwordcopy[i] = '\0';
        }
      }
    } // In-case LoginManager.load isn't reached

    challengeHanlder = new ChallengeHandler();
  }
  /**
   * Publish present status. We search for the highest value in the given interval.
   *
   * @param protocolProvider the protocol provider to which we change the status.
   * @param status the status tu publish.
   */
  public void publishStatus(
      ProtocolProviderService protocolProvider, PresenceStatus status, boolean rememberStatus) {
    OperationSetPresence presence = protocolProvider.getOperationSet(OperationSetPresence.class);

    LoginManager loginManager = GuiActivator.getUIService().getLoginManager();
    RegistrationState registrationState = protocolProvider.getRegistrationState();

    if (registrationState == RegistrationState.REGISTERED
        && presence != null
        && !presence.getPresenceStatus().equals(status)) {
      if (status.isOnline()) {
        new PublishPresenceStatusThread(protocolProvider, presence, status).start();
      } else {
        loginManager.setManuallyDisconnected(true);
        GuiActivator.getUIService().getLoginManager().logoff(protocolProvider);
      }
    } else if (registrationState != RegistrationState.REGISTERED
        && registrationState != RegistrationState.REGISTERING
        && registrationState != RegistrationState.AUTHENTICATING
        && status.isOnline()) {
      GuiActivator.getUIService().getLoginManager().login(protocolProvider);
    } else if (!status.isOnline() && !(registrationState == RegistrationState.UNREGISTERING)) {
      loginManager.setManuallyDisconnected(true);
      GuiActivator.getUIService().getLoginManager().logoff(protocolProvider);
    }

    if (rememberStatus) saveStatusInformation(protocolProvider, status.getStatusName());
  }
 private void refresh() {
   PersonList.removeAllItems();
   PersonList.addItem(null);
   for (Person p : LoginManager.getPersons()) {
     PersonList.addItem(p);
   }
   CourseList.removeAllItems();
   CourseList.addItem(null);
   for (Course c : LoginManager.getCourses()) {
     CourseList.addItem(c);
   }
 }
  private Object[] Newuser(Message m) {
    int sessID = (int) m.msg[m.msg.length - 1];
    char[] pw = null;
    Object[] rms = null;
    try {
      String userName = (String) m.msg[0];
      pw = (char[]) m.msg[1];
      String name = (String) m.msg[2];
      for (Person p : LoginManager.getPersons()) {
        if (p.getUsername().equals(userName)) {
          rms =
              new Object[] {
                Message.Type.Failed.toString().toCharArray(),
                "Username already exists".toCharArray()
              };
          network.sendMessage(rms, sessID);
          return rms;
        }
      }
      if (Person.checkPasswordValidity(pw)) {
        Person p =
            new Person(
                name,
                userName,
                pw,
                new Recovery((int) m.msg[3], (char[]) m.msg[4], (int) m.msg[5], (char[]) m.msg[6]));
        LoginManager.put(p.getPID(), p);
        LoginManager.save(enc);
        rms =
            new Object[] {
              Message.Type.NewuserResponse.toString().toCharArray(),
              userName.toCharArray(),
              "success".toCharArray()
            };
        network.sendMessage(rms, sessID);
      } else {

        rms =
            new Object[] {
              Message.Type.Failed.toString().toCharArray(), "Invalid password".toCharArray()
            };
        network.sendMessage(rms, sessID);
      }
    } finally {
      if (pw != null) {
        for (int i = 0; i < pw.length; i++) {
          pw[i] = '\0';
        }
      }
    }
    return rms;
  }
  private void addCourse() {

    JTextField pf = new JTextField();
    int okCxl =
        JOptionPane.showConfirmDialog(
            null, pf, "Enter Course Name", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
    String courseName = null;
    if (okCxl == JOptionPane.OK_OPTION) {
      courseName = new String(pf.getText());
    } else {
      return;
    }
    JComboBox<Person> profList = new JComboBox<Person>();
    profList.addItem(null);
    for (Person p : LoginManager.getPersons()) {
      profList.addItem(p);
    }
    okCxl =
        JOptionPane.showConfirmDialog(
            null,
            profList,
            "Select Professor",
            JOptionPane.OK_CANCEL_OPTION,
            JOptionPane.PLAIN_MESSAGE);
    Person prof = null;
    if (okCxl == JOptionPane.OK_OPTION) {
      prof = (Person) profList.getSelectedItem();
    } else {
      return;
    }
    Course c = new Course(courseName, prof);
    char[] password = null;
    try {
      password =
          PrivateKeyHandler.checkPassword(
              GenerateKeys.getPasswordInput()); // This window shows garbage
      if (password == null) {
        System.err.println("Please enter admin password to apply changes");
        return;
      }
      LoginManager.putCourse(c.getCID(), c);
      enc = LoginManager.save(password);
    } finally {
      if (password != null) {
        for (int i = 0; i < password.length; i++) {
          password[i] = '\0';
        }
      }
    }
  }
Beispiel #6
0
  private int preSnipe() {
    UpdateBlocker.startBlocking();
    mEntry.setLastStatus("Preparing snipe.");
    //  Log in
    mCJ = mLogin.getSignInCookie(null);
    if (mCJ == null) {
      //  Alert somebody that we couldn't log in?
      mEntry.setLastStatus(
          "Pre-snipe login failed.  Snipe will be retried, but is unlikely to fire.");
      MQFactory.getConcrete("Swing").enqueue("NOTIFY Pre-snipe login failed.");
      JConfig.log().logDebug("Pre-snipe login failed.");
      UpdateBlocker.endBlocking();
      return RESNIPE;
    }

    int presnipeResult = SUCCESSFUL;

    //  Get Bid Key/Form
    try {
      JConfig.increment("stats.presniped");
      mBidForm = mBidder.getBidForm(mCJ, mEntry, mEntry.getSnipeAmount());
    } catch (BadBidException bbe) {
      String result = getSnipeResult(bbe.getResult(), mEntry.getTitle(), mEntry);
      mEntry.setLastStatus(result);
      MQFactory.getConcrete("Swing").enqueue("NOTIFY " + result);
      JConfig.log().logDebug(result);
      presnipeResult = FAIL;
    }
    UpdateBlocker.endBlocking();

    return presnipeResult;
  }
 private Message AddAssignment(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person adder = LoginManager.get(userName); // get id of person doing the adding
   String name = (String) m.msg[0];
   String desc = (String) m.msg[1];
   int cid = ((Course) m.msg[2]).getCID(); // cid of course
   Course c = LoginManager.getCourse(cid);
   HashMap<Integer, Person> TAs = c.getTAs();
   if (c.addAssignment(name, desc, adder.getPID()))
     rm = new Message(Message.Type.AddAssignmentResponse, true);
   else rm = new Message(Message.Type.AddAssignmentResponse, false);
   enc = LoginManager.save(enc);
   network.sendMessage(rm, sessID);
   return rm;
 }
 public Message RemoveAssignment(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person remover = LoginManager.get(userName); // get id of person doing the adding
   int asid = (Integer) m.msg[0];
   int cid = ((Course) m.msg[1]).getCID(); // cid of course
   Assignment beingRemoved = LoginManager.getCourse(cid).getAssignment(asid);
   Course c = LoginManager.getCourse(cid);
   HashMap<Integer, Person> TAs = c.getTAs();
   if (c.removeAssignment(asid, remover.getPID()))
     rm = new Message(Message.Type.RemoveAssignmentResponse, true);
   else rm = new Message(Message.Type.RemoveAssignmentResponse, false);
   enc = LoginManager.save(enc);
   network.sendMessage(rm, sessID);
   return rm;
 }
 private Message RemoveMember(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person remover = LoginManager.get(userName); // get id of person doing the removing
   String removeUsername = (String) m.msg[0];
   int cid = ((Course) m.msg[1]).getCID(); // cid of course
   Person beingRemoved = LoginManager.get((removeUsername));
   Course c = LoginManager.getCourse(cid);
   HashMap<Integer, Person> TAs = c.getTAs();
   if (c.removeFromRoster(beingRemoved, remover.getPID()))
     rm = new Message(Message.Type.RemoveMemberResponse, true);
   else rm = new Message(Message.Type.RemoveMemberResponse, false);
   enc = LoginManager.save(enc);
   network.sendMessage(rm, sessID);
   return rm;
 }
Beispiel #10
0
  public void editLastName(String lastName)
      throws PrivilegeInsufficientException, DoesNotExistException {

    User loggedInUser = logInManager.getLoggedInUser();
    if (PrivilegeManager.hasUserPrivilege(loggedInUser, selectedUser)) {
      selectedUser.setLastName(lastName);
      usersTable.setLastName(selectedUser.getUserId(), lastName);
    }
  }
Beispiel #11
0
  public void editAddress(Address address)
      throws PrivilegeInsufficientException, DoesNotExistException {

    User loggedInUser = logInManager.getLoggedInUser();
    if (PrivilegeManager.hasUserPrivilege(loggedInUser, selectedUser)) {
      selectedUser.setAddress(address);
      usersTable.setAddress(selectedUser.getUserId(), address);
    }
  }
Beispiel #12
0
  public void editPhoneNumber(PhoneNumber phoneNumber)
      throws PrivilegeInsufficientException, DoesNotExistException {

    User loggedInUser = logInManager.getLoggedInUser();
    if (PrivilegeManager.hasUserPrivilege(loggedInUser, selectedUser)) {
      selectedUser.setPhoneNumber(phoneNumber);
      usersTable.setPhone(selectedUser.getUserId(), phoneNumber.toString());
    }
  }
Beispiel #13
0
  public void editEventCreationPrivilege(boolean eventCreationPrivilege)
      throws PrivilegeInsufficientException, DoesNotExistException {

    User loggedInUser = logInManager.getLoggedInUser();
    if (PrivilegeManager.hasAdminPrivilege(loggedInUser)) {
      selectedUser.setEventCreationPrivilege(eventCreationPrivilege);
      usersTable.setLevel(selectedUser.getUserId(), eventCreationPrivilege == true ? 1 : 0);
    }
  }
 public void initManager(final LoginManager loginManager) {
   loginButton.setOnAction(
       (event) -> {
         String sessionID = authorize();
         if (sessionID != null) {
           loginManager.authenticated(sessionID);
         }
       });
 }
 private Message CourseRequest(Message m) {
   int sessID = (int) m.msg[m.msg.length - 1];
   Message rm = null;
   Object returnmsg = null;
   int cid = ((Course) m.msg[0]).getCID();
   Course course = LoginManager.getCourse(cid);
   returnmsg = course;
   rm = new Message(Message.Type.CourseResponse, returnmsg);
   network.sendMessage(rm, sessID);
   return rm;
 }
Beispiel #16
0
  public void editPassword(String password, String passwordMatch)
      throws IllegalCharacterException, PasswordMismatchError, PrivilegeInsufficientException,
          DoesNotExistException, InvalidKeyException, UnsupportedEncodingException,
          IllegalBlockSizeException, BadPaddingException {

    User loggedInUser = logInManager.getLoggedInUser();
    if (PrivilegeManager.hasUserPrivilege(loggedInUser, selectedUser)) {
      selectedUser.setPassword(password, passwordMatch);
      usersTable.setPwd(selectedUser.getUserId(), password);
    }
  }
Beispiel #17
0
  public synchronized void gcmSetup(Activity activity) {
    LoginManager loginManager = new LoginManager(context);
    Log.i(LOG_TAG, "Setting up GCM");

    if (checkPlayServices()) {

      GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);

      String regid = loginManager.getRegistrationId();

      Log.i(LOG_TAG, "Current registration ID on device: " + regid);

      if (regid.isEmpty() || regid == null) {
        RegisterGcmTask gcmTask = new RegisterGcmTask(activity);
        gcmTask.execute();
      }
    } else {
      Log.i(LOG_TAG, "No valid Google Play Services APK found.");
    }

    if (loginManager.checkLogin()) activity.finish();
  }
 // grader requests
 private Message AddMember(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person adder = LoginManager.get(userName); // get id of person doing the adding
   String addUsername = (String) m.msg[0];
   int cid = ((Course) m.msg[2]).getCID(); // cid of course
   String type = (String) m.msg[1];
   Person beingAdded = LoginManager.get((addUsername));
   Course c = LoginManager.getCourse(cid);
   HashMap<Integer, Person> TAs = c.getTAs();
   boolean added = false;
   if (type.equals("Student")) added = c.addToRoster(beingAdded, adder.getPID());
   else if (type.equals("TA")) added = c.addToTAs(beingAdded, adder.getPID());
   else // is null or unknown ptype
   added = false;
   if (added) rm = new Message(Message.Type.AddMemberResponse, true);
   else rm = new Message(Message.Type.AddMemberResponse, false);
   enc = LoginManager.save(enc);
   network.sendMessage(rm, sessID);
   return rm;
 }
 public Message EditAssignment(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person editor = LoginManager.get(userName); // get id of person doing the adding
   int asid = (Integer) m.msg[0];
   String newname = (String) m.msg[1];
   String newdesc = (String) m.msg[2];
   int cid = ((Course) m.msg[3]).getCID(); // cid of course
   Course c = LoginManager.getCourse(cid);
   Assignment editassign = c.getAssignment(asid);
   HashMap<Integer, Person> TAs = c.getTAs();
   if (editassign == null) {
     rm = new Message(Message.Type.EditAssignmentResponse, false);
   } else {
     editassign.setName(newname);
     editassign.setDesc(newdesc);
     rm = new Message(Message.Type.EditAssignmentResponse, true);
   }
   enc = LoginManager.save(enc);
   network.sendMessage(rm, sessID);
   return rm;
 }
 private Message CoursesRequest(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person p = LoginManager.get(userName);
   if (p != null)
     rm =
         new Message(
             Message.Type.CoursesRequestResponse,
             true,
             p.getCourses().values().toArray(new Course[0]));
   else rm = new Message(Message.Type.CoursesRequestResponse, false);
   network.sendMessage(rm, sessID);
   return rm;
 }
 public Message EditAssignmentGrade(Message m) {
   Message rm = null;
   int sessID = (int) m.msg[m.msg.length - 1];
   String userName = network.getUserName(sessID);
   Person grader = LoginManager.get(userName); // get id of person doing the adding
   int asid = (Integer) m.msg[0];
   String gradeUserName = (String) m.msg[3];
   double newgrade = Double.parseDouble((String) m.msg[1]);
   String newcomments = (String) m.msg[2];
   int cid = ((Course) m.msg[4]).getCID(); // cid of course
   Course c = LoginManager.getCourse(cid);
   Person beingGraded = LoginManager.get((gradeUserName));
   Assignment gradeassign = c.getAssignment(asid);
   HashMap<Integer, Person> TAs = c.getTAs();
   if (gradeassign == null) {
     rm = new Message(Message.Type.EditAssignmentGradeResponse, false);
   } else {
     gradeassign.setGrade(grader, beingGraded, newgrade, newcomments);
     rm = new Message(Message.Type.EditAssignmentGradeResponse, true);
   }
   enc = LoginManager.save(enc);
   network.sendMessage(rm, sessID);
   return rm;
 }
  public Message LoginResponse(Message m) {
    int sessID = (int) m.msg[m.msg.length - 1];
    char[] pw = null;
    Message rm = null;
    try {
      String userName = (String) m.msg[0];
      pw = (char[]) m.msg[1];
      Integer userNonce = (Integer) m.msg[2];
      Challenge userPrevNonce = challengeHanlder.getChallege(sessID);
      Person user = null;
      if (userPrevNonce.nonce + 1 == userNonce) {
        for (Person p : LoginManager.getPersons()) {
          if (p.getUsername().equals(userName)) {
            user = p;
            break;
          }
        }

        // System.out.println("In server, user.checkLogin(pw): "+ user.checkLogin(pw));

        if (user != null && user.checkLogin(pw)) {
          LoginResponse lr = new LoginResponse(true, user);
          rm = new Message(Message.Type.Authenticated, lr);
          network.setAuthentication(
              (SecretKey) m.msg[3], (SecretKey) m.msg[4], (int) m.msg[m.msg.length - 1], userName);
          network.sendMessage(rm, sessID);
        } else {
          rm = new Message(Message.Type.Failed, "Login failed");
          network.setAuthentication(
              (SecretKey) m.msg[3], (SecretKey) m.msg[4], (int) m.msg[m.msg.length - 1], userName);
          network.sendMessage(rm, (int) m.msg[m.msg.length - 1]);
          network.setAuthentication(null, null, sessID, "");
        }
      }
    } finally {
      if (pw != null) {
        for (int i = 0; i < pw.length; i++) {
          pw[i] = '\0';
        }
      }
    }

    return rm;
  }
  private Object[] RecoveryQResponse(Message m) {
    int sessID = (int) m.msg[m.msg.length - 1];
    Challenge challenge = challengeHanlder.getChallege(sessID);
    String userName = String.valueOf(m.msg[0]);
    int userR = (int) m.msg[4];
    Object[] rms = null;
    if (challenge.nonce + 1 == userR) {
      Person p = LoginManager.get(userName);
      char[] pw = (char[]) m.msg[3];
      if (p != null && p.checkRecovery((char[]) m.msg[1], (char[]) m.msg[2])) {
        if (Person.checkPasswordValidity(pw)) {
          p.resetPassword(pw);
          rms =
              new Object[] {
                Message.Type.Recovered.name().toCharArray(),
                "Password change completed".toCharArray()
              };
          network.sendMessage(rms, sessID);
          return rms;
        } else {
          rms =
              new Object[] {
                Message.Type.Failed.name().toCharArray(), "New Password is invalid".toCharArray()
              };
          network.sendMessage(rms, sessID);
          return rms;
        }

      } else {
        rms =
            new Object[] {Message.Type.Failed.name().toCharArray(), "wrong answers".toCharArray()};
        network.sendMessage(rms, sessID);
        return rms;
      }
    }
    rms =
        new Object[] {
          Message.Type.Failed.name().toCharArray(), "Password change failed".toCharArray()
        };
    network.sendMessage(rms, sessID);

    return rms;
  }
 private Object[] RecoveryQ(Message m) {
   int sessID = (int) m.msg[m.msg.length - 1];
   Object[] rms = null;
   Challenge reoveryChallenge = challengeHanlder.generateChallenge(sessID);
   boolean success = challengeHanlder.checkChallenge(reoveryChallenge);
   if (success) {
     String userName = (String) m.msg[0];
     Person p = LoginManager.get(userName);
     if (p != null) {
       int qIDs[] = p.getQID();
       rms =
           new Object[] {
             Message.Type.RecoveryQResponse.name().toCharArray(),
             String.valueOf(qIDs[0]).toCharArray(),
             String.valueOf(qIDs[1]).toCharArray(),
             String.valueOf(reoveryChallenge.nonce).toCharArray()
           };
       network.sendMessage(rms, sessID);
       return rms;
     } else {
       rms =
           new Object[] {
             Message.Type.Failed.name().toCharArray(), "UserName invalid".toCharArray()
           };
       network.sendMessage(rms, sessID);
       return rms;
     }
   } else {
     rms =
         new Object[] {
           Message.Type.Failed.name().toCharArray(),
           "tried too many, wait for 2 mins".toCharArray()
         };
     network.sendMessage(rms, sessID);
     return rms;
     // no response.. ignore, the request.
   }
 }
 private Message AssignmentRequest(Message m) { // never called apparently
   int sessID = (int) m.msg[m.msg.length - 1];
   int acid = ((Course) m.msg[1]).getCID();
   int asid = (Integer) m.msg[2];
   Assignment as = null;
   Message rm = null;
   Object returnmsg = null;
   try {
     LoginManager.getCourse(acid).getAssignment(asid);
   } catch (NullPointerException e) {
     System.out.println("Course no longer exists!"); // if you
     // try to
     // access
     // assignment
     // of a
     // deleted
     // course
   }
   returnmsg = as;
   rm = new Message(Message.Type.AssignmentResponse, returnmsg);
   network.sendMessage(rm, sessID);
   return rm;
 }
 private void apply() {
   String action = (String) StatusList.getSelectedItem();
   Person p = (Person) PersonList.getSelectedItem();
   Course c = (Course) CourseList.getSelectedItem();
   if (!checkValidAction(action, p, c)) {
     System.err.println("Invalid action... Ignoring...");
     return;
   }
   StatusList.setSelectedIndex(0);
   PersonList.setSelectedIndex(0);
   CourseList.setSelectedIndex(0);
   char[] password = null;
   try {
     password =
         PrivateKeyHandler.checkPassword(
             GenerateKeys.getPasswordInput()); // This window shows garbage
     if (password == null) {
       System.err.println("Please enter admin password to apply changes");
       return;
     }
     if (action == STUDENT) {
       LoginManager.setStudent(p.getPID(), c.getCID());
     } else if (action == TA) {
       LoginManager.setTA(p.getPID(), c.getCID());
     } else if (action == PROF) {
       LoginManager.setProf(p.getPID(), c.getCID());
     } else if (action == REMOVE) {
       LoginManager.remove(p.getPID(), c.getCID());
     } else if (action == REMOVEPERSON) {
       LoginManager.remove(p.getPID());
     } else if (action == REMOVECOURSE) {
       LoginManager.removeCourse(c.getCID());
     } else if (action == EDITCOURSE) {
       JTextField pf = new JTextField();
       int okCxl =
           JOptionPane.showConfirmDialog(
               null,
               pf,
               "Change Course name to",
               JOptionPane.OK_CANCEL_OPTION,
               JOptionPane.PLAIN_MESSAGE);
       String courseName = null;
       if (okCxl == JOptionPane.OK_OPTION) {
         courseName = new String(pf.getText());
       } else {
         return;
       }
       LoginManager.changeCoursename(c.getCID(), courseName);
     } else if (action == EDITUSERNAME) {
       JTextField pf = new JTextField();
       int okCxl =
           JOptionPane.showConfirmDialog(
               null,
               pf,
               "Change username to",
               JOptionPane.OK_CANCEL_OPTION,
               JOptionPane.PLAIN_MESSAGE);
       String username = null;
       if (okCxl == JOptionPane.OK_OPTION) {
         username = new String(pf.getText());
       } else {
         return;
       }
       LoginManager.changeUsername(p.getPID(), username);
     }
     enc = LoginManager.save(password);
   } finally {
     if (password != null) {
       for (int i = 0; i < password.length; i++) {
         password[i] = '\0';
       }
     }
   }
 }