API Website Add

Dieses Thema im Forum "Installation und Konfiguration" wurde erstellt von Germanius, 19. Dez. 2010.

  1. Germanius

    Germanius New Member

    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
     
  2. Till

    Till Administrator

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

    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. Germanius

    Germanius New Member

    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?
     
  4. Till

    Till Administrator

    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?

    Ja, eine readonly website kann man darüber im Moment nicht erstellen. Wenn Du das brauchst, kannst Du ja ggf. die API erweitern.
     
  5. Germanius

    Germanius New Member

    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?

    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.
     
  6. Till

    Till Administrator

    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. Germanius

    Germanius New Member

    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. Germanius

    Germanius New Member

    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. Germanius

    Germanius New Member

    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?
     
  10. Till

    Till Administrator

    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.

    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. Horfic

    Horfic New Member

    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. Germanius

    Germanius New Member

    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!
     

Diese Seite empfehlen