Skip to content
This repository was archived by the owner on Nov 25, 2020. It is now read-only.

Commit 1c95a90

Browse files
committed
Fix user_create_user and external users mandatory prefix that was broken.
1 parent dc85a5c commit 1c95a90

File tree

5 files changed

+76
-90
lines changed

5 files changed

+76
-90
lines changed

core/src/plugins/core.conf/AbstractConfDriver.php

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -777,13 +777,21 @@ public function switchAction(ServerRequestInterface $requestInterface, ResponseI
777777
if ($action == "user_create_user" && isSet($httpVars["NEW_new_user_id"])) {
778778
$updating = false;
779779
OptionsHelper::parseStandardFormParameters($ctx, $httpVars, $data, "NEW_");
780-
$original_id = InputFilter::decodeSecureMagic($data["new_user_id"]);
781-
$data["new_user_id"] = InputFilter::decodeSecureMagic($data["new_user_id"], InputFilter::SANITIZE_EMAILCHARS);
782-
if($original_id != $data["new_user_id"]){
783-
throw new \Exception(str_replace("%s", $data["new_user_id"], $mess["ajxp_conf.127"]));
780+
$originalId = InputFilter::decodeSecureMagic($data["new_user_id"]);
781+
$newUserId = InputFilter::decodeSecureMagic($data["new_user_id"], InputFilter::SANITIZE_EMAILCHARS);
782+
if($originalId != $newUserId){
783+
throw new PydioException(str_replace("%s", $newUserId, $mess["ajxp_conf.127"]));
784784
}
785-
if (UsersService::userExists($data["new_user_id"], "w")) {
786-
throw new \Exception($mess["ajxp_conf.43"]);
785+
$prefix = '';
786+
$sharePlugin = PluginsService::getInstance($ctx)->getPluginById("action.share");
787+
if($sharePlugin !== null){
788+
$prefix = $sharePlugin->getContextualOption($ctx, "SHARED_USERS_TMP_PREFIX");
789+
}
790+
if(!empty($prefix) && strpos($newUserId, $prefix) !== 0){
791+
$newUserId = $prefix . $newUserId;
792+
}
793+
if (UsersService::userExists($newUserId, "w")) {
794+
throw new PydioException($mess["ajxp_conf.43"]);
787795
}
788796
$limit = $loggedUser->getMergedRole()->filterParameterValue("core.conf", "USER_SHARED_USERS_LIMIT", AJXP_REPO_SCOPE_ALL, "");
789797
if (!empty($limit) && intval($limit) > 0) {
@@ -792,8 +800,7 @@ public function switchAction(ServerRequestInterface $requestInterface, ResponseI
792800
throw new \Exception($mess['483']);
793801
}
794802
}
795-
796-
$userObject = UsersService::createUser($data["new_user_id"], $data["new_password"]);
803+
$userObject = UsersService::createUser($newUserId, $data["new_password"]);
797804
$userObject->setParent($loggedUser->getId());
798805
$userObject->save('superuser');
799806
$userObject->getPersonalRole()->clearAcls();
@@ -853,7 +860,7 @@ public function switchAction(ServerRequestInterface $requestInterface, ResponseI
853860
UsersService::updateUser($userObject);
854861
}
855862

856-
if ($action == "user_create_user") {
863+
if ($action == "user_create_user" && isSet($newUserId)) {
857864

858865
Controller::applyHook($updating?"user.after_update":"user.after_create", [$ctx, $userObject]);
859866
if (isset($data["send_email"]) && $data["send_email"] == true && !empty($data["email"])) {
@@ -863,13 +870,11 @@ public function switchAction(ServerRequestInterface $requestInterface, ResponseI
863870
$link = ApplicationState::detectServerURL();
864871
$apptitle = ConfService::getGlobalConf("APPLICATION_TITLE");
865872
$subject = str_replace("%s", $apptitle, $mess["507"]);
866-
$body = str_replace(["%s", "%link", "%user", "%pass"], [$apptitle, $link, $data["new_user_id"], $data["new_password"]], $mess["508"]);
873+
$body = str_replace(["%s", "%link", "%user", "%pass"], [$apptitle, $link, $newUserId, $data["new_password"]], $mess["508"]);
867874
$mailer->sendMail($ctx, [$data["email"]], $subject, $body);
868875
}
869876
}
870-
871-
$responseInterface = $responseInterface->withHeader("Content-type", "text/plain");
872-
$responseInterface->getBody()->write("SUCCESS");
877+
$responseInterface = new JsonResponse(["result" => "SUCCESS", "createdUserId" => $newUserId]);
873878

874879
} else {
875880

core/src/plugins/core.conf/standard_conf_actions.xml

Lines changed: 32 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -321,32 +321,23 @@
321321
var values = $H(transport.responseJSON);
322322
values.set("existing_user_id", user_id);
323323
324-
var params = $A(pydio.getPluginConfigs('conf').get('NEWUSERS_EDIT_PARAMETERS').split(','));
325-
for(var i=0;i<params.length;i++){
326-
params[i] = "user/preferences/pref[@exposed]|//param[@name='"+params[i]+"']";
327-
}
328324
var f = new FormManager();
329-
var def1 = $A();
330-
def1.push($H({
331-
description: MessageHash[522],
332-
editable: "true",
333-
expose: "true",
334-
label: MessageHash[522],
335-
name: "existing_user_id",
336-
scope: "user",
337-
type: "hidden"
338-
}),$H({
339-
description: MessageHash[524],
340-
editable: "true",
341-
expose: "true",
342-
label: MessageHash[524],
343-
name: "new_password",
344-
scope: "user",
345-
type: "password-create"
346-
}));
347-
var definitions = f.parseParameters(pydio.getXmlRegistry(), params.join('|'));
348-
definitions.each(function(el){ def1.push(el); });
349-
f.createParametersInputs(oForm.down('#user_create_user'), def1, true, values, false, true);
325+
var parameters = [];
326+
PydioUsers.Client.getCreateUserParameters().map(function(obj){
327+
if(obj.type === 'valid-password') {
328+
obj.type = 'password-create';
329+
}
330+
if(obj.name === 'new_user_id'){
331+
obj.name = 'existing_user_id';
332+
obj.type = 'hidden';
333+
}
334+
if(obj.name === 'send_email'){
335+
return;
336+
}
337+
parameters.push($H(obj));
338+
});
339+
340+
f.createParametersInputs(oForm.down('#user_create_user'), parameters, true, values, false, true);
350341
modal.refreshDialogPosition();
351342
352343
};
@@ -384,48 +375,28 @@
384375
<processing>
385376
<clientCallback prepareModal="true" dialogOpenForm="user_create_user" dialogOkButtonOnly="false" dialogSkipButtons="false">
386377
<dialogOnOpen><![CDATA[
387-
var params = $A(pydio.getPluginConfigs('conf').get('NEWUSERS_EDIT_PARAMETERS').split(','));
388-
for(var i=0;i<params.length;i++){
389-
params[i] = "user/preferences/pref[@exposed]|//param[@name='"+params[i]+"']";
390-
}
378+
var parameters = PydioUsers.Client.getCreateUserParameters().map(function(obj){
379+
if(obj.type === 'valid-password') obj.type = 'password-create';
380+
return $H(obj)
381+
});
391382
var f = new FormManager();
392-
var def1 = $A();
393-
def1.push($H({
394-
description: MessageHash[522],
395-
editable: "true",
396-
expose: "true",
397-
label: MessageHash[522],
398-
name: "new_user_id",
399-
scope: "user",
400-
type: "string"
401-
}),$H({
402-
description: MessageHash[523],
403-
editable: "true",
404-
expose: "true",
405-
label: MessageHash[523],
406-
name: "new_password",
407-
scope: "user",
408-
type: "password-create"
409-
}));
410-
var definitions = f.parseParameters(pydio.getXmlRegistry(), params.join('|'));
411-
definitions.each(function(el){ def1.push(el); });
412-
f.createParametersInputs(oForm.down('#user_create_user'), def1, true, $H(), false, true);
383+
f.createParametersInputs(oForm.down('#user_create_user'), parameters, true, $H(), false, true);
413384
modal.refreshDialogPosition();
414385
]]></dialogOnOpen>
415386
<dialogOnComplete hideDialog="true"><![CDATA[
416387
var params = $H();
417388
var f = new FormManager();
418-
f.serializeParametersInputs(oForm.down('#user_create_user'), params, 'NEW_');
419-
var conn = new Connexion();
420-
params.set("get_action", "user_create_user");
421-
conn.setParameters(params);
422-
conn.setMethod("POST");
423-
conn.onComplete = function(transport){
424-
if($("address_book")){
425-
$("address_book").ajxpPaneObject.reloadDataModel();
426-
}
427-
};
428-
conn.sendAsync();
389+
f.serializeParametersInputs(oForm.down('#user_create_user'), params, 'NEW_');
390+
var conn = new Connexion();
391+
params.set("get_action", "user_create_user");
392+
conn.setParameters(params);
393+
conn.setMethod("POST");
394+
conn.onComplete = function(transport){
395+
if($("address_book")){
396+
$("address_book").ajxpPaneObject.reloadDataModel();
397+
}
398+
};
399+
conn.sendAsync();
429400
]]></dialogOnComplete>
430401
<dialogOnCancel><![CDATA[]]></dialogOnCancel>
431402
</clientCallback>

core/src/plugins/gui.ajax/res/js/es6/http/PydioUsersApi.es6

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@
124124
}
125125

126126
static getCreateUserParameters(){
127-
var basicParameters = [];
127+
let basicParameters = [];
128+
let prefix = pydio.getPluginConfigs('action.share').get('SHARED_USERS_TMP_PREFIX');
128129
basicParameters.push({
129130
description: MessageHash['533'],
130131
editable: false,
@@ -133,7 +134,8 @@
133134
name: "new_user_id",
134135
scope: "user",
135136
type: "string",
136-
mandatory: "true"
137+
mandatory: "true",
138+
"default": prefix ? prefix : ''
137139
},{
138140
description: MessageHash['534'],
139141
editable: "true",
@@ -143,15 +145,6 @@
143145
scope: "user",
144146
type: "valid-password",
145147
mandatory: "true"
146-
},{
147-
description: MessageHash['536'],
148-
editable: "true",
149-
expose: "true",
150-
label: MessageHash['535'],
151-
name: "send_email",
152-
scope: "user",
153-
type: "boolean",
154-
mandatory: true
155148
});
156149

157150
var params = global.pydio.getPluginConfigs('conf').get('NEWUSERS_EDIT_PARAMETERS').split(',');
@@ -162,6 +155,16 @@
162155
PydioForm.Manager.parseParameters(global.pydio.getXmlRegistry(), xPath).map(function(el){
163156
basicParameters.push(el);
164157
});
158+
basicParameters.push({
159+
description: MessageHash['536'],
160+
editable: "true",
161+
expose: "true",
162+
label: MessageHash['535'],
163+
name: "send_email",
164+
scope: "user",
165+
type: "boolean",
166+
mandatory: true
167+
});
165168
return basicParameters;
166169
}
167170

@@ -172,7 +175,7 @@
172175
static createUserFromPost(postValues, callback){
173176
postValues['get_action'] = 'user_create_user';
174177
PydioApi.getClient().request(postValues, function(transport){
175-
callback(postValues);
178+
callback(postValues, transport.responseJSON);
176179
}.bind(this));
177180
}
178181

core/src/plugins/gui.ajax/res/js/ui/prototype/class.AjxpUsersCompleter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ Class.create("AjxpUsersCompleter", Ajax.Autocompleter, {
211211
conn.setMethod("POST");
212212
var success = false;
213213
conn.onComplete = function(transport){
214-
if(transport.responseText == 'SUCCESS'){
214+
if(transport.responseJSON['result'] === 'SUCCESS'){
215215
var id = createActionPanel.down('[name="new_user_id"]').getValue();
216216
var label = id;
217217
if(createActionPanel.down('[name="USER_DISPLAY_NAME"]')){

core/src/plugins/gui.ajax/res/js/ui/reactjs/jsx/UsersCompleter.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,13 @@
105105

106106
var prefix = PydioUsers.Client.getCreateUserPostPrefix();
107107
var values = this.refs['creationForm'].getValuesForPost(prefix);
108-
PydioUsers.Client.createUserFromPost(values, function(values){
109-
var id = values[prefix + 'new_user_id'];
108+
PydioUsers.Client.createUserFromPost(values, function(values, jsonReponse){
109+
let id;
110+
if(jsonReponse['createdUserId']){
111+
id = jsonReponse['createdUserId'];
112+
}else{
113+
id = values[prefix + 'new_user_id'];
114+
}
110115
var display = values[prefix + 'USER_DISPLAY_NAME'] || id;
111116
var fakeUser = new PydioUsers.User(id, display, 'user');
112117
this.props.onValueSelected(id, display, 'user', fakeUser);
@@ -186,9 +191,11 @@
186191
},
187192

188193
getInitialState: function(){
194+
let userPrefix = pydio.getPluginConfigs('action.share').get('SHARED_USERS_TMP_PREFIX');
195+
if(!userPrefix || this.props.newUserName.startsWith(userPrefix)) userPrefix = '';
189196
return {
190197
values:{
191-
new_user_id:this.props.newUserName,
198+
new_user_id:userPrefix + this.props.newUserName,
192199
lang:global.pydio.currentLanguage,
193200
new_password:'',
194201
send_email:true

0 commit comments

Comments
 (0)