Exemplo n.º 1
0
        public int GetAllCos()
        {
            if (ZimbraValues.zimbraValues.COSes.Count > 0)  // already got 'em
            return 0;
            lastError = "";
            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, false);

            // body
            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            writer.WriteStartElement("GetAllCosRequest", "urn:zimbraAdmin");
            writer.WriteEndElement();           // GetAllCosRequest
            writer.WriteEndElement();           // soap body
            // end body

            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            if (client.status == 0)
            {
            ParseGetAllCos(rsp);
            }
            else
            {
            string soapReason = ParseSoapFault(client.errResponseMessage);

            if (soapReason.Length > 0)
                lastError = soapReason;
            else
                lastError = client.exceptionMessage;
            }
            return client.status;
        }
Exemplo n.º 2
0
        public int CreateTag(string tag, string color, out string tagID)
        {
            tagID = "";
            lastError = "";

            int retval = 0;
            WebServiceClient client = new WebServiceClient
            {
            Url = ZimbraValues.GetZimbraValues().Url,
            WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, true);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");

            CreateTagRequest(writer, tag, color, -1);

            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            if (client.status == 0)
            {
            ParseCreateTag(rsp, out tagID);       // get the id
            }
            else
            {
            string soapReason = ParseSoapFault(client.errResponseMessage);

            if (soapReason.Length > 0)
                lastError = soapReason;
            else
                lastError = client.exceptionMessage;
            }
            return retval;
        }
Exemplo n.º 3
0
        public int GetAccount(string accountname)
        {
            int retval = 0;

            lastError = "";
            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, false);

            // body
            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            writer.WriteStartElement("GetAccountRequest", "urn:zimbraAdmin");

            WriteAccountBy(writer, accountname);

            writer.WriteEndElement();           // GetAccountRequest
            writer.WriteEndElement();           // soap body
            // end body

            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            if (client.status == 0)
            {
            if (ParseGetAccount(rsp) == 0)      // length of name is 0 -- this is bad
                retval = ACCOUNT_NO_NAME;
            }
            else
            {
            string soapReason = ParseSoapFault(client.errResponseMessage);

            if (soapReason.Length > 0)
                lastError = soapReason;
            else
                lastError = client.exceptionMessage;
            }
            return retval;
        }
Exemplo n.º 4
0
        public int CreateAccount(string accountname, string displayname, string givenname, string sn, string zfp, string defaultpw, bool mustChangePW, string cosid)
        {
            int retval = 0;

            lastError = "";

            if (displayname.Length == 0)
            {
            displayname = accountname.Substring(0, accountname.IndexOf("@"));
            }
            string zimbraForeignPrincipal = (zfp.Length > 0) ? zfp : "ad:" + displayname;
            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, false);

            // body
            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            writer.WriteStartElement("CreateAccountRequest", "urn:zimbraAdmin");

            WriteNVPair(writer, "name", accountname);
            WriteNVPair(writer, "password", defaultpw);

            WriteAttrNVPair(writer, "a", "n", "displayName", displayname);
            if (givenname.Length > 0)
            {
                WriteAttrNVPair(writer, "a", "n", "givenName", givenname);
            }
            if (sn.Length > 0)
            {
                WriteAttrNVPair(writer, "a", "n", "sn", sn);
            }
            WriteAttrNVPair(writer, "a", "n", "zimbraForeignPrincipal", zimbraForeignPrincipal);
            WriteAttrNVPair(writer, "a", "n", "zimbraCOSId", cosid);
            if (mustChangePW)
            {
                WriteAttrNVPair(writer, "a", "n", "zimbraPasswordMustChange", "TRUE");
            }

            writer.WriteEndElement();           // CreateAccountRequest
            writer.WriteEndElement();           // soap body
            // end body

            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            if (client.status == 0)
            {
            if (ParseCreateAccount(rsp) == 0)   // length of name is 0 -- this is bad
                retval = ACCOUNT_CREATE_FAILED;
            }
            else
            {
            string soapReason = ParseSoapFault(client.errResponseMessage);

            if (soapReason.Length > 0)
                lastError = soapReason;
            else
                lastError = client.exceptionMessage;
            }
            return retval;
        }
Exemplo n.º 5
0
        public int CreateContacts(List<Dictionary<string, string> > lContacts, string folderPath =
        "")
        {
            lastError = "";

            // Create in Contacts unless another folder was desired
            string folderId = "7";

            if (folderPath.Length > 0)
            {
            folderId = FindFolder(folderPath);
            if (folderId.Length == 0)
                return CONTACT_CREATE_FAILED_FLDR;
            }

            // //////
            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            int retval = 0;
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, true);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            writer.WriteStartElement("BatchRequest", "urn:zimbra");
            for (int i = 0; i < lContacts.Count; i++)
            {
                Dictionary<string, string> contact = lContacts[i];
                CreateContactRequest(writer, contact, folderId, i);
            }
            writer.WriteEndElement();           // BatchRequest
            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";

            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            return retval;
        }
Exemplo n.º 6
0
        public int AddRules(Dictionary<string, string> rules)
        {
            lastError = "";

            WebServiceClient client = new WebServiceClient
            {
            Url = ZimbraValues.GetZimbraValues().Url,
            WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            int retval = 0;
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, true);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            SetModifyFilterRulesRequest(writer, rules);

            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }
            string rsp = "";

            WriteSoapLog(sb.ToString(),true);
            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            return retval;
        }
Exemplo n.º 7
0
        public int AddTask(Dictionary<string, string> appt, string folderPath = "")
        {
            lastError = "";

            // Create in Tasks unless another folder was desired
            string folderId = "15";

            if (folderPath.Length > 0)
            {
            folderId = FindFolder(folderPath);
            if (folderId.Length == 0)
                return TASK_CREATE_FAILED_FLDR;
            }

            // //////
            WebServiceClient client = new WebServiceClient
            {
            Url = ZimbraValues.GetZimbraValues().Url,
            WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            int retval = 0;
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, true);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            SetTaskRequest(writer, appt, folderId);

            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }
            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            return retval;
        }
Exemplo n.º 8
0
        public int AddOOO(string OOOInfo, bool isServer)
        {
            lastError = "";

            if (OOOInfo.Length == 0)
            {
            return OOO_NO_TEXT;
            }

            bool isOOOEnabled = OOOInfo.Substring(0, 1) == "1";
            if ((!isOOOEnabled) && (OOOInfo.Length == 2))   // 0:
            {
            return 0;   // it's ok -- just no need to do anything
            }

            WebServiceClient client = new WebServiceClient
            {
            Url = ZimbraValues.GetZimbraValues().Url,
            WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            int retval = 0;
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, isServer);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            SetModifyPrefsRequest(writer, isOOOEnabled, OOOInfo);

            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }
            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            return retval;
        }
Exemplo n.º 9
0
        public int AddMessages(List<Dictionary<string, string> > lMessages)
        {
            int retval = 0;

            lastError = "";

            string uploadInfo = "";

            System.Type type = typeof (ZimbraMessage);
            FieldInfo[] myFields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, true);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            writer.WriteStartElement("BatchRequest", "urn:zimbra");
            for (int i = 0; i < lMessages.Count; i++)
            {
                Dictionary<string, string> message = lMessages[i];

                ZimbraMessage zm = new ZimbraMessage("", "", "", "", "");

                for (int j = 0; j < myFields.Length; j++)       // use reflection to set ZimbraMessage object values
                {
                    string nam = (string)myFields[j].Name;

                    if (nam == "folderId")
                        myFields[j].SetValue(zm, FindFolder(message[nam]));
                    else
                        myFields[j].SetValue(zm, message[nam]);
                }

                bool isInline = false;
                if (message["wstrmimeBuffer"].Length > 0)
                {
                    //
                }
                else
                {
                    FileInfo f = new FileInfo(zm.filePath);
                    isInline = (f.Length < INLINE_LIMIT);
                }

                if (isInline)
                    uploadInfo = zm.filePath;
                else
                {
                    Log.debug("Begin UploadFile");
                    string tmp = message["wstrmimeBuffer"];
                    retval = UploadFile(zm.filePath, tmp, "", "", STRING_MODE, out uploadInfo);
                    Log.debug("End UploadFile");
                }
                if (retval == 0)
                    AddMsgRequest(writer, uploadInfo, zm, isInline, -1);
                File.Delete(zm.filePath);
            }
            writer.WriteEndElement();           // BatchRequest
            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;

            return retval;
        }
Exemplo n.º 10
0
        public int AddMessage(Dictionary<string, string> message)
        {
            lastError = "";

            string uploadInfo = "";
            int retval = 0;
            ZimbraMessage zm = new ZimbraMessage("", "", "", "", "");

            System.Type type = typeof (ZimbraMessage);
            FieldInfo[] myFields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
            for (int i = 0; i < myFields.Length; i++)       // use reflection to set ZimbraMessage object values
            {
            string nam = (string)myFields[i].Name;

            if (nam == "folderId")
                myFields[i].SetValue(zm, FindFolder(message[nam]));
            else
                myFields[i].SetValue(zm, message[nam]);
            }

            bool isInline = false;
            if (message["wstrmimeBuffer"].Length > 0)
            {
            //
            }
            else
            {
            FileInfo f = new FileInfo(zm.filePath);// use a try/catch?
            isInline = (f.Length < INLINE_LIMIT);
            }

            if (isInline)
            uploadInfo = zm.filePath;
            else
            {
            //Log.debug("Begin UploadFile");
            string tmp = message["wstrmimeBuffer"];
            retval = UploadFile(zm.filePath, tmp, "", "", STRING_MODE, out uploadInfo);
            //Log.debug("End UploadFile");
            }
            if (retval == 0)
            {
            WebServiceClient client = new WebServiceClient {
                Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                    WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
                writer.WriteStartDocument();
                writer.WriteStartElement("soap", "Envelope",
                    "http://www.w3.org/2003/05/soap-envelope");

                WriteHeader(writer, true, true, true);

                writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");

                AddMsgRequest(writer, uploadInfo, zm, isInline, -1);

                writer.WriteEndElement();       // soap body
                writer.WriteEndElement();       // soap envelope
                writer.WriteEndDocument();
            }

            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            if (client.status == 0)
            {
                string mID = "";

                ParseAddMsg(rsp, out mID);      // get the id
            }
            else
            {
                string soapReason = ParseSoapFault(client.errResponseMessage);
                string errMsg = (soapReason.IndexOf("upload ID: null") != -1)    // FBS bug 75159 -- 6/7/12
                                ? "Unable to upload file. Please check server message size limits (Global Settings General Information and MTA)."
                                : soapReason;
                if (soapReason.Length > 0)
                {
                    lastError = soapReason;
                    Log.err("Error on message", message["Subject"], "--", errMsg);
                }
                else
                {
                    lastError = client.exceptionMessage;
                }
            }
            }
            //File.Delete(zm.filePath);
            return retval;
        }
Exemplo n.º 11
0
        public int AddAppointment(Dictionary<string, string> appt, string folderPath = "")
        {
            lastError = "";

            // Create in Calendar unless another folder was desired
            string folderId = "10";

            if (folderPath.Length > 0)
            {
            folderId = FindFolder(folderPath);
            if (folderId.Length == 0)
                return APPT_CREATE_FAILED_FLDR;
            }

            // //////
            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            int retval = 0;
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings))
            {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, true, true, true);

            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            SetAppointmentRequest(writer, appt, folderId);

            writer.WriteEndElement();           // soap body
            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }
            string rsp = "";
            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);

            WriteSoapLog(rsp.ToString(),false);
            retval = client.status;
            if (client.status != 0)
            {
            string soapReason = ParseSoapFault(client.errResponseMessage);
            if (soapReason.Length > 0)
            {
                lastError = soapReason;
                Log.err("Error on appointment", appt["su"], "--", soapReason);
            }
            }
            return retval;
        }
Exemplo n.º 12
0
        //
        // API methods /////////
        public int Logon(string hostname, string port, string username, string password, bool
        isSecure, bool isAdmin)
        {
            if (ZimbraValues.GetZimbraValues().AuthToken.Length > 0)
            return 0;                           // already logged on
            lastError = "";

            // FBS Bug 73394 -- 4/26/12 -- rewrite this section
            string mode = isSecure ? "https://"            : "http://";
            string svc  = isAdmin  ? "/service/admin/soap" : "/service/soap";
            string urn  = isAdmin  ? "urn:zimbraAdmin"     : "urn:zimbraAccount";
            ZimbraValues.GetZimbraValues().Url = mode + hostname + ":" + port + svc;
            // end Bug 73394

            WebServiceClient client = new WebServiceClient {
            Url = ZimbraValues.GetZimbraValues().Url, WSServiceType =
                WebServiceClient.ServiceType.Traditional
            };
            StringBuilder sb = new StringBuilder();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            using (XmlWriter writer = XmlWriter.Create(sb, settings)) {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", "Envelope",
                "http://www.w3.org/2003/05/soap-envelope");

            WriteHeader(writer, false, false, false);

            // body
            writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
            writer.WriteStartElement("AuthRequest", urn);
            if (isAdmin)
                WriteNVPair(writer, "name", username);
            else
                WriteAccountBy(writer, username);
            WriteNVPair(writer, "password", password);

            writer.WriteEndElement();           // AuthRequest
            writer.WriteEndElement();           // soap body
            // end body

            writer.WriteEndElement();           // soap envelope
            writer.WriteEndDocument();
            }

            string rsp = "";

            WriteSoapLog(sb.ToString(),true);

            client.InvokeService(sb.ToString(), out rsp);
            WriteSoapLog(rsp.ToString(),false);

            if (client.status == 0)
            {
            ParseLogon(rsp, isAdmin);
            ZimbraValues.GetZimbraValues().HostName = hostname;
            ZimbraValues.GetZimbraValues().Port = port;
            }
            else
            {
            string soapReason = ParseSoapFault(client.errResponseMessage);

            if (soapReason.Length > 0)
                lastError = soapReason;
            else
                lastError = client.exceptionMessage;
            }
            return client.status;
        }