Commit 34971f95 authored by daryl herzmann's avatar daryl herzmann Committed by GitHub

Merge pull request #830 from guusdk/OF-1350_MUC-password

OF-1350 MUC passwords
parents b3941322 5bdb2b80
...@@ -1252,7 +1252,7 @@ muc.room.edit.form.reservednick=Only login with registered nickname ...@@ -1252,7 +1252,7 @@ muc.room.edit.form.reservednick=Only login with registered nickname
muc.room.edit.form.canchangenick=Allow Occupants to change nicknames muc.room.edit.form.canchangenick=Allow Occupants to change nicknames
muc.room.edit.form.registration=Allow Users to register with the room muc.room.edit.form.registration=Allow Users to register with the room
muc.room.edit.form.log=Log Room Conversations muc.room.edit.form.log=Log Room Conversations
muc.room.edit.form.required_field=Required Field
# Muc room summary Page # Muc room summary Page
muc.room.summary.title=Group Chat Rooms muc.room.summary.title=Group Chat Rooms
......
...@@ -28,10 +28,7 @@ import org.jivesoftware.openfire.group.Group; ...@@ -28,10 +28,7 @@ import org.jivesoftware.openfire.group.Group;
import org.jivesoftware.openfire.group.GroupJID; import org.jivesoftware.openfire.group.GroupJID;
import org.jivesoftware.openfire.group.GroupManager; import org.jivesoftware.openfire.group.GroupManager;
import org.jivesoftware.openfire.group.GroupNotFoundException; import org.jivesoftware.openfire.group.GroupNotFoundException;
import org.jivesoftware.openfire.muc.CannotBeInvitedException; import org.jivesoftware.openfire.muc.*;
import org.jivesoftware.openfire.muc.ConflictException;
import org.jivesoftware.openfire.muc.ForbiddenException;
import org.jivesoftware.openfire.muc.MUCRole;
import org.jivesoftware.openfire.muc.cluster.RoomUpdatedEvent; import org.jivesoftware.openfire.muc.cluster.RoomUpdatedEvent;
import org.jivesoftware.util.JiveGlobals; import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.LocaleUtils; import org.jivesoftware.util.LocaleUtils;
...@@ -95,7 +92,8 @@ public class IQOwnerHandler { ...@@ -95,7 +92,8 @@ public class IQOwnerHandler {
* @throws ConflictException If the room was going to lose all of its owners. * @throws ConflictException If the room was going to lose all of its owners.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void handleIQ(IQ packet, MUCRole role) throws ForbiddenException, ConflictException, CannotBeInvitedException { public void handleIQ(IQ packet, MUCRole role) throws ForbiddenException, ConflictException, CannotBeInvitedException, NotAcceptableException
{
// Only owners can send packets with the namespace "http://jabber.org/protocol/muc#owner" // Only owners can send packets with the namespace "http://jabber.org/protocol/muc#owner"
if (MUCRole.Affiliation.owner != role.getAffiliation()) { if (MUCRole.Affiliation.owner != role.getAffiliation()) {
throw new ForbiddenException(); throw new ForbiddenException();
...@@ -158,7 +156,7 @@ public class IQOwnerHandler { ...@@ -158,7 +156,7 @@ public class IQOwnerHandler {
* @throws ConflictException If the room was going to lose all of its owners. * @throws ConflictException If the room was going to lose all of its owners.
*/ */
private void handleDataFormElement(MUCRole senderRole, Element formElement) private void handleDataFormElement(MUCRole senderRole, Element formElement)
throws ForbiddenException, ConflictException { throws ForbiddenException, ConflictException, NotAcceptableException {
DataForm completedForm = new DataForm(formElement); DataForm completedForm = new DataForm(formElement);
switch(completedForm.getType()) { switch(completedForm.getType()) {
...@@ -206,7 +204,8 @@ public class IQOwnerHandler { ...@@ -206,7 +204,8 @@ public class IQOwnerHandler {
* @throws ConflictException If the room was going to lose all of its owners. * @throws ConflictException If the room was going to lose all of its owners.
*/ */
private void processConfigurationForm(DataForm completedForm, MUCRole senderRole) private void processConfigurationForm(DataForm completedForm, MUCRole senderRole)
throws ForbiddenException, ConflictException { throws ForbiddenException, ConflictException, NotAcceptableException
{
List<String> values; List<String> values;
String booleanValue; String booleanValue;
FormField field; FormField field;
...@@ -320,23 +319,56 @@ public class IQOwnerHandler { ...@@ -320,23 +319,56 @@ public class IQOwnerHandler {
room.setCanOccupantsInvite(("1".equals(booleanValue))); room.setCanOccupantsInvite(("1".equals(booleanValue)));
} }
boolean passwordProtectionChanged = false;
boolean passwordChanged = false;
boolean updatedIsPasswordProtected = false;
String updatedPassword = null;
field = completedForm.getField("muc#roomconfig_passwordprotectedroom"); field = completedForm.getField("muc#roomconfig_passwordprotectedroom");
if (field != null) { if (field != null)
{
passwordProtectionChanged = true;
final String value = field.getFirstValue(); final String value = field.getFirstValue();
booleanValue = ((value != null ? value : "1")); booleanValue = ( ( value != null ? value : "1" ) );
boolean isPasswordProtected = "1".equals(booleanValue); updatedIsPasswordProtected = "1".equals( booleanValue );
if (isPasswordProtected) { }
// The room is password protected so set the new password
field = completedForm.getField("muc#roomconfig_roomsecret"); field = completedForm.getField("muc#roomconfig_roomsecret");
if (field != null) { if (field != null) {
final String secret = completedForm.getField("muc#roomconfig_roomsecret").getFirstValue(); passwordChanged = true;
room.setPassword(secret); updatedPassword = completedForm.getField("muc#roomconfig_roomsecret").getFirstValue();
} if ( updatedPassword != null && updatedPassword.isEmpty() )
{
updatedPassword = null;
} }
else { }
// The room is not password protected so remove any previous password
room.setPassword(null); if ( passwordProtectionChanged )
{
// The owner signifies that a change in password-protection status is desired.
if ( !updatedIsPasswordProtected )
{
// The owner lifts password protection.
room.setPassword( null );
} }
else if ( updatedPassword == null && room.getPassword() == null )
{
// The owner sets password-protection, but does not provide a password (and the room does not already have a password).
throw new NotAcceptableException( "Room is made password-protected, but is missing a password." );
}
else if ( updatedPassword != null )
{
// The owner sets password-protection and provided a new password.
room.setPassword( updatedPassword );
}
}
else if ( passwordChanged )
{
// The owner did not explicitly signal a password protection change, but did change the password value.
// This implies a change in password protection.
room.setPassword( updatedPassword );
} }
field = completedForm.getField("muc#roomconfig_whois"); field = completedForm.getField("muc#roomconfig_whois");
......
...@@ -407,6 +407,9 @@ public class LocalMUCUser implements MUCUser { ...@@ -407,6 +407,9 @@ public class LocalMUCUser implements MUCUser {
} }
} }
} }
catch (NotAcceptableException e) {
sendErrorPacket(packet, PacketError.Condition.not_acceptable );
}
catch (ForbiddenException e) { catch (ForbiddenException e) {
sendErrorPacket(packet, PacketError.Condition.forbidden); sendErrorPacket(packet, PacketError.Condition.forbidden);
} }
......
...@@ -389,23 +389,23 @@ ...@@ -389,23 +389,23 @@
<% if (errors.get("roomconfig_roomname") != null) { %> <% if (errors.get("roomconfig_roomname") != null) { %>
<fmt:message key="muc.room.edit.form.valid_hint_name" /> <fmt:message key="muc.room.edit.form.valid_hint_name" />
<% } else if (errors.get("roomconfig_roomdesc") != null) { %> <% } if (errors.get("roomconfig_roomdesc") != null) { %>
<fmt:message key="muc.room.edit.form.valid_hint_description" /> <fmt:message key="muc.room.edit.form.valid_hint_description" />
<% } else if (errors.get("roomconfig_maxusers") != null) { %> <% } if (errors.get("roomconfig_maxusers") != null) { %>
<fmt:message key="muc.room.edit.form.valid_hint_max_room" /> <fmt:message key="muc.room.edit.form.valid_hint_max_room" />
<% } else if (errors.get("roomconfig_roomsecret2") != null) { %> <% } if (errors.get("roomconfig_roomsecret2") != null) { %>
<fmt:message key="muc.room.edit.form.new_password" /> <fmt:message key="muc.room.edit.form.new_password" />
<% } else if (errors.get("roomconfig_whois") != null) { %> <% } if (errors.get("roomconfig_whois") != null) { %>
<fmt:message key="muc.room.edit.form.role" /> <fmt:message key="muc.room.edit.form.role" />
<% } else if (errors.get("roomconfig_allowpm") != null) { %> <% } if (errors.get("roomconfig_allowpm") != null) { %>
<fmt:message key="muc.room.edit.form.role" /> <fmt:message key="muc.room.edit.form.role" />
<% } else if (errors.get("roomName") != null) { %> <% } if (errors.get("roomName") != null) { %>
<fmt:message key="muc.room.edit.form.valid_hint" /> <fmt:message key="muc.room.edit.form.valid_hint" />
<% } else if (errors.get("room_already_exists") != null) { %> <% } if (errors.get("room_already_exists") != null) { %>
<fmt:message key="muc.room.edit.form.error_created_id" /> <fmt:message key="muc.room.edit.form.error_created_id" />
<% } else if (errors.get("not_enough_permissions") != null) { %> <% } if (errors.get("not_enough_permissions") != null) { %>
<fmt:message key="muc.room.edit.form.error_created_privileges" /> <fmt:message key="muc.room.edit.form.error_created_privileges" />
<% } else if (errors.get("room_topic") != null) { %> <% } if (errors.get("room_topic") != null) { %>
<fmt:message key="muc.room.edit.form.valid_hint_subject" /> <fmt:message key="muc.room.edit.form.valid_hint_subject" />
<% } %> <% } %>
</td> </td>
...@@ -485,7 +485,7 @@ ...@@ -485,7 +485,7 @@
<tbody> <tbody>
<% if (create) { %> <% if (create) { %>
<tr> <tr>
<td><fmt:message key="muc.room.edit.form.room_id" />:</td> <td><fmt:message key="muc.room.edit.form.room_id" />: *</td>
<td><input type="text" name="roomName" value="<%= StringUtils.escapeForXML(roomName) %>"> <td><input type="text" name="roomName" value="<%= StringUtils.escapeForXML(roomName) %>">
<% if (webManager.getMultiUserChatManager().getMultiUserChatServicesCount() > 1) { %> <% if (webManager.getMultiUserChatManager().getMultiUserChatServicesCount() > 1) { %>
@<select name="mucName"> @<select name="mucName">
...@@ -516,12 +516,12 @@ ...@@ -516,12 +516,12 @@
</tr> </tr>
<% } %> <% } %>
<tr> <tr>
<td><fmt:message key="muc.room.edit.form.room_name" />:</td> <td><fmt:message key="muc.room.edit.form.room_name" />: *</td>
<td><input type="text" name="roomconfig_roomname" value="<%= (naturalName == null ? "" : StringUtils.escapeForXML(naturalName)) %>"> <td><input type="text" name="roomconfig_roomname" value="<%= (naturalName == null ? "" : StringUtils.escapeForXML(naturalName)) %>">
</td> </td>
</tr> </tr>
<tr> <tr>
<td><fmt:message key="muc.room.edit.form.description" />:</td> <td><fmt:message key="muc.room.edit.form.description" />: *</td>
<td><input name="roomconfig_roomdesc" value="<%= (description == null ? "" : StringUtils.escapeForXML(description)) %>" type="text" size="40"> <td><input name="roomconfig_roomdesc" value="<%= (description == null ? "" : StringUtils.escapeForXML(description)) %>" type="text" size="40">
</td> </td>
</tr> </tr>
...@@ -634,6 +634,7 @@ ...@@ -634,6 +634,7 @@
<input type="submit" name="cancel" value="<fmt:message key="global.cancel" />"></td> <input type="submit" name="cancel" value="<fmt:message key="global.cancel" />"></td>
</tr> </tr>
</table> </table>
<span class="jive-description">* <fmt:message key="muc.room.edit.form.required_field" /> </span>
</form> </form>
</body> </body>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment