View Single Post
  #5 (permalink)  
Old 04-29-2010, 01:14 PM
Krishopper Krishopper is offline
Outstanding Member
 
Posts: 717
Default

I have a larger Zimbra class that I created, but am not quite ready to share with the world, so here are bits and pieces to get an AuthTok and create an account. Hope it helps.

Code:
$adminUser = "user@host.com";
$adminPass = "password";
$adminServer = "zenoss.example.com";

// Auth to the server and get auth token
$data = array(
    "Header" => array(
        "_jsns" => "urn:zimbra",
        "session" => null,
    ),
    "Body" => array(
        "AuthRequest" => array(
            "_jsns" => "urn:zimbraAdmin",
            "name" => $adminUser,
            "password" => $adminPass,
        ),
    ),
);

$ret = dorequest($data);
$authtok = $ret['authToken'][0]['_content'];


    /********************************************************************
     * Zimbra: CreateAccountRequest
     * arr = array(
     *     'name' => email address to create
     *    'password' => password to set on new account
     * );
     */

function zimbra_CreateAccountRequest($authtok, $arr) {
    $data = array(
         "Header" => array(
              "context" => array(
                   "_jsns" => "urn:zimbra",
                   "authToken" => array(
                        "_content" => $authtok,
                   ),
              ),
         ),
         "Body" => array(
              "CreateAccountRequest" => array(
                   "_jsns" => "urn:zimbraAdmin",
              ),
         ),
    );

    foreach ($arr as $key => $val) {
        if ($key == 'a') {
            $data['Body']['CreateAccountRequest'][$key] = $val;
        } else {
            $data['Body']['CreateAccountRequest'][$key] = 
                array('_content' => $val);
        }
    }
    
    print_r($data);
    $acct = array();
    $rv = $dorequest($data);
    return $rv;
}



function dorequest($data, $admin=true, $strip=true) {
    $js = json_encode($data);
    $url = ($admin ?
        sprintf("https://%s:7071/service/admin/soap/", $adminServer) :
        sprintf("https://%s/service/soap/", $adminServer)
    );

    $ch = curl_init();

    $options = array(
        CURLOPT_URL => $url,
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $js,
        CURLOPT_HEADER => false,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_RETURNTRANSFER => true,
    );

    curl_setopt_array($ch, $options);
    $output = curl_exec($ch);
    curl_close($ch);

    if ($output === false) { print curl_error($ch); }

    $outputarr = json_decode($output);
    $arr = $this->object2array($outputarr);

    if (!$strip) { return $arr; }
    $arr = array_shift($arr['Body']);
    return $arr;

}
Reply With Quote