Browse Source

Merge branch 'room-lock-without-password' into develop

pull/414/head
Leon Klingele 8 years ago
parent
commit
ac7df44553
No known key found for this signature in database
GPG Key ID: 83AEC0FEBAA5D483
  1. 3
      go/channelling/config.go
  2. 1
      go/channelling/server/config.go
  3. 5
      server.conf.in
  4. 18
      static/js/directives/socialshare.js
  5. 79
      static/js/services/roompin.js

3
go/channelling/config.go

@ -32,7 +32,8 @@ type Config struct { @@ -32,7 +32,8 @@ type Config struct {
ContentSecurityPolicyReportOnly string `json:"-"` // HTML content security policy in report only mode
RoomTypeDefault string `json:"-"` // New rooms default to this type
RoomTypes map[*regexp.Regexp]string `json:"-"` // Map of regular expression -> room type
RoomNameCaseSensitive bool // Wether the room names are case sensitive.
RoomNameCaseSensitive bool // Whether the room names are case sensitive.
LockedRoomJoinableWithPIN bool // Whether locked rooms should be joinable by providing the PIN the room was locked with
}
func (config *Config) WithModule(m string) bool {

1
go/channelling/server/config.go

@ -147,6 +147,7 @@ func NewConfig(container phoenix.Container, tokens bool) (*channelling.Config, e @@ -147,6 +147,7 @@ func NewConfig(container phoenix.Container, tokens bool) (*channelling.Config, e
RoomTypeDefault: defaultRoomType,
RoomTypes: roomTypes,
RoomNameCaseSensitive: container.GetBoolDefault("app", "caseSensitiveRooms", false),
LockedRoomJoinableWithPIN: container.GetBoolDefault("app", "lockedRoomJoinableWithPIN", true),
}, nil
}

5
server.conf.in

@ -97,7 +97,10 @@ encryptionSecret = tne-default-encryption-block-key @@ -97,7 +97,10 @@ encryptionSecret = tne-default-encryption-block-key
; Whether a user account is required to create a room. This only has an effect
; if user accounts are enabled. Optional, defaults to false.
;authorizeRoomCreation = false
; Wether the pipelines API should be enabled. Optional, defaults to false.
; Whether locked rooms should be joinable by providing the PIN the room was
; locked with. Optional, defaults to true.
;lockedRoomJoinableWithPIN = true
; Whether the pipelines API should be enabled. Optional, defaults to false.
;pipelinesEnabled = false
; Server token is a public random string which is used to enhance security of
; server generated security tokens. When the serverToken is changed all existing

18
static/js/directives/socialshare.js

@ -31,7 +31,7 @@ define(['text!partials/socialshare.html'], function(template) { @@ -31,7 +31,7 @@ define(['text!partials/socialshare.html'], function(template) {
};
// socialShare
return ["$window", "translation", "rooms", "alertify", function($window, translation, rooms, alertify) {
return ["$window", "translation", "rooms", "roompin", "alertify", function($window, translation, rooms, roompin, alertify) {
var title = $window.encodeURIComponent($window.document.title);
var makeUrl = function(nw, target) {
@ -71,21 +71,7 @@ define(['text!partials/socialshare.html'], function(template) { @@ -71,21 +71,7 @@ define(['text!partials/socialshare.html'], function(template) {
//$window.alert("Room link: " + $scope.roomlink);
alertify.dialog.notify(translation._("Room link"), '<a href="'+$scope.roomlink+'" rel="external" target="_blank">'+$scope.roomlink+'</a>');
} else if (nw === "pin") {
if (!$scope.isRoomLocked) {
// Lock
alertify.dialog.prompt(translation._("Please enter a new Room PIN to lock the room"), function(pin) {
rooms.setPIN(pin);
}, function() {
// Do nothing
});
} else {
// Unlock
alertify.dialog.confirm(translation._("Do you want to unlock the room?"), function() {
rooms.setPIN("");
}, function() {
// Do nothing
});
}
roompin.toggleCurrentRoomState(rooms);
}
}
});

79
static/js/services/roompin.js

@ -21,11 +21,16 @@ @@ -21,11 +21,16 @@
"use strict";
define([
], function() {
"moment"
], function(moment) {
return ["$window", "$q", "alertify", "translation", "safeMessage", function($window, $q, alertify, translation, safeMessage) {
return ["$window", "$q", "globalContext", "alertify", "toastr", "translation", "safeMessage", "randomGen", "localStorage", function($window, $q, context, alertify, toastr, translation, safeMessage, randomGen, localStorage) {
var pinCache = {};
var getLocalStoragePINIDForRoom = function(roomName) {
return "room-pin-" + roomName;
};
var lockedRoomsJoinable = !!context.Cfg.LockedRoomJoinableWithPIN;
var roompin = {
get: function(roomName) {
var cachedPIN = pinCache[roomName];
@ -33,30 +38,84 @@ define([ @@ -33,30 +38,84 @@ define([
},
clear: function(roomName) {
delete pinCache[roomName];
localStorage.removeItem(getLocalStoragePINIDForRoom(roomName));
console.log("Cleared PIN for", roomName);
},
update: function(roomName, pin) {
update: function(roomName, pin, noAlert) {
if (pin) {
pinCache[roomName] = pin;
alertify.dialog.alert(translation._("PIN for room %s is now '%s'.", safeMessage(roomName), safeMessage(pin)));
localStorage.setItem(getLocalStoragePINIDForRoom(roomName), pin);
if (!noAlert && lockedRoomsJoinable) {
alertify.dialog.alert(translation._("PIN for room %s is now '%s'.", safeMessage(roomName), safeMessage(pin)));
}
} else {
roompin.clear(roomName);
alertify.dialog.alert(translation._("PIN lock has been removed from room %s.", safeMessage(roomName)));
if (!noAlert && lockedRoomsJoinable) {
toastr.info(moment().format("lll"), translation._("PIN lock has been removed from room '%s'", safeMessage(roomName)));
}
}
},
requestInteractively: function(roomName) {
var deferred = $q.defer();
alertify.dialog.prompt(translation._("Enter the PIN for room %s", safeMessage(roomName)), function(pin) {
var tryJoinWithStoredPIN = function() {
var pin = localStorage.getItem(getLocalStoragePINIDForRoom(roomName));
if (pin) {
pinCache[roomName] = pin;
roompin.update(roomName, pin, true);
deferred.resolve();
} else {
return true;
}
return false;
};
if (lockedRoomsJoinable) {
if (!tryJoinWithStoredPIN()) {
alertify.dialog.prompt(translation._("Enter the PIN for room %s", safeMessage(roomName)), function(pin) {
if (pin) {
roompin.update(roomName, pin);
deferred.resolve();
} else {
deferred.reject();
}
}, function() {
deferred.reject();
});
}
} else {
if (!tryJoinWithStoredPIN()) {
alertify.dialog.error(
translation._("Can't join locked room '%s'.", safeMessage(roomName)),
translation._("Room '%s' is locked. This server is configured to not let anyone join locked rooms.", safeMessage(roomName))
);
deferred.reject();
}
}
return deferred.promise;
},
// Passing in "rooms" is a bit of a hack to prevent circular dependencies
toggleCurrentRoomState: function(rooms) {
if (!rooms.isLocked()) {
// Lock
if (lockedRoomsJoinable) {
alertify.dialog.prompt(translation._("Please enter a new Room PIN to lock the room"), function(pin) {
rooms.setPIN(pin);
}, function() {
// Do nothing
});
} else {
alertify.dialog.confirm(translation._("Do you want to lock the room?"), function() {
var pin = randomGen.random({hex: true});
rooms.setPIN(pin);
}, function() {
// Do nothing
});
}
return;
}
// Unlock
alertify.dialog.confirm(translation._("Do you want to unlock the room?"), function() {
rooms.setPIN("");
}, function() {
deferred.reject();
// Do nothing
});
return deferred.promise;
}
};

Loading…
Cancel
Save