login  Naam:   Wachtwoord: 
Registreer je!
 Forum

DirectAdmin Api Create User

Offline Alexjeee - 11/10/2014 12:35
Avatar van AlexjeeeLid Beste,

Ik ben bezig met me website, hierin maak ik verbinding met DirectAdmin (Beheer een eige server). De connectie etc is goed, maar als mijn script de opdracht geeft om een gebruiker aan te maken op DirectAdmin geeft die aan dat de gebruikers succesvol is gewijzigd. Maar hij voegt de gebruiker niet toe op DirectAdmin. Kunnen jullie me helpen?

  1. &#8203;<?php
  2. if(!defined('ALPHA') || ALPHA !== 1) {
  3. die('GO F*CK YOURSELF!');
  4. }
  5.  
  6. if(!defined('CHARLIE')) {
  7. define('CHARLIE', 1);
  8. }
  9.  
  10. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  11. $Aerror = array();
  12. foreach($_POST['uid'] as $int => $id) {
  13. if(isset($_POST['user'][$int]) && $_POST['user'][$int] == 1) {
  14. $value = 1;
  15. }else{
  16. $value = 0;
  17. }
  18.  
  19. $Asql = "UPDATE users SET activated = ".(int) $value." WHERE id = ".(int) $id;
  20. $Aquery = mysql_query($Asql) or ($Aerror[] = 'Failed to update userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  21.  
  22. if($value == 1) {
  23. $Bsql = "SELECT users.*, packages.name as pName FROM users LEFT OUTER JOIN packages ON (users.package = packages.id) WHERE users.id = ".(int) $id." LIMIT 1";
  24. $Bquery = mysql_query($Bsql) or ($Aerror[] = 'Failed to select data for userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  25. $Brow = mysql_fetch_assoc($Bquery);
  26.  
  27. $da->query('/CMD_API_ACCOUNT_USER', array('action' => 'create',
  28. 'add' => 'Submit',
  29. 'username' => $Brow['user'],
  30. 'email' => $Brow['email'],
  31. 'passwd' => base64_decode($Brow['pass']),
  32. 'passwd2' => base64_decode($Brow['pass']),
  33. 'domain' => $Brow['domain'],
  34. 'package' => $Brow['pName'],
  35. 'ip' => $das['host'],
  36. 'notify' => 'yes'));
  37. $results = $da->fetch_parsed_body();
  38. if($results['error'] == 1) {
  39. $Aerror[] = 'Failed to create user in DirectAdmin due too: <b>'.html_entity_decode($results['text']).'</b>';
  40. }
  41. }
  42. }
  43.  
  44. if(count($Aerror) != 0) {
  45. ?>


Alvast Bedankt!

39 antwoorden

Gesponsorde links
Offline Thomas - 11/10/2014 13:12
Avatar van Thomas Moderator Zie zo gauw weinig vreemds, behalve $das['host'], waar komt $das vandaan?

Also: base64 encoded wachtwoorden... Lolwut?
Offline Alexjeee - 11/10/2014 13:18
Avatar van Alexjeee Lid $das['host'] maakt die verbinding mee in de configuratie bestand met DirectAdmin.
base_64 encoded vraagt die om. Ik heb daar niet zoveel verstand van. Maar dat is waarschijnlijk een verplichting voor Directadmin
Offline Thomas - 11/10/2014 13:33
Avatar van Thomas Moderator Ik zou je script wat meer "verbose" maken, oftewel, dump informatie tussentijds naar je scherm, zodat je stap voor stap ziet wat er gebeurt, dat maakt het localiseren van de plaats waar er dingen fout gaan waarschijnlijk wat makkelijker.

Levert $Bquery bijvoorbeeld wel een resultaat op?
Offline Alexjeee - 11/10/2014 14:39 (laatste wijziging 12/10/2014 14:42)
Avatar van Alexjeee Lid Hoe kan ik dat dan het beste controleren?
Hij haalt de gegevens wel op,

Dit is mijn volledige code:
EDIT: verplaatst naar plaatscode
Plaatscode: 142385
Offline Thomas - 11/10/2014 15:28
Avatar van Thomas Moderator Druk "inline" waarden af naar je scherm, zodat je concrete waarden ziet, desnoods stap voor stap.

Zoiets dus:


  1. <?php
  2. function dump($in) {
  3. if (is_array($in)) {
  4. echo '<pre>'.print_r($in, true).'</pre>';
  5. } else {
  6. echo $in.'<br />';
  7. }
  8. }
  9.  
  10. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  11. dump('posting...');
  12. $Aerror = array();
  13. foreach($_POST['uid'] as $int => $id) {
  14. if (isset($_POST['user'][$int]) && $_POST['user'][$int] == 1) {
  15. $value = 1;
  16. } else {
  17. $value = 0;
  18. }
  19. dump('user '.$id.' value '.$value);
  20.  
  21. $Asql = "UPDATE users SET activated = ".(int) $value." WHERE id = ".(int) $id;
  22. dump('query: '.$Asql);
  23. $Aquery = mysql_query($Asql) or ($Aerror[] = 'Failed to update userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  24. dump('results: '.mysql_num_rows($Aquery));
  25. if($value == 1) {
  26. $Bsql = "SELECT users.*, packages.name as pName FROM users LEFT OUTER JOIN packages ON (users.package = packages.id) WHERE users.id = ".(int) $id." LIMIT 1";
  27. dump('query: '.$Bsql);
  28. $Bquery = mysql_query($Bsql) or ($Aerror[] = 'Failed to select data for userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  29. dump('results '.mysql_num_rows($Bquery));
  30. $Brow = mysql_fetch_assoc($Bquery);
  31. $da->query('/CMD_API_ACCOUNT_USER', array(
  32. 'action' => 'create',
  33. 'add' => 'Submit',
  34. 'username' => $Brow['user'],
  35. 'email' => $Brow['email'],
  36. 'passwd' => base64_decode($Brow['pass']),
  37. 'passwd2' => base64_decode($Brow['pass']),
  38. 'domain' => $Brow['domain'],
  39. 'package' => $Brow['pName'],
  40. 'ip' => $das['host'],
  41. 'notify' => 'yes',
  42. ));
  43. $results = $da->fetch_parsed_body();
  44. dump('DA results:');
  45. dump($results);
  46. if($results['error'] == 1) {
  47. $Aerror[] = 'Failed to create user in DirectAdmin due too: <b>'.html_entity_decode($results['text']).'</b>';
  48. }
  49. }
  50. }
  51. // ... et cetera
  52. }
  53. ?>
Offline Alexjeee - 12/10/2014 00:26
Avatar van Alexjeee Lid Okee, dat is me nu allemaal gelukt, er hebben 2 variabelen een NULL gegeven. Maar nu blijf ik met de volgende melding zitten:

Notice: Undefined index: error in /home/admin/domains/svghosting.nl/public_html/acp/modules/profile/activate.php on line 40 Notice: Undefined index: text in /home/admin/domains/svghosting.nl/public_html/acp/modules/profile/activate.php on line 41 Notice: Undefined index: error in /home/admin/domains/svghosting.nl/public_html/acp/modules/profile/activate.php on line 40 Notice: Undefined index: text in /home/admin/domains/svghosting.nl/public_html/acp/modules/profile/activate.php on line 41

  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. if(!defined('ALPHA') || ALPHA !== 1) {
  5. die('GO F*CK YOURSELF!');
  6. }
  7.  
  8. if(!defined('CHARLIE')) {
  9. define('CHARLIE', 1);
  10. }
  11.  
  12. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  13. $Aerror = array();
  14. foreach($_POST['uid'] as $int => $id) {
  15. if(isset($_POST['user'][$int]) && $_POST['user'][$int] == 1) {
  16. $value = 1;
  17. }else{
  18. $value = 0;
  19. }
  20.  
  21. $Asql = "UPDATE users SET activated = ".(int) $value." WHERE id = ".(int) $id;
  22. $Aquery = mysql_query($Asql) or ($Aerror[] = 'Failed to update userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  23.  
  24. if($value == 1) {
  25. $Bsql = "SELECT users.*, packages.name as pName FROM users LEFT OUTER JOIN packages ON (users.package = packages.id) WHERE users.id = ".(int) $id." LIMIT 1";
  26. $Bquery = mysql_query($Bsql) or ($Aerror[] = 'Failed to select data for userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  27. $Brow = mysql_fetch_assoc($Bquery);
  28.  
  29. $da->query('/CMD_API_ACCOUNT_USER', array('action' => 'create',
  30. 'add' => 'Submit',
  31. 'username' => $Brow['user'],
  32. 'email' => $Brow['email'],
  33. 'passwd' => base64_decode($Brow['pass']),
  34. 'passwd2' => base64_decode($Brow['pass']),
  35. 'package' => $Brow['pName'],
  36. 'ip' => $das['host'],
  37. 'notify' => 'yes'));
  38. $results = $da->fetch_parsed_body();
  39. if($results['error'] == 0) {
  40. $Aerror[] = 'Failed to create user in DirectAdmin due too: <b>'.html_entity_decode($results['text']).'</b>';
  41. }
  42. }
  43. }
  44. if(count($Aerror) != 1) {
  45. ?>


Het zit hem op de regel van if($results['error'] == 0) ( en die daaronder.
maar ik probeer er een isset van te maken, maar dat lukt ook niet.
Offline Thomas - 12/10/2014 14:23 (laatste wijziging 12/10/2014 14:30)
Avatar van Thomas Moderator Dump dan eens $results, zoals ik in mijn vorig bericht al aangaf (regel 44, 45 van mijn fragment).
EDIT: dit is dan een lege string waarschijnlijk.

Waarschijnlijk is er dus iets mis in (EDIT: het gebruik van) je DirectAdmin (wrapper) class...
Offline Alexjeee - 12/10/2014 14:30 (laatste wijziging 12/10/2014 14:41)
Avatar van Alexjeee Lid Als ik die $results dump krijg ik deze melding in ze geheel:

DA results:
Array
(
)
DA results:
Array
(
)

Je bedoeld dan de httpsocket?

Dit is me httpsocket
EDIT: verplaatst naar pastebin
Plaatscode: 142384
Offline Thomas - 12/10/2014 14:36 (laatste wijziging 12/10/2014 14:40)
Avatar van Thomas Moderator Als ik de API mag geloven, krijg je ook text terug als het toevoegen succesvol is? Het feit dat dat niet gebeurt, in combinatie met het ontbreken van je nieuwe gebruiker wil waarschijnlijk zeggen dat je DirectAdmin commando-aanroep op een of andere manier niet klopt.

Zou het zo simpel kunnen zijn dat die slash in /CMD_API_ACCOUNT_USER eruit moet?

Produceert die wrapper class zelf geen errors? Kun je die niet in een debug-modus zetten ofzo?

Zonder code/documentatie daarvan wordt dit nogal lastig lijkt mij...

EDIT: okay, hoe maak je een "connectie" met je DirectAdmin, doe je dit via poort 2222?

EDIT: laat ik de vraag anders stellen, welke klasse gebruik je voor het aanmaken van het $da object, en hoe luiden de parameters bij creatie?
Offline Alexjeee - 12/10/2014 14:42
Avatar van Alexjeee Lid Ik krijg inderdaad tekst terug als de gebruiker is toegevoegd. Alles heeft eerder al gewoon gewerkt, of kreeg de melding dat het goed gegaan was maar de gebruiker zelf was niet aan DirectAdmin toegvoegd.

Het verwijderen van de "/" heeft niks uitgehaald helaas. Tevens heb ik DA al een keer in debug mode gedraaid, wat ik wel opmerk is dat ik nergens terug vindt dat hij de class /CMD_API_ACCOUNT_USER ophaalt of pakt of hoe je het ook wilt noemen. Ik heb het al een aantal keer anagepast naar een andere waarde zoals CMD_ACCOUNT_* maar ook dat mocht niet baten.
Offline Thomas - 12/10/2014 14:43
Avatar van Thomas Moderator EDIT: laat ik de vraag anders stellen, welke klasse gebruik je voor het aanmaken van het $da object, en hoe luiden de parameters bij creatie?
Offline Alexjeee - 12/10/2014 14:47 (laatste wijziging 12/10/2014 14:49)
Avatar van Alexjeee Lid Okee, die vraag snap ik niet echt helemaal
Ik gebruik alleen de httpsocket als class, verder gebruik ik geen classes.

Ik kwam wel dit tegen op de DA site:
Maar hoe ik dat moet integreren met het feit dat ik al een conf.php heb waarin de server host wordt opgehaald en ik html ook nog is gebruik in de aanmaak zelf en mysql querys gebruik



  1. <?
  2.  
  3. include 'httpsocket.php';
  4.  
  5. $server_ip="11.22.33.44"; //IP that User is assigned to
  6. $server_login="admin";
  7. $server_pass="yourpass";
  8. $server_host="127.0.0.1"; //where the API connects to
  9. $server_ssl="N";
  10. $server_port=2222;
  11.  
  12. if (isset($_POST['action']) && $_POST['action'] == "add")
  13. {
  14.  
  15. $username=$_POST['username'];
  16. $domain=$_POST['domain'];
  17. $email=$_POST['email'];
  18. $pass=$_POST['pass'];
  19. $package=$_POST['package'];
  20.  
  21.  
  22. echo "Creating user $username on $server_ip.... <br>\n";
  23.  
  24. $sock = new HTTPSocket;
  25. if ($server_ssl == 'Y')
  26. {
  27. $sock->connect("ssl://".$server_host, $server_port);
  28. }
  29. else
  30. {
  31. $sock->connect($server_host, $server_port);
  32. }
  33.  
  34. $sock->set_login($server_login,$server_pass);
  35.  
  36. $sock->query('/CMD_API_ACCOUNT_USER',
  37. 'action' => 'create',
  38. 'add' => 'Submit',
  39. 'username' => $username,
  40. 'email' => $email,
  41. 'passwd' => $pass,
  42. 'passwd2' => $pass,
  43. 'domain' => $domain,
  44. 'package' => $package,
  45. 'ip' => $server_ip,
  46. 'notify' => 'yes'
  47. ));
  48.  
  49. $result = $sock->fetch_parsed_body();
  50.  
  51. if ($result['error'] != "0")
  52. {
  53. echo "<b>Error Creating user $username on server $server_ip:<br>\n";
  54. echo $result['text']."<br>\n";
  55. echo $result['details']."<br></b>\n";
  56. }
  57. else
  58. {
  59. echo "User $username created on server $server_ip<br>\n";
  60. }
  61.  
  62. exit(0);
  63. }
  64.  
  65. echo "Will connect to: ".($server_ssl == "Y" ? "https" : "http")."://".$server_host.":".$server_port."<br>\n";
  66.  
  67. ?>
  68.  
  69.  
  70. <form action='?' method="POST">
  71. <input type=hidden name=action value="add">
  72. Username: <input type=text name=username><br>
  73. Domain:<input type=text name=domain><br>
  74. Email: <input type=text name=email><br>
  75. Pass: <input type=password name=pass><br>
  76. Packge: <input type=text name=package><br>
  77. </form>
  78.  
  79.  
  80. **Note: do not use this php file exactly as it is. It's only to demonstrate the basics of the api.
  81. You *must* do form checking to ensure safe values are passed.
  82. Also, it's a really bad and very insecure practice to put a form like this publicly on your website for anyone to use.
  83. If you do, you'll end up with a server full users you did not create (this script creates accounts without any involvment with an admin: bad)
Offline Thomas - 12/10/2014 14:51 (laatste wijziging 12/10/2014 14:55)
Avatar van Thomas Moderator Op regel 27 van je oorspronkelijke bericht doe je het volgende:

$da->query(<commando>, <parameters>)

en op regel 37:

$results = $da->fetch_parsed_body();

Mijn vraag: waar wordt $da gedeclareerd?

Ergens in je code staat waarschijnlijk zoiets:

$da = new <klasse>(<parameters>);

Mijn vraag: hoe luidt de klassenaam (oftewel, welke class of library gebruik je om te communiceren met DirectAdmin)?

Mijn vraag: hoe luiden de parameters (eventuele namen en wachtwoorden dien je uiteraard te anonimiseren)? Dit om uit te sluiten dat er een mogelijke configuratie-fout in zit. DirectAdmin luistert standaard op poort 2222 volgens mij. Als je daar je verzoeken niet naartoe stuurt, dan is het niet zo vreemd dat er niets gebeurt...

EDIT: Maakt jouw DirectAdmin gebruik van SSL?
EDIT: Ik weet niet of 127.0.0.1 als host zo'n strak plan is.
Offline Alexjeee - 12/10/2014 14:56 (laatste wijziging 12/10/2014 14:57)
Avatar van Alexjeee Lid Dit is mijn hele code van die pagina:
Zoals ik uit jou bericht begrijp moet er dus ergens verbinding gemaakt worden met DirectAdmin met de inlog gegevens. Dit gebeurd aan de hand van de gebruiker die inlogt op de website. Mijn gebruikersnaam en wachtwoord op me website verbinden zich met DirectAdmin en loggen daardoor ook in op DirectAdmin, want hij haalt wel de gegevens op van DirectAdmin ik kan gewoon me verbruik enz zien.

EDIT: 172.0.0.1 is ook niet mijn ipadres hoor.
EDIT: Hij maakt inderdaad gebruik van SSL


  1. <?php
  2. ini_set('display_errors', 0);
  3.  
  4. function dump($in) {
  5. if (is_array($in)) {
  6. echo '<pre>'.print_r($in, true).'</pre>';
  7. } else {
  8. echo $in.'<br />';
  9. }
  10. }
  11.  
  12. if(!defined('ALPHA') || ALPHA !== 1) {
  13. die('GO F*CK YOURSELF!');
  14. }
  15.  
  16. if(!defined('CHARLIE')) {
  17. define('CHARLIE', 1);
  18. }
  19.  
  20. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  21. $Aerror = array();
  22. foreach($_POST['uid'] as $int => $id) {
  23. if(isset($_POST['user'][$int]) && $_POST['user'][$int] == 1) {
  24. $value = 1;
  25. }else{
  26. $value = 0;
  27. }
  28.  
  29. $Asql = "UPDATE users SET activated = ".(int) $value." WHERE id = ".(int) $id;
  30. $Aquery = mysql_query($Asql) or ($Aerror[] = 'Failed to update userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  31.  
  32. if($value == 1) {
  33. $Bsql = "SELECT users.*, packages.name as pName FROM users LEFT OUTER JOIN packages ON (users.package = packages.id) WHERE users.id = ".(int) $id." LIMIT 1";
  34. $Bquery = mysql_query($Bsql) or ($Aerror[] = 'Failed to select data for userid: <b>'.$id.'<b>; due too: <b>'.mysql_error().'</b>');
  35. $Brow = mysql_fetch_assoc($Bquery);
  36.  
  37. $da->query('CMD_API_ACCOUNT_USER', array('action' => 'create',
  38. 'add' => 'Submit',
  39. 'username' => $Brow['user'],
  40. 'email' => $Brow['email'],
  41. 'passwd' => base64_decode($Brow['pass']),
  42. 'passwd2' => base64_decode($Brow['pass']),
  43. 'package' => $Brow['pName'],
  44. 'ip' => $das['host'],
  45. 'notify' => 'yes'));
  46. $results = $da->fetch_parsed_body();
  47. dump('DA results:');
  48. dump($results);
  49. if($results['error'] == 0) {
  50. $Aerror[] = 'Failed to create user in DirectAdmin due too: <b>'.html_entity_decode($results['text']).'</b>';
  51. }
  52. }
  53. }
  54. if(count($Aerror) != 1) {
  55. ?>
  56. <div class="alert">
  57. <div class="alert-top"></div>
  58.  
  59. <p>Error</p>
  60. <div class='ha'></div>
  61.  
  62. <div class="p">
  63. <img src="/images/alert/melding.png" alt="Alert" style="float: left; margin-right: 10px;" />
  64. <div style="float: left; width: 790px;">
  65. <p style="padding-left: 0px;">(de)Activeren van gebruikers mislukt door volgende fouten:</p><br />
  66. <?php
  67. foreach($Aerror as $id => $error) {
  68. $message = '<small style="padding-left: 10px;">Error id: <b style="color: #FF0000;">'.$id.'</b>; Error: <span style="color: #FF0000;">'.$error.'</span></small>';
  69. echo wordwrap($message, 400, '<br />', true);
  70. echo '<br />';
  71. }
  72. ?>
  73. </div>
  74. </div>
  75.  
  76. <div class="alert-footer"></div>
  77. </div>
  78. <br /><br />
  79. <?php
  80. }else{
  81. ?>
  82. <div class="alert">
  83. <div class="alert-top"></div>
  84.  
  85. <p>Succes</p>
  86. <div class='ha'></div>
  87.  
  88. <div class="p">
  89. <img src="/images/melding.png" alt="Alert" style="float: left; margin-right: 10px;" />
  90. <div style="float: left; width: 790px;">
  91. <?php
  92. echo '<p style="padding-left: 0px;">Alle gebruikers zijn succesvol ge(de)activeerd</p>';
  93. header('refresh: 3; url=/acp/?p='.$_GET['p'].'&part='.$_GET['part'].'');
  94. ?>
  95. </div>
  96. </div>
  97.  
  98. <div class="alert-footer"></div>
  99. </div>
  100. <br /><br />
  101. <?php
  102. }
  103. }
  104.  
  105. include $_SERVER['DOCUMENT_ROOT'].'/includes/'.$langs.'/profile/usage.php';
  106. ?>
  107.  
  108. <div id="show-content">
  109. <div class="show-content-top"></div>
  110. <p><a href="/acp/" class="a_p">ACP</a> - <a href="/acp/?p=<?=$_GET['p']; ?>&part=<?=$_GET['part']; ?>" class="a_p">(de)Activeer gebruikers accounts</a></p>
  111. <div class='hr'></div>
  112. <div class="p">
  113. <?php
  114.  
  115. ?>
  116. <div style="margin: 0 auto; width: 550px; height: 28px; background-color: #000000; border-top: 1px solid #333; border-left: 1px solid #333; border-right: 1px solid #333;">
  117. <div style="position: relative; width: 120px; height: 25px; float: left;">
  118. <span style="position: absolute; padding-left: 10px; padding-top: 5px;">
  119. <b>Gebruikersnaam:</b>
  120. </span>
  121. </div>
  122.  
  123. <div style="position: relative; width: 80px; height: 25px; float: left;">
  124. <span style="position: absolute; padding-left: 10px; padding-top: 5px;">
  125. <b>Pakket:</b>
  126. </span>
  127. </div>
  128.  
  129. <div style="position: relative; width: 160px; height: 25px; float: left;">
  130. <span style="position: absolute; padding-left: 10px; padding-top: 5px;">
  131. <b>E-mail:</b>
  132. </span>
  133. </div>
  134.  
  135. <div style="position: relative; width: 110px; height: 25px; float: left;">
  136. <span style="position: absolute; padding-left: 10px; padding-top: 5px;">
  137. <b>Telefoon:</b>
  138. </span>
  139. </div>
  140.  
  141. <div style="position: relative; width: 50px; height: 25px; float: left;">
  142. <span style="position: absolute; padding-left: 10px; padding-top: 5px;">
  143. <b>Activeer:</b>
  144. </span>
  145. </div>
  146. <div style="clear: left;"></div>
  147. </div>
  148.  
  149. <form method="post" action="">
  150. <?php
  151. $Bsql = "SELECT users.*, packages.name as packName FROM users\n LEFT OUTER JOIN packages ON (packages.id = users.package)\n";
  152. $Bquery = mysql_query($Bsql);
  153. $i = 0;
  154. while(false !== ($Brow = mysql_fetch_assoc($Bquery))) {
  155. if($i % 2 == 0) {
  156. $col = "#000000";
  157. }else{
  158. $col = "#a5f0ff";
  159. }
  160. ?>
  161. <div style="margin: 0 auto; width: 550px; height: 22px; background-color: <?=$col; ?>; border-top: 1px solid #333; border-left: 1px solid #333; border-right: 1px solid #333;">
  162. <div style="position: relative; width: 120px; height: 20px; float: left;">
  163. <span style="position: absolute; padding-left: 10px; padding-top: 2px;">
  164. <input type="hidden" name="uid[<?=$i; ?>]" value="<?=$Brow['id']; ?>" />
  165. <?=(!empty($Brow['user'])) ? $Brow['user'] : '&nbsp;'; ?>
  166. </span>
  167. </div>
  168.  
  169. <div style="position: relative; width: 80px; height: 20px; float: left;">
  170. <span style="position: absolute; padding-left: 10px; padding-top: 2px;">
  171. <?=(!empty($Brow['packName'])) ? $Brow['packName'] : '&nbsp;'; ?>
  172. </span>
  173. </div>
  174.  
  175. <div style="position: relative; width: 160px; height: 20px; float: left;">
  176. <span style="position: absolute; padding-left: 10px; padding-top: 2px;">
  177. <?=(!empty($Brow['email'])) ? $Brow['email'] : '&nbsp;'; ?>
  178. </span>
  179. </div>
  180.  
  181. <div style="position: relative; width: 120px; height: 20px; float: left;">
  182. <span style="position: absolute; padding-left: 10px; padding-top: 2px;">
  183. <?=(!empty($Brow['telefoon'])) ? $Brow['telefoon'] : '&nbsp;'; ?>
  184. </span>
  185. </div>
  186.  
  187. <div style="position: relative; width: 50px; height: 20px; float: left;">
  188. <span style="position: absolute; padding-left: 10px; padding-top: 2px;">
  189. <input type="checkbox" name="user[<?=$i; ?>]" <?=($Brow['activated'] == 1) ? 'checked="checked"' : ''; ?> value="1" />
  190. </span>
  191. </div>
  192. <div style="clear: left;"></div>
  193. </div>
  194. <?php
  195. $i++;
  196. }
  197. ?>
  198. <div style="margin: 0 auto; width: 550px; height: 28px; background-color: #000000; border-top: 1px solid #333; border-left: 1px solid #333; border-right: 1px solid #333; border-bottom: 1px solid #333;">
  199. <div style="position: relative; width: 550px; height: 25px; float: right;">
  200. <span style="position: absolute; right: 10px; padding-top: 3px;">
  201. <input type="submit" name="activate" value="(de)Activate" />
  202. </span>
  203. </div>
  204. </div>
  205. </form>
  206. </div>
  207.  
  208. <div class='show-content-footer'></div>
  209. </div>


DirectAdmin staat inderdaad op poort 2222.
Offline Thomas - 12/10/2014 14:59
Avatar van Thomas Moderator Heeft de gebruiker waarmee je een verbinding maakt wel het recht om nieuwe users aan te maken?
Offline Alexjeee - 12/10/2014 15:00
Avatar van Alexjeee Lid Dat is het admin account op DirectAdmin, dus lijkt me wel dat die dan ook standaard een nieuwe gebruiker mag aanmaken.
Offline Thomas - 12/10/2014 15:11 (laatste wijziging 12/10/2014 15:20)
Avatar van Thomas Moderator Mja, en daar doe je dus een aanname. Daar moet je wel mee oppassen als je een probleem aan het oplossen bent waarvan je de oorzaak nog niet weet.

Volgens de documentatie zijn er 3 typen gebruikers: users, resellers en admins. Het zijn de resellers die user-accounts aanmaken. Een admin is tevens een user en een reseller, maar wie zegt dat je dan niet (tijdelijk) van "modus" moet schakelen om als admin een user aan te maken?

EDIT: Wat heb je als HOST ingesteld als je een verbinding maakt met je site? (Mogelijk probleem: als op die machine meerdere (virtual) hosts zitten kun je met "localhost" geen site aanspreken lijkt mij)
EDIT: Tevens, maakt je DirectAdmin gebruik van HTTPS? (Mogelijk probleem: je communiceert via HTTP, terwijl je DA is opgezet via HTTPS)
Offline Alexjeee - 12/10/2014 15:19 (laatste wijziging 12/10/2014 15:21)
Avatar van Alexjeee Lid Dit is mijn config file:
Dus als ik het goed begrijp uit jou woorden, moet mijn account op wederverkoper niveau staan wil ik ene gebruiker kunnen laten aanmaken?

EDIT: Mijn directadmin maakt indd gebruik van HTTPS


  1. <?php
  2.  
  3. if(!defined('ALPHA') || ALPHA !== 1) {
  4. die('Deze pagina is niet rechtstreeks aan roepbaar!');
  5. }
  6.  
  7. if(!defined('BRAVO')) {
  8. define('BRAVO', true);
  9. }
  10.  
  11. include $_SERVER['DOCUMENT_ROOT'].'/conf/functions/datediff.php';
  12. include $_SERVER['DOCUMENT_ROOT'].'/conf/functions/log.php';
  13. include $_SERVER['DOCUMENT_ROOT'].'/conf/functions/ubb.php';
  14.  
  15. include $_SERVER['DOCUMENT_ROOT'].'/conf/classes/sidn_contract_gen.php';
  16. include $_SERVER['DOCUMENT_ROOT'].'/conf/classes/package_contract_gen.php';
  17. include $_SERVER['DOCUMENT_ROOT'].'/conf/classes/factuur_gen.php';
  18. include $_SERVER['DOCUMENT_ROOT'].'/conf/classes/login.php';
  19. include $_SERVER['DOCUMENT_ROOT'].'/conf/classes/httpsocket.php';
  20.  
  21. $db['host'] = 'localhost';
  22. $db['user'] = 'root';
  23. $db['pass'] = 'NIETZOSLIMHE';
  24. $db['db'] = 'LALALA';
  25.  
  26. $cron['logfile'] = 'crons/logs/log.%s.'.date('d-m-Y_H-i-s').'.txt';
  27.  
  28. $das['host'] = 'ssl://svghosting.nl';
  29.  
  30. mysql_connect($db['host'], $db['user'], $db['pass']);
  31. mysql_select_db($db['db']);
  32.  
  33. $login = new Login();
  34. $da = new HTTPSocket();
  35. $server_ssl="Y";
  36. ?>
Offline Thomas - 12/10/2014 15:24 (laatste wijziging 12/10/2014 15:25)
Avatar van Thomas Moderator Kijk, daar hebben we $da:

  1. <?php
  2. $da = new HTTPSocket();
  3. ?>


En waar stel je daar poort 2222 in? Of een host, for that matter.
Offline Alexjeee - 12/10/2014 15:29
Avatar van Alexjeee Lid Woow bedankt voor aanpassen van die gegevens trouwens hahaha,
ik heb nergens port 2222 toegewezen

de host staat $das['host'] = 'ssl://svghosting.nl';
Offline Thomas - 12/10/2014 15:32 (laatste wijziging 12/10/2014 15:38)
Avatar van Thomas Moderator Zucht, probeer het zo eens:

  1. <?php
  2. $da = new HTTPSocket('https://svghosting.nl', 2222);
  3. ?>


Dat werkt waarschijnlijk beter...

EDIT: hm, dat werkt waarschijnlijk nog steeds niet, want je bent niet geauthenticeerd .
Offline Alexjeee - 12/10/2014 15:39 (laatste wijziging 12/10/2014 15:44)
Avatar van Alexjeee Lid Hij geeft nu weer aan dat er geen gegevens van directadmin beschikbaar zijn en hij blijft de Array foutmeldingen aangeven. (Heb dit dus in me conf bestand aangepast)

EDIT: Dus nu logt die me niet in automatisch
Offline Thomas - 12/10/2014 15:46 (laatste wijziging 12/10/2014 15:52)
Avatar van Thomas Moderator Mja, wat je in principe doet met die HTTPSocket klasse is het simuleren van een browser (en haar requests). Maar die "virtuele browser" $da is dus niet aangemeld als admin, en mag dus ook niets doen waarvoor je admin-privileges nodig hebt.

Je moet je dus eerst op een of andere manier authenticeren voordat je admin-operaties kunt uitvoeren. Dat doe je waarschijnlijk met de set_login methode van die klasse.


Doe dus zoiets:


  1. <?php
  2. $da = new HTTPSocket();
  3. $da->connect('https://svghosting.nl', 2222);
  4. $da->set_login('<user>', '<pass>');
  5. ?>


Met <user> je DA admin username en <pass> je DA admin password.

Vervolgens zou je queries moeten kunnen uitvoeren waarvoor je admin-rechten nodig hebt.

EDIT: oops, die klasse heeft geeen constructor, gebruik connect() en vervolgens set_login().

Stond er nergens een voorbeeld van hoe je die klasse gebruikt? :/
Offline Alexjeee - 12/10/2014 15:51
Avatar van Alexjeee Lid Dat levert geen esultaat op. Hij haalt nog steeds geen gegevens op.
Maar het is ook de bedoeling dat hij inlogt op directadmin met de account gegevens waarmee je inlogt op de website.
Offline Thomas - 12/10/2014 15:52 (laatste wijziging 12/10/2014 15:53)
Avatar van Thomas Moderator Lees bovenstaande aangepaste reactie. Je kunt verbindingsparameters zelf altijd nog aanpassen. Je wilt idd niet dat users inloggen als admin...

Maar dat is niet ons huidige probleem, wel?
Offline Alexjeee - 12/10/2014 17:08 (laatste wijziging 12/10/2014 17:17)
Avatar van Alexjeee Lid Nee, ons huidige probleem is dat de gebruiker dus niet wordt aangepast. Maar zolang hij dus ook niet inlogt op DirectAdmin met het account waarmee ik inlog op de website zal hij denk ik dus ook niet de rechten ophalen.

Ik heb trouwens me config weer terug gezet je reactie leverde geen resultaat of verbinding op. Hij heeft nu weer gewoon verbinding, dus het is de hoe we het nu kunnen aanpakken. want hij blijft met die array foutmeldingen komen... Maar zoals je al eerder zij

moet ik is een account op wederverkopersniveau maken en dan kijken wat die doet?
Offline Thomas - 12/10/2014 17:14
Avatar van Thomas Moderator Heb je de bovenstaande aangepaste code geprobeerd?

  1. <?php
  2. $da = new HTTPSocket();
  3. $da->connect('https://svghosting.nl', 2222);
  4. $da->set_login('<user>', '<pass>');
  5. ?>


Die parameters uit configuratie halen in plaats van hardcoden is een triviale aanpassing voor later. Je wilt eerst iets werkends, het nadenken over een intelligentere/flexibelere oplossing kan altijd nog...
Offline Alexjeee - 12/10/2014 17:17 (laatste wijziging 12/10/2014 17:34)
Avatar van Alexjeee Lid Zie mijn aangepaste reactie hierboven 
Okee, met een wederverkopersniveau account werkt het dus ook niet.

Ik krijg per gebruiker dus die
Array
(
)

foutmelding.
Dus des te meer gebruikers in die lijst voorkomen, des te meer van die meldingen. Dus er gaat één ding fout bij het aanmaken van de gebruiker..
Alleen wat het precies is durf ik nog steeds niet te zeggen, ik heb de datbase en alles nagekeken en dat is gewoon goed.
Offline Thomas - 12/10/2014 17:40 (laatste wijziging 12/10/2014 17:44)
Avatar van Thomas Moderator Het opbouwen van de connectie gaat dus nou goed, alleen kun je dus nog geen gebruiker aanmaken via /CMD_API_ACCOUNT_USER correct?

Weet je heel zeker dat je de goede <user> en <pass> invult?

Weet je heel zeker dat de gegevens die je DA voert in het correcte formaat zijn? Zie de spec voor het aanmaken van een user. Zo gebruik je bijvoorbeeld een hostname ($das['host']) voor de kolom 'ip', die een IP-adres verwacht.

Ik zou zeggen, probeer weer informatie te dumpen, wellicht vertelt die je meer.

EDIT: omdat het waarschijnlijk vrij nauw komt met wat DA accepteert als geldige invoer, loont het wellicht de moeite om de invoer eerst te valideren, voordat je deze aan DA aanbiedt.
Offline Alexjeee - 12/10/2014 17:44
Avatar van Alexjeee Lid Dat is inderdaad correct, heb me config gewoon weer terug aangepast naar wat ik had. Hij laat nu gewoon de informatie zien van mijn account op de website, dus hij logt met de juiste gegevens in op DirectAdmin.

Ik kan die ($das['host'] weghalen.. even kijken wat er dan gebeurd. Volgens directadmin zou die dan automatisch een IP moeten toewijzen.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.312s