mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-14 17:07:17 -05:00
webui: view / change rights per user
This commit is contained in:
parent
83ff00e77d
commit
4733523b0c
@ -46,6 +46,7 @@ ServiceControlHandler::ServiceControlHandler(RsServiceControl* control):
|
|||||||
mRsServiceControl(control)
|
mRsServiceControl(control)
|
||||||
{
|
{
|
||||||
addResourceHandler("*", this, &ServiceControlHandler::handleWildcard);
|
addResourceHandler("*", this, &ServiceControlHandler::handleWildcard);
|
||||||
|
addResourceHandler("user", this, &ServiceControlHandler::handleUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServiceControlHandler::handleWildcard(Request &req, Response &resp)
|
void ServiceControlHandler::handleWildcard(Request &req, Response &resp)
|
||||||
@ -87,7 +88,7 @@ void ServiceControlHandler::handleWildcard(Request &req, Response &resp)
|
|||||||
//uint32_t serviceid = fromString<uint32_t>(serviceidtext);
|
//uint32_t serviceid = fromString<uint32_t>(serviceidtext);
|
||||||
uint32_t serviceid = atoi(serviceidtext.c_str());
|
uint32_t serviceid = atoi(serviceidtext.c_str());
|
||||||
if (serviceid == 0) {
|
if (serviceid == 0) {
|
||||||
resp.setFail("serviceid missed");
|
resp.setFail("service_id missed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,4 +124,62 @@ void ServiceControlHandler::handleWildcard(Request &req, Response &resp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ServiceControlHandler::handleUser(Request& req, Response& resp){
|
||||||
|
// no get, only put (post) to allow user or delete to remove user
|
||||||
|
|
||||||
|
std::string serviceidtext;
|
||||||
|
std::string peeridtext;
|
||||||
|
bool enabled;
|
||||||
|
bool ok;
|
||||||
|
|
||||||
|
req.mStream << makeKeyValueReference("service_id", serviceidtext)
|
||||||
|
<< makeKeyValueReference("peer_id", peeridtext)
|
||||||
|
<< makeKeyValueReference("enabled", enabled);
|
||||||
|
|
||||||
|
RsPeerId peer_id(peeridtext);
|
||||||
|
|
||||||
|
if (peer_id.isNull()) {
|
||||||
|
resp.setFail("peer_id missing or not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsServicePermissions serv_perms ;
|
||||||
|
uint32_t serviceid = atoi(serviceidtext.c_str());
|
||||||
|
if (serviceid == 0) {
|
||||||
|
resp.setFail("service_id missed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!rsServiceControl->getServicePermissions(serviceid, serv_perms)){
|
||||||
|
resp.setFail("service_id " + serviceidtext + " is invalid");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(req.isPut())
|
||||||
|
{
|
||||||
|
if (enabled && !serv_perms.peerHasPermission(peer_id))
|
||||||
|
{
|
||||||
|
serv_perms.setPermission(peer_id);
|
||||||
|
} else if (!enabled && serv_perms.peerHasPermission(peer_id)){
|
||||||
|
serv_perms.resetPermission(peer_id);
|
||||||
|
} else {
|
||||||
|
//nothing todo
|
||||||
|
resp.setOk();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
resp.setFail("only POST supported.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ok = rsServiceControl->updateServicePermissions(serviceid,serv_perms);
|
||||||
|
if (!ok) {
|
||||||
|
resp.setFail("updateServicePermissions failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.setOk();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace resource_api
|
} // namespace resource_api
|
||||||
|
@ -16,5 +16,6 @@ public:
|
|||||||
private:
|
private:
|
||||||
RsServiceControl* mRsServiceControl;
|
RsServiceControl* mRsServiceControl;
|
||||||
void handleWildcard(Request& req, Response& resp);
|
void handleWildcard(Request& req, Response& resp);
|
||||||
|
void handleUser(Request& req, Response& resp);
|
||||||
};
|
};
|
||||||
} // namespace resource_api
|
} // namespace resource_api
|
||||||
|
@ -16,6 +16,7 @@ function selAccount(account){
|
|||||||
m.redraw();
|
m.redraw();
|
||||||
rs.request("control/login", {id: curraccount.id}, function(){
|
rs.request("control/login", {id: curraccount.id}, function(){
|
||||||
console.log("login sent");
|
console.log("login sent");
|
||||||
|
rs.clearCache();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ module.exports = {view: function(){
|
|||||||
//console.log("peers:" + peers);
|
//console.log("peers:" + peers);
|
||||||
|
|
||||||
//waiting for peerlist ...
|
//waiting for peerlist ...
|
||||||
if(peers === undefined){
|
if(peers === undefined || peers == null){
|
||||||
return m("div",[
|
return m("div",[
|
||||||
m("h2","peers"),
|
m("h2","peers"),
|
||||||
m("h3","waiting_server"),
|
m("h3","waiting_server"),
|
||||||
@ -31,14 +31,14 @@ module.exports = {view: function(){
|
|||||||
if (location.avatar_address != "" && avatar_address =="") {
|
if (location.avatar_address != "" && avatar_address =="") {
|
||||||
avatar_address=location.avatar_address;
|
avatar_address=location.avatar_address;
|
||||||
}
|
}
|
||||||
return m("div",{
|
return m("li",{
|
||||||
style:"color:" + (location.is_online ? "lime": "grey")
|
style:"color:" + (location.is_online ? "lime": "grey")
|
||||||
+ ";cursor:pointer",
|
+ ";cursor:pointer",
|
||||||
onclick: function(){
|
onclick: function(){
|
||||||
m.route("/chat?lobby=" + location.chat_id)
|
m.route("/chat?lobby=" + location.chat_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
},location.location);
|
}, location.location);
|
||||||
});
|
});
|
||||||
|
|
||||||
//return friend (peer + locations)
|
//return friend (peer + locations)
|
||||||
@ -58,7 +58,7 @@ module.exports = {view: function(){
|
|||||||
{style:"color:" + (isonline ? "lime": "grey")} ,
|
{style:"color:" + (isonline ? "lime": "grey")} ,
|
||||||
peer.name
|
peer.name
|
||||||
),
|
),
|
||||||
m("div", loclist ),
|
m("ul", loclist ),
|
||||||
]),
|
]),
|
||||||
//remove-button
|
//remove-button
|
||||||
m("div", {
|
m("div", {
|
||||||
|
@ -261,6 +261,12 @@ rs.forceUpdate = function(path, removeCache){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// force reload for all
|
||||||
|
rs.clearCache = function(path, removeCache){
|
||||||
|
cache = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//return api-path
|
//return api-path
|
||||||
rs.apiurl = function(path) {
|
rs.apiurl = function(path) {
|
||||||
if (path === undefined) {
|
if (path === undefined) {
|
||||||
@ -372,3 +378,19 @@ rs.sort.bool = function(name, innersort){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// searching a element in a list
|
||||||
|
// items: list to search in
|
||||||
|
// name: name of attribute to lookup
|
||||||
|
// value: attribute's value to compare
|
||||||
|
rs.find = function(items, name, value) {
|
||||||
|
if (items === undefined||items == null) {
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
for(var i = 0, l = items.length; i < l; ++i) {
|
||||||
|
if (items[i][name] == value) {
|
||||||
|
return items[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
@ -13,8 +13,150 @@ function setOption(id,value) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setUserOption(serviceid, userid, value) {
|
||||||
|
return function(){
|
||||||
|
rs.request("servicecontrol/user", {
|
||||||
|
service_id: serviceid,
|
||||||
|
peer_id: userid,
|
||||||
|
enabled: value
|
||||||
|
}, function(){
|
||||||
|
rs.forceUpdate("servicecontrol", true)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function createSwitch(isOn, width) {
|
||||||
|
if (width === undefined) {
|
||||||
|
width = "2.1em";
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
m("div.menu", {
|
||||||
|
style: {
|
||||||
|
float:"left",
|
||||||
|
width: width,
|
||||||
|
color: "#303030",
|
||||||
|
textAlign: "center",
|
||||||
|
backgroundColor: !isOn
|
||||||
|
? "black"
|
||||||
|
: "lime",
|
||||||
|
}
|
||||||
|
}, "ON"),
|
||||||
|
m("div.menu",{
|
||||||
|
style: {
|
||||||
|
float:"left",
|
||||||
|
width: width,
|
||||||
|
textAlign: "center",
|
||||||
|
marginRight:"5px",
|
||||||
|
color: "#303030",
|
||||||
|
backgroundColor: isOn
|
||||||
|
? "black"
|
||||||
|
: "lime",
|
||||||
|
}
|
||||||
|
}, "OFF"),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
function serviceView(serviceid) {
|
||||||
|
var service, liste;
|
||||||
|
service = rs.find(rs("servicecontrol"),"service_id",serviceid);
|
||||||
|
if (service == null) {
|
||||||
|
return m("h3","<please wait ... >");
|
||||||
|
}
|
||||||
|
liste = service.default_allowed
|
||||||
|
? service.peers_denied
|
||||||
|
: service.peers_allowed;
|
||||||
|
return m("div", [
|
||||||
|
m("h2","Options / Rights / " + service.service_name),
|
||||||
|
m("div.btn2",{
|
||||||
|
onclick: function(){
|
||||||
|
m.route("/options/servicecontrol")
|
||||||
|
},
|
||||||
|
},"back to options / rights"),
|
||||||
|
m("hr"),
|
||||||
|
m("h2",{
|
||||||
|
style:{
|
||||||
|
float:"left",
|
||||||
|
}
|
||||||
|
},[
|
||||||
|
m("div",{
|
||||||
|
style:{
|
||||||
|
float:"left",
|
||||||
|
}
|
||||||
|
},"user rights for: " + service.service_name + ", default: "),
|
||||||
|
m("div", {
|
||||||
|
onclick: setOption(
|
||||||
|
serviceid,
|
||||||
|
!service.default_allowed
|
||||||
|
),
|
||||||
|
style: {
|
||||||
|
float:"left",
|
||||||
|
marginLeft: "0.4em",
|
||||||
|
marginRight: "0.4em",
|
||||||
|
}
|
||||||
|
},createSwitch(service.default_allowed)),
|
||||||
|
]),
|
||||||
|
m("div", {
|
||||||
|
style: {
|
||||||
|
clear:"left",
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
m("ul", rs.list("peers",function(peer){
|
||||||
|
var locs;
|
||||||
|
locs = peer.locations;
|
||||||
|
locs.sort(rs.sort("location"));
|
||||||
|
return peer.locations.map(function(location){
|
||||||
|
var isExcept, isOn;
|
||||||
|
isExcept = liste != null
|
||||||
|
&& liste.indexOf(location.peer_id)>=0;
|
||||||
|
isOn = service.default_allowed ? !isExcept: isExcept;
|
||||||
|
return m("li", {
|
||||||
|
style: {
|
||||||
|
margin: "5px",
|
||||||
|
color: isOn ? "lime" :"red",
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
m("div"),
|
||||||
|
m("div", {
|
||||||
|
onclick: setUserOption(
|
||||||
|
serviceid,
|
||||||
|
location.peer_id,
|
||||||
|
!isOn
|
||||||
|
),
|
||||||
|
style: {
|
||||||
|
float:"left",
|
||||||
|
},
|
||||||
|
},createSwitch(isOn)),
|
||||||
|
m("div",
|
||||||
|
{
|
||||||
|
style: {
|
||||||
|
color: "lime",
|
||||||
|
float:"left",
|
||||||
|
marginLeft: "5px",
|
||||||
|
marginRight: "5px",
|
||||||
|
fontWeight: "bold",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
peer.name + (location.location
|
||||||
|
? " (" + location.location + ")"
|
||||||
|
: "")
|
||||||
|
),
|
||||||
|
m("div", {
|
||||||
|
style: {
|
||||||
|
clear: "left"
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
})
|
||||||
|
}, rs.sort("name")))
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
view: function(){
|
view: function(){
|
||||||
|
if (m.route.param("service_id")) {
|
||||||
|
return serviceView(m.route.param("service_id"));
|
||||||
|
}
|
||||||
return m("div", [
|
return m("div", [
|
||||||
m("h2","Options / Rights"),
|
m("h2","Options / Rights"),
|
||||||
m("div.btn2",{
|
m("div.btn2",{
|
||||||
@ -24,51 +166,70 @@ module.exports = {
|
|||||||
},"back to options"),
|
},"back to options"),
|
||||||
m("hr"),
|
m("hr"),
|
||||||
m("ul", rs.list("servicecontrol", function(item){
|
m("ul", rs.list("servicecontrol", function(item){
|
||||||
//return m("li",item.service_name)
|
|
||||||
if (item.service_name.match("banlist")) {
|
|
||||||
console.log("banlist:" + item.default_allowed);
|
|
||||||
}
|
|
||||||
return m("li", {
|
return m("li", {
|
||||||
style: {
|
style: {
|
||||||
margin: "2px",
|
margin: "5px",
|
||||||
color: item.default_allowed ? "lime" :"red",
|
color: item.default_allowed ? "lime" :"red",
|
||||||
}
|
}
|
||||||
}, [
|
}, [
|
||||||
|
m("div"),
|
||||||
m("div", {
|
m("div", {
|
||||||
onclick: setOption(
|
onclick: setOption(
|
||||||
item.service_id,
|
item.service_id,
|
||||||
!item.default_allowed
|
!item.default_allowed
|
||||||
),
|
),
|
||||||
}, [
|
|
||||||
m("div.menu", {
|
|
||||||
style: {
|
style: {
|
||||||
float:"left",
|
float:"left",
|
||||||
width:"30px",
|
|
||||||
color: "#303030",
|
|
||||||
textAlign: "center",
|
|
||||||
backgroundColor: !item.default_allowed
|
|
||||||
? "black"
|
|
||||||
: "lime",
|
|
||||||
}
|
}
|
||||||
}, "ON"),
|
},createSwitch(item.default_allowed)),
|
||||||
m("div.menu",{
|
m("div.menu",
|
||||||
style: {
|
{
|
||||||
float:"left",
|
|
||||||
width:"30px",
|
|
||||||
textAlign: "center",
|
|
||||||
marginRight:"5px",
|
|
||||||
color: "#303030",
|
|
||||||
backgroundColor: item.default_allowed
|
|
||||||
? "black"
|
|
||||||
: "lime",
|
|
||||||
}
|
|
||||||
}, "OFF"),
|
|
||||||
]),
|
|
||||||
m("div", {
|
|
||||||
style: {
|
style: {
|
||||||
color: "lime",
|
color: "lime",
|
||||||
|
float: "left",
|
||||||
|
marginLeft: "5px",
|
||||||
|
marginRight: "5px",
|
||||||
|
paddingLeft: "2px",
|
||||||
|
paddingRight: "2px",
|
||||||
|
},
|
||||||
|
onclick: function(){
|
||||||
|
m.route("/options/servicecontrol/", {
|
||||||
|
service_id: item.service_id,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}, item.service_name),
|
}, "more"
|
||||||
|
),
|
||||||
|
m("div",
|
||||||
|
{
|
||||||
|
style: {
|
||||||
|
color: "lime",
|
||||||
|
float:"left",
|
||||||
|
marginLeft: "5px",
|
||||||
|
marginRight: "5px",
|
||||||
|
fontWeight: "bold",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
item.service_name
|
||||||
|
),
|
||||||
|
m("div",
|
||||||
|
{
|
||||||
|
style: {
|
||||||
|
color: "lime",
|
||||||
|
float:"left",
|
||||||
|
marginLeft: "5px",
|
||||||
|
marginRight: "5px",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
(
|
||||||
|
item.default_allowed
|
||||||
|
? ( item.peers_denied != null
|
||||||
|
? "(" + item.peers_denied.length + " denied)"
|
||||||
|
: "")
|
||||||
|
: ( item.peers_allowed != null
|
||||||
|
? "(" + item.peers_allowed.length + " allowed)"
|
||||||
|
: "")
|
||||||
|
)
|
||||||
|
),
|
||||||
m("div", {
|
m("div", {
|
||||||
style: {
|
style: {
|
||||||
clear: "left"
|
clear: "left"
|
||||||
|
Loading…
Reference in New Issue
Block a user