API Website Add

#1
Habe über die API eine Website erstellt. Funktioniert soweit auch alles wunderbar. Wenn ich die erstellte Website über den admin Login anschaue sieht auch alles gut aus. Wenn ich mich dann jedoch als Client einlogge, befindet sich im Feld IP-Adresse nur das *. Man kann auch nichts anderes auswählen. Über den admin Login steht da die korrekte IP.
Falls es relevant ist, ich benutze das Domaintool und habe die Website über die API erstellt ohne die Domain vorher im System hinzuzufügen. Danach habe ich diese hinzugefügt.
Das hat den Hintergrund, dass ich in einem Rutsch den Client Account erstelle und gleich danach die Website anlege. API Funktion für Domain im Domaintool erstellen gibts leider noch nicht.
Was mir auch aufgefallen ist: Die Einstellungen in der Website kann der Client bearbeiten, was er eigentlich nicht sollte. Wenn ich in die Mysqltabellen schaue steht da auch bei sys_userid nicht das, was ich über die API angegeben. Eigentlich sollte dort 1 stehen. Da steht nun aber dasselbe wie in der sys_groupid
 

Till

Administrator
#2
Das Domaintool wird von der remote API noch nicht unterstützt.

Wenn ich in die Mysqltabellen schaue steht da auch bei sys_userid nicht das, was ich über die API angegeben. Eigentlich sollte dort 1 stehen. Da steht nun aber dasselbe wie in der sys_groupid
Du kannst die sys_userid auch nicht über die API angeben. sys_userid ist eine interne ID, die wird immer vom system vergeben. Verwechgsle die sys_userid bitte nicht mit der client_id, in der API gibst Du die client_id an, die zum Client dazugehörige sys_userid wird automatisch vom system automatisch eingetragen.
 
#3
Warum wird dann beim Client nur * bei der IP angezeigt (was anderes gibts als Client dort nicht)? Über die Adminoberfläche steht es aber richtig mit der IP.

Wenn man die sys_userid nicht über die API angeben kann, dann kann man also über die API keine Website erstellen, die der Client nicht ändern kann?
 

Till

Administrator
#4
Warum wird dann beim Client nur * bei der IP angezeigt (was anderes gibts als Client dort nicht)? Über die Adminoberfläche steht es aber richtig mit der IP.
Kann ich Dir so nicht sagen. Müsstest Du ggf. im Code debuggen. Steht denn auch bei über das Interface angelegten Webseiten nur * zur Verfügung?

Wenn man die sys_userid nicht über die API angeben kann, dann kann man also über die API keine Website erstellen, die der Client nicht ändern kann?
Ja, eine readonly website kann man darüber im Moment nicht erstellen. Wenn Du das brauchst, kannst Du ja ggf. die API erweitern.
 
#5
Hmm.. hab bei demselben Kunden gerad eine Website über das Interface hinzugefügt und auch wieder die entsprechende IP gewählt. Aber wenn ich mich über den Kunden einlogge steht da wieder nur *.

Dann vermute ich mal, dass es daran liegt, dass ich den Kunden über die API erstellt habe. Bei allen anderen geht es nämlich. Muss man beim Kundenerstellen irgendwas bzgl. der IP-Adressen beachten oder ist das ein Bug?

Ja, eine readonly website kann man darüber im Moment nicht erstellen. Wenn Du das brauchst, kannst Du ja ggf. die API erweitern.
Würd ich gern, aber dafür reichen meine PHP-Kenntnisse wohl nicht aus ;) Außerdem macht das Websiteerstellen im readonly-Modus nur noch so lange Sinn, wie der Client die IP frei wählen kann und SSL aktivieren kann. Soweit ich weiß wird das in kommenden Versionen einstellbar? Dann brauch man eigentlich keine read-only Websites mehr erstellen. Sofern es dann auch eine Funktion gibt, um Domains im Domaintool hinzuzufügen.
 

Till

Administrator
#6
Dann vermute ich mal, dass es daran liegt, dass ich den Kunden über die API erstellt habe. Bei allen anderen geht es nämlich. Muss man beim Kundenerstellen irgendwas bzgl. der IP-Adressen beachten oder ist das ein Bug?
Kann ich so allgemein nicht beantwrten. Bis jetzt hat niemand einen entsprechenden Bug gemeldet. Müsste man vermutlich mal die Berechtigungen eines manuell mit einem per API angelegten Users in den sys_user und sys_group Tabellen vergleichen.
 
#7
Müsste man vermutlich mal die Berechtigungen eines manuell mit einem per API angelegten Users in den sys_user und sys_group Tabellen vergleichen.
Wenn du mir sagst wie, kann ich das gerne machen. Hab leider keine Ahnung :)

In der web_domain Tabelle stehen eigentlich alle korrekten Werte drin. Bei der ipaddress auch die, die ich über die API angegeben hab. Wenn ich dann einmal über den CLient die Website bearbeite speichert er *, weil man ja nix anderes auswählen kann.
 
#8
Okay, hab die Lösung gefunden.
Hab den Client in dem Paramsarray mit Hilfe eines Templates erstellt und dabei vergessen Standard Mailserver, Webserver etc. zu setzen. Damit gehts.
 
#9
Ja, eine readonly website kann man darüber im Moment nicht erstellen. Wenn Du das brauchst, kannst Du ja ggf. die API erweitern.
Da würd ich gern nochmal drauf zurückkommen.
Kannst du mir ein paar Tipps geben wo ich da ansetzen muss?

Neue Funktionen kommen hier rein /usr/local/ispconfig/interface/lib/classes/remoting.inc.php dann muss ich noch die Freigaben hier hinzufügen /usr/local/ispconfig/interface/web/admin/form/remote_user.tform.php aber wie kann man z.B. die Domain-Add-Funktion so erweitern, dass man auch die sys_userid angeben kann?
 

Till

Administrator
#10
Die sys_userid sollte man an sich nicht übergeben können, da sie ein interner Wert von ispconfig ist. Denn theoretisch kann jeder client beliebig viele sys_user logins haben, somit kannst Du auch nicht mittels sys_userid alle Einträge eines Clients selektieren sondern wenn dann nur über die Gruppe, welche über die client_id bestimmt werden kann. daher verwendet das API durchgehend überall die client_id und nicht sys_userid.

Alle Remoting Funktionen Funktionen kommen in die /usr/local/ispconfig/interface/lib/classes/remoting.inc.php datei.

/usr/local/ispconfig/interface/web/admin/form/remote_user.tform.php aber wie kann man z.B. die Domain-Add-Funktion so erweitern, dass man auch die sys_userid angeben kann?
Ich würde die Funktion so erweitern:

sites_web_domain_add($session_id, $client_id, $params)

zu:

sites_web_domain_add($session_id, $client_id, $params, $readonly = false)

dann bleibt standardmäßig das bisherige Verhalten und Du kannst einen zusätzlichen parameter übergeben, damit die Webseite readonly ist.

Dann musst Du noch in der Funktion code einfügen, welcher die Änderungen an den sys_perm* Feldern durchführt. Also ein sql update absetzen und als where Bedingung z.B. die Domain nehmen, die hast Du ja im params Array.
 
#11
Kann man ned einfach den sys_userid auf 1 setzten statt die sys_perm* zu ändern? Weil das macht ja ISPConfig ja auch wenn der admin eine seite anlegt, dann kann der user nur die anderen seiten bearbeiten aber ned die erste.
 
#12
Hier noch die drei Funktionen fürs Domaintool:

/interface/lib/classes/remoting.in.php
PHP:
//* Get record details
    public function domains_domain_get($session_id, $primary_id)
    {
        global $app;
        
        if(!$this->checkPerm($session_id, 'domains_domain_get')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $app->uses('remoting_lib');
        $app->remoting_lib->loadFormDef('../domain/form/domain.tform.php');
        return $app->remoting_lib->getDataRecord($primary_id);
    }

    //* Add a record
    public function domains_domain_add($session_id, $client_id, $params)
    {
        if(!$this->checkPerm($session_id, 'domains_domain_add')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        return $this->insertQuery('../domain/form/domain.tform.php',$client_id,$params);
    }

    //* Delete a record
    public function domains_domain_delete($session_id, $primary_id)
    {
        if(!$this->checkPerm($session_id, 'domains_domain_delete')) {
            $this->server->fault('permission_denied', 'You do not have the permissions to access this function.');
            return false;
        }
        $affected_rows = $this->deleteQuery('../domain/form/domain.tform.php',$primary_id);
        return $affected_rows;
    }
/interface/web/admin/form/remote_user.tform.php
PHP:
$function_list['domains_domain_get,domains_domain_add,domains_domain_delete'] = 'Domaintool functions';
Die Funktion, um Websites read only anzulegen, hat Horfic glaub ich schon ins SVN geladen. Danke nochmal dafür!
 

Werbung

Top