Zimbra offers Open Source email server software and shared calendar for Linux and the Mac
Go Back   Zimbra :: Forums > Zimbra Collaboration Suite > Developers

Welcome to the Zimbra :: Forums!
Welcome, if you would like to post a comment please register. We also encourage you to explore all things Zimbra with our team and members of the community.

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #11 (permalink)  
Old 07-22-2011, 11:09 PM
Junior Member
 
Posts: 6
Default

Quote:
Originally Posted by mikes2277 View Post
Well for those wondering the PHP SOAP functions really are not doing anything but making is really hard to do a simple curl HTTP POST to Zimbra's SOAP URL. Doing it the following way makes it so you can do "zmprov --debug whatever" and be able to use that trace to get done exactly the same thing in PHP. In the example below you could technically break it up into 2 functions and have the login happen in an isolated function so that it doesn't create a ton of admin sessions sitting out there every time you add an account since one authToken & sessionId can be used for an infinite amount of SOAP requests. But for my purposes my PHP script is very short lived and literally just adds the account and exits so it is not needed.

Code:
<?PHP
        $ServerAddress          = "192.168.1.1";
        $AdminUserName          = "admin";
        $AdminPassword          = "adminpassword";

        $NewUserName            = "mynewaccount@mydomain.com";
        $NewUserPassword        = "mynewpassoword";
        $COSId                  = "f070eede-c0c5-4867-a158-1f35f1c39e15";

        // To get your COSId for COS defualt or any other COS (I left mine in there as an example):
        // zmprov getCos default | grep "zimbraId:" from the command line

        if(($ZimbraSOAPResponse = ZimbraAdminCreateAccount(1, $ServerAddress, $AdminUserName, $AdminPassword, $NewUserName, $NewUserPassword, $COSId)) == FALSE)
        {
                printf("ZimbraAdminCreateAccount Failed!<BR>\n");
                return(FALSE);
        }

        print("Zimbra create account response:<BR>" . htmlentities($ZimbraSOAPResponse) . "<BR><BR>\n");
?>

<?PHP

// -------------------------------------------------------------------

function ZimbraAdminCreateAccount($Trace, $ServerAddress, $AdminUserName, $AdminPassword, $NewUserName, $NewPassword, $COSId)
{
        $CurlHandle = curl_init();
        curl_setopt($CurlHandle, CURLOPT_URL,           "https://$ServerAddress:7071/service/admin/soap");
        curl_setopt($CurlHandle, CURLOPT_POST,           TRUE);
        curl_setopt($CurlHandle, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($CurlHandle, CURLOPT_SSL_VERIFYHOST, FALSE);

        // ------ Send the zimbraAdmin AuthRequest -----

        $SOAPMessage  = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                                <soap:Header>
                                        <context xmlns="urn:zimbra"/>
                                </soap:Header>
                                <soap:Body>
                                        <AuthRequest xmlns="urn:zimbraAdmin">
                                                <name>' . $AdminUserName . '</name>
                                                <password>' . $AdminPassword . '</password>
                                        </AuthRequest>
                                </soap:Body>
                        </soap:Envelope>';

        curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $SOAPMessage);

        if(!($ZimbraSOAPResponse = curl_exec($CurlHandle)))
        {
                print("ERROR: curl_exec - (" . curl_errno($CurlHandle) . ") " . curl_error($CurlHandle));
                return(FALSE);
        }

        // print("Raw Zimbra SOAP Response:<BR>" . htmlentities($ZimbraSOAPResponse) . "<BR><BR>\n");

        // Parse for the sessionId
        // <sessionId type="admin" id="123">123</sessionId>
        $sessionId = strstr($ZimbraSOAPResponse, "<sessionId");
        $sessionId = strstr($sessionId, ">");
        $sessionId = substr($sessionId, 1, strpos($sessionId, "<") - 1);
        // print("sessionId = $sessionId<BR>\n");

        // Parse for the authToken
        // <authToken>123</authToken>
        $authToken = strstr($ZimbraSOAPResponse, "<authToken");
        $authToken = strstr($authToken, ">");
        $authToken = substr($authToken, 1, strpos($authToken, "<") - 1);
        // print("authToken = $authToken<BR>\n");


        // ------ Send the zimbraCreateAccount request -----
        $SOAPMessage = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                                <soap:Header>
                                        <context xmlns="urn:zimbra">
                                                <authToken>' . $authToken . '</authToken>
                                                <sessionId id="' . $sessionId . '">' . $sessionId . '</sessionId>
                                        </context>
                                </soap:Header>
                                <soap:Body>
                                        <CreateAccountRequest xmlns="urn:zimbraAdmin">
                                                <name>' . $NewUserName . '</name>
                                                <password>' . $NewUserPassword . '</password>
                                                <a n="zimbraCOSId">' . $COSId . '</a>
                                        </CreateAccountRequest>
                                </soap:Body>
                        </soap:Envelope>';

        curl_setopt($CurlHandle, CURLOPT_POSTFIELDS, $SOAPMessage);

        if(!($ZimbraSOAPResponse = curl_exec($CurlHandle)))
        {
                print("ERROR: curl_exec - (" . curl_errno($CurlHandle) . ") " . curl_error($CurlHandle));
                return(FALSE);
        }

        // print("Raw Zimbra SOAP Response:<BR>" . htmlentities($ZimbraSOAPResponse) . "<BR><BR>\n");

        return($ZimbraSOAPResponse);
}
?>

SUCCESSFULLY create a new account with script above,,
but, user can't login with the password,,
can u help me ??

Last edited by meisel; 07-23-2011 at 12:59 AM..
Reply With Quote
  #12 (permalink)  
Old 07-23-2011, 01:00 AM
Junior Member
 
Posts: 6
Default

can anyone give me script for change user password from SOAP??

Last edited by meisel; 07-23-2011 at 02:15 AM..
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Similar Threads

Why Join?

Registering let's you ask questions, makes it easier to search, displays any files attached to posts, and notifies you about replies.

blog.zimbra.com




 

SEO by vBSEO ©2011, Crawlability, Inc.