cui/source/options/optlanguagetool.cxx                            |    4 
 cui/source/options/optlanguagetool.hxx                            |    1 
 cui/uiconfig/ui/langtoolconfigpage.ui                             |  239 
+++++-----
 desktop/source/lib/init.cxx                                       |    3 
 include/svtools/languagetoolcfg.hxx                               |    6 
 lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx |   18 
 officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs    |   13 
 svtools/source/config/languagetoolcfg.cxx                         |   37 +
 8 files changed, 203 insertions(+), 118 deletions(-)

New commits:
commit c01b2cdc792e6cbdbe79921c19ccfac0ab6c68d3
Author:     Henry Castro <hcas...@collabora.com>
AuthorDate: Mon Nov 21 21:27:24 2022 -0400
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Jan 28 09:22:51 2023 +0000

    svtools: add new entry "RestProtocol"
    
    Custom Rest API protocol
    
    Signed-off-by: Henry Castro <hcas...@collabora.com>
    Change-Id: If2f72330f2ed9768f230dc88296df7f757be263a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143105
    Reviewed-by: Ashod Nakashian <a...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145605
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/include/svtools/languagetoolcfg.hxx 
b/include/svtools/languagetoolcfg.hxx
index 3f30c4bd94a8..24c4de6408aa 100644
--- a/include/svtools/languagetoolcfg.hxx
+++ b/include/svtools/languagetoolcfg.hxx
@@ -39,6 +39,9 @@ public:
     const OUString& getBaseURL() const;
     void setBaseURL(const OUString& rVal);
 
+    const OUString& getRestProtocol() const;
+    void setRestProtocol(const OUString& rVal);
+
     const OUString& getUsername() const;
     void setUsername(const OUString& rVal);
 
diff --git a/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
index 559200946080..8c3fa98e6d4b 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
@@ -412,6 +412,12 @@
             </info>
             <value>true</value>
           </prop>
+          <prop oor:name="RestProtocol" oor:type="xs:string">
+            <info>
+              <desc>LanguageTool Grammar Checker REST API protocol</desc>
+              <label>REST API protocol</label>
+            </info>
+          </prop>
       </group>
     </group>
     <group oor:name="Translation">
diff --git a/svtools/source/config/languagetoolcfg.cxx 
b/svtools/source/config/languagetoolcfg.cxx
index 3f48010141db..311cefb320f4 100644
--- a/svtools/source/config/languagetoolcfg.cxx
+++ b/svtools/source/config/languagetoolcfg.cxx
@@ -31,6 +31,7 @@ struct LanguageToolOptions_Impl
     OUString sBaseURL;
     OUString sUsername;
     OUString sApiKey;
+    OUString sRestProtocol;
     bool bEnabled;
     bool bSSLCertVerificatrionEnabled;
 };
@@ -43,6 +44,7 @@ const Sequence<OUString>& 
SvxLanguageToolOptions::GetPropertyNames()
         "LanguageTool/ApiKey",
         "LanguageTool/IsEnabled",
         "LanguageTool/SSLCertVerify",
+        "LanguageTool/RestProtocol"
     };
     return aNames;
 }
@@ -69,12 +71,23 @@ OUString SvxLanguageToolOptions::getCheckerURL() const { 
return pImpl->sBaseURL
 
 const OUString& SvxLanguageToolOptions::getApiKey() const { return 
pImpl->sApiKey; }
 
+const OUString& SvxLanguageToolOptions::getRestProtocol() const { return 
pImpl->sRestProtocol; }
+
 void SvxLanguageToolOptions::setApiKey(const OUString& rVal)
 {
     pImpl->sApiKey = rVal;
     SetModified();
 }
 
+void SvxLanguageToolOptions::setRestProtocol(const OUString& rVal)
+{
+    if (pImpl->sRestProtocol != rVal)
+    {
+        pImpl->sRestProtocol = rVal;
+        SetModified();
+    }
+}
+
 bool SvxLanguageToolOptions::getEnabled() const { return pImpl->bEnabled; }
 
 bool SvxLanguageToolOptions::getSSLVerification() const { return 
pImpl->bSSLCertVerificatrionEnabled; }
@@ -142,6 +155,9 @@ void SvxLanguageToolOptions::Load(const 
css::uno::Sequence<OUString>& aNames)
             case 4:
                 pValues[nProp] >>= pImpl->bSSLCertVerificatrionEnabled;
                 break;
+            case 5:
+                pValues[nProp] >>= pImpl->sRestProtocol;
+                break;
             default:
                 break;
         }
@@ -172,9 +188,12 @@ void SvxLanguageToolOptions::ImplCommit()
             case 4:
                 pValues[nProp] <<= pImpl->bSSLCertVerificatrionEnabled;
                 break;
+            case 5:
+                pValues[nProp] <<= pImpl->sRestProtocol;
+                break;
             default:
                 break;
         }
     }
     PutProperties(aNames, aValues);
-}
\ No newline at end of file
+}
commit 1b6d2c6c245717fe59448710d389359919689136
Author:     Mert Tumer <mert.tu...@collabora.com>
AuthorDate: Mon Jul 4 19:52:49 2022 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Sat Jan 28 09:22:38 2023 +0000

    Added option to disable ssl verification for languagetool
    
    This will allow to use self-signed certificates with local run
    languagetool APIs
    
    Signed-off-by: Mert Tumer <mert.tu...@collabora.com>
    Change-Id: I2bda575fa6174dfc0f6c24da45267ee732643db6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136811
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145604
    Tested-by: Andras Timar <andras.ti...@collabora.com>

diff --git a/cui/source/options/optlanguagetool.cxx 
b/cui/source/options/optlanguagetool.cxx
index 309ff2a09b52..f0006d1dd0e0 100644
--- a/cui/source/options/optlanguagetool.cxx
+++ b/cui/source/options/optlanguagetool.cxx
@@ -31,6 +31,7 @@ 
OptLanguageToolTabPage::OptLanguageToolTabPage(weld::Container* pPage,
     , m_xUsernameED(m_xBuilder->weld_entry("username"))
     , m_xApiKeyED(m_xBuilder->weld_entry("apikey"))
     , m_xActivateBox(m_xBuilder->weld_check_button("activate"))
+    , m_xSSLDisableVerificationBox(m_xBuilder->weld_check_button("verifyssl"))
     , m_xApiSettingsFrame(m_xBuilder->weld_frame("apisettings"))
 {
     m_xActivateBox->connect_toggled(LINK(this, OptLanguageToolTabPage, 
CheckHdl));
@@ -51,6 +52,7 @@ void OptLanguageToolTabPage::EnableControls(bool bEnable)
     rLanguageOpts.setEnabled(bEnable);
     m_xApiSettingsFrame->set_visible(bEnable);
     m_xActivateBox->set_active(bEnable);
+    
m_xSSLDisableVerificationBox->set_active(rLanguageOpts.getSSLVerification() != 
true);
 }
 
 IMPL_LINK_NOARG(OptLanguageToolTabPage, CheckHdl, weld::Toggleable&, void)
@@ -71,6 +73,7 @@ void OptLanguageToolTabPage::Reset(const SfxItemSet*)
 
     m_xUsernameED->set_text(rLanguageOpts.getUsername());
     m_xApiKeyED->set_text(rLanguageOpts.getApiKey());
+    
m_xSSLDisableVerificationBox->set_active(rLanguageOpts.getSSLVerification() != 
true);
 }
 
 bool OptLanguageToolTabPage::FillItemSet(SfxItemSet*)
@@ -86,6 +89,7 @@ bool OptLanguageToolTabPage::FillItemSet(SfxItemSet*)
 
     rLanguageOpts.setUsername(m_xUsernameED->get_text());
     rLanguageOpts.setApiKey(m_xApiKeyED->get_text());
+    
rLanguageOpts.setSSLVerification(m_xSSLDisableVerificationBox->get_active() != 
true);
     return false;
 }
 
diff --git a/cui/source/options/optlanguagetool.hxx 
b/cui/source/options/optlanguagetool.hxx
index 8ee83ed4e367..666512804c62 100644
--- a/cui/source/options/optlanguagetool.hxx
+++ b/cui/source/options/optlanguagetool.hxx
@@ -39,6 +39,7 @@ private:
     std::unique_ptr<weld::Entry> m_xUsernameED;
     std::unique_ptr<weld::Entry> m_xApiKeyED;
     std::unique_ptr<weld::CheckButton> m_xActivateBox;
+    std::unique_ptr<weld::CheckButton> m_xSSLDisableVerificationBox;
     std::unique_ptr<weld::Frame> m_xApiSettingsFrame;
 
     void EnableControls(bool bEnable);
diff --git a/cui/uiconfig/ui/langtoolconfigpage.ui 
b/cui/uiconfig/ui/langtoolconfigpage.ui
index 38aa184c2469..237040fa76b7 100644
--- a/cui/uiconfig/ui/langtoolconfigpage.ui
+++ b/cui/uiconfig/ui/langtoolconfigpage.ui
@@ -76,16 +76,130 @@
                   <object class="GtkGrid" id="grid1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="row_spacing">5</property>
-                    <property name="column_spacing">12</property>
                     <child>
-                      <object class="GtkLabel" id="base">
+                      <object class="GtkGrid" id="grid2">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="halign">start</property>
-                        <property name="label" translatable="yes" 
context="langtoolconfigpage|base">Base URL:</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">baseurl</property>
+                        <property name="row_spacing">5</property>
+                        <property name="column_spacing">12</property>
+                        <child>
+                          <object class="GtkLabel" id="base">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes" 
context="langtoolconfigpage|base">Base URL:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">baseurl</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="baseurl">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="usernamelbl">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes" 
context="langtoolconfigpage|usernamelbl">User name:</property>
+                            <property name="use_underline">True</property>
+                            <property 
name="mnemonic_widget">username</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="apikeylbl">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes" 
context="langtoolconfigpage|apikeylbl">API key:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">apikey</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="username">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="apikey">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="urldesc">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes" 
context="langtoolconfigpage|urldesc">Please use the base URL e.g. without 
"/check" at the end.</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="usernamedesc">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes" 
context="langtoolconfigpage|usernamedesc">Your LanguageTool account's username 
for premium usage.</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">3</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="apikeydesc">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="halign">start</property>
+                            <property name="label" translatable="yes" 
context="langtoolconfigpage|apikeydesc">Your LanguageTool account's api key for 
premium usage.</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -93,121 +207,20 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkEntry" id="baseurl">
+                      <object class="GtkCheckButton" id="verifyssl">
+                        <property name="label" translatable="yes" 
context="langtoolconfigpage|verifyssl">Disable SSL Certificate 
Verification</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="truncate-multiline">True</property>
-                        <property name="hexpand">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="usernamelbl">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
+                        <property name="receives_default">False</property>
                         <property name="halign">start</property>
-                        <property name="label" translatable="yes" 
context="langtoolconfigpage|usernamelbl">Username:</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">username</property>
+                        <property name="margin_top">5</property>
+                        <property name="draw_indicator">True</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
-                        <property name="top_attach">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="apikeylbl">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="halign">start</property>
-                        <property name="label" translatable="yes" 
context="langtoolconfigpage|apikeylbl">API key:</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">apikey</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">4</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkEntry" id="username">
-                        <property name="visible">True</property>
-                        <property name="truncate-multiline">True</property>
-                        <property name="can_focus">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">2</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkEntry" id="apikey">
-                        <property name="visible">True</property>
-                        <property name="truncate-multiline">True</property>
-                        <property name="can_focus">True</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">4</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="urldesc">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="halign">start</property>
-                        <property name="label" translatable="yes" 
context="langtoolconfigpage|urldesc">Please use the base URL, i.e., without 
“/check”, at the end.</property>
-                        <attributes>
-                          <attribute name="scale" value="0.9"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
                         <property name="top_attach">1</property>
                       </packing>
                     </child>
-                    <child>
-                      <object class="GtkLabel" id="usernamedesc">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="halign">start</property>
-                        <property name="label" translatable="yes" 
context="langtoolconfigpage|usernamedesc">Your LanguageTool account’s username 
for premium usage.</property>
-                        <attributes>
-                          <attribute name="scale" value="0.9"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">3</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="apikeydesc">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="halign">start</property>
-                        <property name="label" translatable="yes" 
context="langtoolconfigpage|apikeydesc">Your LanguageTool account’s API key for 
premium usage.</property>
-                        <attributes>
-                          <attribute name="scale" value="0.9"/>
-                        </attributes>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">5</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
                   </object>
                 </child>
                 <child type="label">
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index e562099082d3..a70385a47e17 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -7023,9 +7023,11 @@ void setLanguageToolConfig()
     const char* pBaseUrlString = ::getenv("LANGUAGETOOL_BASEURL");
     const char* pUsername = ::getenv("LANGUAGETOOL_USERNAME");
     const char* pApikey = ::getenv("LANGUAGETOOL_APIKEY");
+    const char* pSSLVerification = ::getenv("LANGUAGETOOL_SSL_VERIFICATION");
     if (pEnabled && pBaseUrlString)
     {
         OUString aEnabled = OStringToOUString(pEnabled, RTL_TEXTENCODING_UTF8);
+        OUString aSSLVerification = OStringToOUString(pSSLVerification, 
RTL_TEXTENCODING_UTF8);
         if (aEnabled != "true")
             return;
         OUString aBaseUrl = OStringToOUString(pBaseUrlString, 
RTL_TEXTENCODING_UTF8);
@@ -7034,6 +7036,7 @@ void setLanguageToolConfig()
             SvxLanguageToolOptions& rLanguageOpts = 
SvxLanguageToolOptions::Get();
             rLanguageOpts.setBaseURL(aBaseUrl);
             rLanguageOpts.setEnabled(true);
+            rLanguageOpts.setSSLVerification(aSSLVerification == "true");
             if (pUsername && pApikey)
             {
                 OUString aUsername = OStringToOUString(pUsername, 
RTL_TEXTENCODING_UTF8);
diff --git a/include/svtools/languagetoolcfg.hxx 
b/include/svtools/languagetoolcfg.hxx
index 7578ad6ba281..3f30c4bd94a8 100644
--- a/include/svtools/languagetoolcfg.hxx
+++ b/include/svtools/languagetoolcfg.hxx
@@ -51,6 +51,9 @@ public:
     bool getEnabled() const;
     void setEnabled(bool enabled);
 
+    bool getSSLVerification() const;
+    void setSSLVerification(bool enabled);
+
 private:
     std::unique_ptr<LanguageToolOptions_Impl> pImpl;
     void Load(const css::uno::Sequence<OUString>& rPropertyNames);
diff --git a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx 
b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx
index a2ad3efdf863..1dce1845fc43 100644
--- a/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx
+++ b/lingucomponent/source/spellcheck/languagetool/languagetoolimp.cxx
@@ -41,6 +41,9 @@
 #include <tools/long.hxx>
 #include <com/sun/star/uno/Any.hxx>
 #include <comphelper/propertyvalue.hxx>
+#include <unotools/lingucfg.hxx>
+#include <osl/mutex.hxx>
+#include <sal/log.hxx>
 
 using namespace osl;
 using namespace com::sun::star;
@@ -341,8 +344,12 @@ std::string 
LanguageToolGrammarChecker::makeHttpRequest(std::string_view aURL, H
 
     (void)curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, WriteCallback);
     (void)curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, 
static_cast<void*>(&response_body));
-    (void)curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYPEER, false);
-    (void)curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYHOST, false);
+    // allow unknown or self-signed certificates
+    if (rLanguageOpts.getSSLVerification() == false)
+    {
+        (void)curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYPEER, false);
+        (void)curl_easy_setopt(curl.get(), CURLOPT_SSL_VERIFYHOST, false);
+    }
     (void)curl_easy_setopt(curl.get(), CURLOPT_TIMEOUT, CURL_TIMEOUT);
 
     if (method == HTTP_METHOD::HTTP_POST)
@@ -359,8 +366,11 @@ std::string 
LanguageToolGrammarChecker::makeHttpRequest(std::string_view aURL, H
         }
     }
 
-    /*CURLcode cc = */
-    (void)curl_easy_perform(curl.get());
+    CURLcode cc = curl_easy_perform(curl.get());
+    if (cc != CURLE_OK)
+    {
+        SAL_WARN("languagetool", "CURL request returned with error: " << 
static_cast<sal_Int32>(cc));
+    }
     curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &nStatusCode);
     return response_body;
 }
diff --git a/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs 
b/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
index b9d3382ecc33..559200946080 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
@@ -405,6 +405,13 @@
             </info>
             <value>false</value>
           </prop>
+          <prop oor:name="SSLCertVerify" oor:type="xs:boolean" 
oor:nillable="false">
+            <info>
+              <desc>Enable or disable SSL certificate verification for HTTPS 
requests</desc>
+              <label>API SSL verification control</label>
+            </info>
+            <value>true</value>
+          </prop>
       </group>
     </group>
     <group oor:name="Translation">
diff --git a/svtools/source/config/languagetoolcfg.cxx 
b/svtools/source/config/languagetoolcfg.cxx
index 9f81c8e787f1..3f48010141db 100644
--- a/svtools/source/config/languagetoolcfg.cxx
+++ b/svtools/source/config/languagetoolcfg.cxx
@@ -32,6 +32,7 @@ struct LanguageToolOptions_Impl
     OUString sUsername;
     OUString sApiKey;
     bool bEnabled;
+    bool bSSLCertVerificatrionEnabled;
 };
 
 const Sequence<OUString>& SvxLanguageToolOptions::GetPropertyNames()
@@ -41,6 +42,7 @@ const Sequence<OUString>& 
SvxLanguageToolOptions::GetPropertyNames()
         "LanguageTool/Username",
         "LanguageTool/ApiKey",
         "LanguageTool/IsEnabled",
+        "LanguageTool/SSLCertVerify",
     };
     return aNames;
 }
@@ -75,6 +77,14 @@ void SvxLanguageToolOptions::setApiKey(const OUString& rVal)
 
 bool SvxLanguageToolOptions::getEnabled() const { return pImpl->bEnabled; }
 
+bool SvxLanguageToolOptions::getSSLVerification() const { return 
pImpl->bSSLCertVerificatrionEnabled; }
+
+void SvxLanguageToolOptions::setSSLVerification(bool bEnabled)
+{
+    pImpl->bSSLCertVerificatrionEnabled = bEnabled;
+    SetModified();
+}
+
 void SvxLanguageToolOptions::setEnabled(bool bEnabled)
 {
     pImpl->bEnabled = bEnabled;
@@ -129,6 +139,9 @@ void SvxLanguageToolOptions::Load(const 
css::uno::Sequence<OUString>& aNames)
             case 3:
                 pValues[nProp] >>= pImpl->bEnabled;
                 break;
+            case 4:
+                pValues[nProp] >>= pImpl->bSSLCertVerificatrionEnabled;
+                break;
             default:
                 break;
         }
@@ -156,6 +169,9 @@ void SvxLanguageToolOptions::ImplCommit()
             case 3:
                 pValues[nProp] <<= pImpl->bEnabled;
                 break;
+            case 4:
+                pValues[nProp] <<= pImpl->bSSLCertVerificatrionEnabled;
+                break;
             default:
                 break;
         }

Reply via email to