spamexperts / plesk-extension Goto Github PK
View Code? Open in Web Editor NEWPlesk Extension for SpamExperts' services integration
License: GNU General Public License v2.0
Plesk Extension for SpamExperts' services integration
License: GNU General Public License v2.0
Steps:
Actual result:
Created alias is not protected
Expected result:
I expect that it should be protected
Steps:
Actual result:
MX records are not changed to default
Domain is protected
Expected result:
Possibly there should be setting whether MX records should be removed and domains be unprotected
It will be useful here is there was an option to allow users, to be able to hard code a specific route directly in the settings page, that would set a specific configured route for all domains that are provisioned. This would then overrule any API/DNS checks on the domains current MX records, and only provision the domains with this configured new route.
CC:5
We should change the current error message to be more user friendly:
This should:
The descriptive text should also be removed from:
N/A
In 'Diagnostics' section SpamFilter API: rev.UNKNOWN
API version is shown.
The meta.xml
file should include a new property - buy_url
that indicates where the services which the extension provides can be purchased. An example of that property usage can be found here. The property should have the following value:
https://go.plesk.com/buy-plesk-ext/spamexperts-extension
(the page is not configured yet, it will be after the new version of the extension publication)
For now the Buy URL should be used in the following scenario - when the license is not installed it's not clear there is such possibility to buy the license and use configuration parameters from it. It would be helpful to add a message on the configuration form saying that the license is not installed and the user needs to buy it in online store. To get link to online store on the extension side the pm_Context::getBuyUrl()
SDK method should be used.
After setting up APS, client has not creates a seperate service template for SpamExperts, they added resources to their hosted exchange 2013 service template as seen in the screenshot.
They are getting the following error:
"Service Creation Failed: Parallels Operations Automation error #error_code #0, extype_id #1, module_id #Common, Internal error: APSC: More than one resource from hosting context is applicable for relation 'email' of type 'http://aps-standard.org/types/core/service-user/1.0'...<http://aps-standard.org/types/core/service-user/1.0%27...> Service Creation Failed: Parallels Operations Automation error #error_code #0, extype_id #1, module_id #Common, Internal error: APSC: More than one resource from hosting context is applicable for relation 'email' of type 'http://aps-standard.org/types/core/service-user/1.0'...".<http://aps-standard.org/types/core/service-user/1.0%27...%22.>"
Whmcs #879007
N/A
Extension page is opened only with subscription domain. No tab is active.
Domain type shown as 'Site'
If user click on 'Domains' tab he will see list with all his domains, add-on domains and subdomains. Now domain type is 'Webspace'!
As user doesn't have ability to open extension for specific site - 'Domains' tab should be open by default with list of all accessible domains for user.
We should remove the support form at levels lower than the Plesk administrator that configured the extension.
Not sure how this will work with the support email form though. Likely we need to hardcode the address at that level.
In order to automatically execute automated tests the project needs to be added into Travis-CI.
We should allow running the acceptance tests from anywhere you can setup a selenium server and codeception. In order to do that we will need to use export variables for the server that will be configured in the addon.
When trying to upgrade from APS 2.0-10 to version 2.0-15 this error occurs:
Task ID
13893964
Task name
Upgrading resources of application 'SpamExperts'
Task description
Upgrading resources of application SpamExperts 2.0-10 to version 2.0-15
Belongs to groups
2699:154194302
Parent task ID
13893963
Queue status
Failed
Start not earlier than
Jan-25-2017 20:03
Method name
taskUpgradeApp2x on SCREF:SaaSManagerTasks:0
Last execution output
Internal error: APSC: Upgrade to ver. 2.0-15 : resource 399ad95e-0941-4e38-9d38-9bd9e02beea7 of type 'service' (http://aps.spamexperts.com/app/service/1.3) for APS application 'SpamExperts-2.0-15' : The operation with name 'onContextAvailable' is not found..
Aps support suggested the isue was due to the domain aciel-geomatics.com. The domain exists in SE, it shows in Odin as not protected. When trying to unprotect the domain and update the following error is seen:
Internal error: APSC: Upgrade to ver. 2.0-15 : resource 399ad95e-0941-4e38-9d38-9bd9e02beea7 of type 'service' (http://aps.spamexperts.com/app/service/1.3) for APS application 'SpamExperts-2.0-15' : Internal Server Error: Unknown method "onContextAvailabeSubscribe"..
More logs attached.
latest
The support tab doesn't have the contact us form
The support tab should have the contact us form
Would be great if there was an option to add domains to SE based on the Hosting package, so that it excludes domain-only packages.
Currently its not possible to do package based. (eg like cPanel/ addon does)
This should also then work for bulk protect, to be able to bulk protect based on specific packages.
For storing settings, we should switch to using the Plesk extension build-in functionality setEncrypted()/getDecrypted().
Documentation at: https://plesk.github.io/pm-api-stubs/docs/classes/pm_Settings.html
Right now it’s not obvious where an admin can sign up to use the extension so a link to the SE sign up form should be added on the Settings page.
The link should lead to SpamExperts shop page.
Steps:
Actual result:
3 MX records for alias:
alias.again. MX (20) mail.simplyspamfree.com.
alias.again. MX (10) server1.aps1.simplyspamfree.com.
alias.again. MX (10) mail.alias.again.
Expected result:
Record "alias.again. MX (10) mail.alias.again." should be deleted.
When the license is just installed and the user enables checkbox "Use license parameters" the form is still editable till it's submitted. The same is in case the user unchecked this option and he cannot edit fields till submitting the form. It would be better to add a bit of javascript to provide better UX, e.g. disable the input fields when the checkbox is ticket and enable when the checkbox is unticked dynamically.
Latest
. Go to english versión, but my language of plesk panel is spanish version
Redirect to the correct language version y Spam experts panels
Also well be good idea translate the extension to spanish.
Versión: 1.2-0
try to check status or open the panel. without succesfull
seems like the domain is not protected when it is.
Open control panel correctly.
When trying to log into the Interface for a domain that was already protected and was present in the interface the following error occurs:
Plesk Onyx 10
Error: Parser error: Request is invalid. Error in line 3: Element 'site-id': '' is not a valid value of the atomic type 'id_type'.
The debug log shows:
}}} [2017-01-13 11:32:56] DEBUG [extension/spamexperts-extension] Modules_SpamexpertsExtension_SpamFilter_Api::checkDomain: Result: false Response: 'ERROR: The domain \'api.antispamcloud.com\' does not belong to the admin \'name_of_admin\'. }}}
However the domain seems to be wrong. Shouldn't this show the name of the domain that should actually be protected?
Would be great if the package name was listed in the “SpamExperts -> Domain List” page.
The package name should be shown in the "type" column, so that it clear which domain has which package.
Error message appears:
Internal error.
ERROR: Zend_Db_Statement_Exception: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'value' cannot be null (Pdo.php:234)
No error messages, like on Plesk v17.0 and Plesk v17.5.
[2017-08-08 17:37:29] ERR [1] PleskMainDBException: DB query failed:
INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)
Error: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'value' cannot be null
file: /usr/local/psa/admin/plib/Db/Adapter/Pdo/Mysql.php
line: 30
code: 0
trace: #0 /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php(575): Db_Adapter_Pdo_Mysql->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#1 /usr/local/psa/admin/externals/Zend/Db/Table/Abstract.php(1075): Zend_Db_Adapter_Abstract->insert(string 'ModuleSettings', array)
#2 /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php(467): Zend_Db_Table_Abstract->insert(array)
#3 /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php(438): Zend_Db_Table_Row_Abstract->_doInsert()
#4 /usr/local/psa/admin/plib/Db/Table/Row.php(27): Zend_Db_Table_Row_Abstract->save()
#5 /usr/local/psa/admin/plib/pm/Settings.php(56): Db_Table_Row->save()
#6 /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php(506): pm_Settings::set(string 'spampanel_url', NULL null)
#7 /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php(75): IndexController->setSetting(string 'spampanel_url', NULL null)
#8 /usr/local/psa/admin/externals/Zend/Controller/Action.php(516): IndexController->settingsAction()
#9 /usr/local/psa/admin/externals/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch(string 'settingsAction')
#10 /usr/local/psa/admin/externals/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(object of type Zend_Controller_Request_Http, object of type Zend_Controller_Response_Http)
#11 /usr/local/psa/admin/plib/pm/Application.php(72): Zend_Controller_Front->dispatch()
#12 /usr/local/psa/admin/htdocs/modules/spamexperts-extension/index.php(4): pm_Application->run()
[2017-08-08 17:37:30] ERR [panel] SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'value' cannot be null:
0: /usr/local/psa/admin/externals/Zend/Db/Statement/Pdo.php:234
Zend_Db_Statement_Pdo->_execute(array)
1: /usr/local/psa/admin/externals/Zend/Db/Statement.php:300
Zend_Db_Statement->execute(array)
2: /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php:479
Zend_Db_Adapter_Abstract->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
3: /usr/local/psa/admin/externals/Zend/Db/Adapter/Pdo/Abstract.php:238
Zend_Db_Adapter_Pdo_Abstract->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
4: /usr/local/psa/admin/plib/Db/Adapter/Pdo/Mysql.php:19
Db_Adapter_Pdo_Mysql->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
5: /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php:575
Zend_Db_Adapter_Abstract->insert(string 'ModuleSettings', array)
6: /usr/local/psa/admin/externals/Zend/Db/Table/Abstract.php:1075
Zend_Db_Table_Abstract->insert(array)
7: /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php:467
Zend_Db_Table_Row_Abstract->_doInsert()
8: /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php:438
Zend_Db_Table_Row_Abstract->save()
9: /usr/local/psa/admin/plib/Db/Table/Row.php:27
Db_Table_Row->save()
10: /usr/local/psa/admin/plib/pm/Settings.php:56
pm_Settings::set(string 'spampanel_url', NULL null)
11: /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php:506
IndexController->setSetting(string 'spampanel_url', NULL null)
12: /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php:75
IndexController->settingsAction()
13: /usr/local/psa/admin/externals/Zend/Controller/Action.php:516
Zend_Controller_Action->dispatch(string 'settingsAction')
14: /usr/local/psa/admin/externals/Zend/Controller/Dispatcher/Standard.php:295
Zend_Controller_Dispatcher_Standard->dispatch(object of type Zend_Controller_Request_Http, object of type Zend_Controller_Response_Http)
15: /usr/local/psa/admin/externals/Zend/Controller/Front.php:954
Zend_Controller_Front->dispatch()
16: /usr/local/psa/admin/plib/pm/Application.php:72
pm_Application->run()
17: /usr/local/psa/admin/htdocs/modules/spamexperts-extension/index.php:4
[2017-08-08 17:37:30] ERR [1] Zend_Db_Statement_Exception: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'value' cannot be null
file: /usr/local/psa/admin/externals/Zend/Db/Statement/Pdo.php
line: 234
code: 23000
trace: #0 /usr/local/psa/admin/externals/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(array)
#1 /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(array)
#2 /usr/local/psa/admin/externals/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#3 /usr/local/psa/admin/plib/Db/Adapter/Pdo/Mysql.php(19): Zend_Db_Adapter_Pdo_Abstract->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#4 /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php(575): Db_Adapter_Pdo_Mysql->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#5 /usr/local/psa/admin/externals/Zend/Db/Table/Abstract.php(1075): Zend_Db_Adapter_Abstract->insert(string 'ModuleSettings', array)
#6 /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php(467): Zend_Db_Table_Abstract->insert(array)
#7 /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php(438): Zend_Db_Table_Row_Abstract->_doInsert()
#8 /usr/local/psa/admin/plib/Db/Table/Row.php(27): Zend_Db_Table_Row_Abstract->save()
#9 /usr/local/psa/admin/plib/pm/Settings.php(56): Db_Table_Row->save()
#10 /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php(506): pm_Settings::set(string 'spampanel_url', NULL null)
#11 /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php(75): IndexController->setSetting(string 'spampanel_url', NULL null)
#12 /usr/local/psa/admin/externals/Zend/Controller/Action.php(516): IndexController->settingsAction()
#13 /usr/local/psa/admin/externals/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch(string 'settingsAction')
#14 /usr/local/psa/admin/externals/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(object of type Zend_Controller_Request_Http, object of type Zend_Controller_Response_Http)
#15 /usr/local/psa/admin/plib/pm/Application.php(72): Zend_Controller_Front->dispatch()
#16 /usr/local/psa/admin/htdocs/modules/spamexperts-extension/index.php(4): pm_Application->run()
--
#0 /usr/local/psa/admin/externals/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(array)
#1 /usr/local/psa/admin/externals/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(array)
#2 /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(array)
#3 /usr/local/psa/admin/externals/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#4 /usr/local/psa/admin/plib/Db/Adapter/Pdo/Mysql.php(19): Zend_Db_Adapter_Pdo_Abstract->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#5 /usr/local/psa/admin/externals/Zend/Db/Adapter/Abstract.php(575): Db_Adapter_Pdo_Mysql->query(string 'INSERT INTO `ModuleSettings` (`module_id`, `name`, `value`) VALUES (?, ?, ?)', array)
#6 /usr/local/psa/admin/externals/Zend/Db/Table/Abstract.php(1075): Zend_Db_Adapter_Abstract->insert(string 'ModuleSettings', array)
#7 /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php(467): Zend_Db_Table_Abstract->insert(array)
#8 /usr/local/psa/admin/externals/Zend/Db/Table/Row/Abstract.php(438): Zend_Db_Table_Row_Abstract->_doInsert()
#9 /usr/local/psa/admin/plib/Db/Table/Row.php(27): Zend_Db_Table_Row_Abstract->save()
#10 /usr/local/psa/admin/plib/pm/Settings.php(56): Db_Table_Row->save()
#11 /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php(506): pm_Settings::set(string 'spampanel_url', NULL null)
#12 /usr/local/psa/admin/plib/modules/spamexperts-extension/controllers/IndexController.php(75): IndexController->setSetting(string 'spampanel_url', NULL null)
#13 /usr/local/psa/admin/externals/Zend/Controller/Action.php(516): IndexController->settingsAction()
#14 /usr/local/psa/admin/externals/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch(string 'settingsAction')
#15 /usr/local/psa/admin/externals/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(object of type Zend_Controller_Request_Http, object of type Zend_Controller_Response_Http)
#16 /usr/local/psa/admin/plib/pm/Application.php(72): Zend_Controller_Front->dispatch()
#17 /usr/local/psa/admin/htdocs/modules/spamexperts-extension/index.php(4): pm_Application->run()
Plesk: v17.0.17 (Unix)
Extension version: v1.1-0
The old MX records are not removed
The domains should only have the new MX records added
Steps:
Actual result:
Alias is absent in Domains list.
DNS Settings for alias are protected:
sync.no. MX (20) mail.simplyspamfree.com.
sync.no. MX (10) server1.aps1.simplyspamfree.com.
Expected result:
Alias is not protected because setting "Action on secondary domains (domain aliases)" is Skip
N/A
both Domain and Sub-domain are added as protected domains.
You should be able to specify the action for Sub-domains, including not protecting, adding as alias or as a domain.
Steps to replicate
Issue: Failed to add the domain 'example.com' into the spamfilter
As Archive module support was not a requirement for the module development at the time it was created, one of our clients would like to have this option available.
another question is why those fields are names "primary MX" and "secondary MX" because those settings are controlled via DNS and are pointing towards the spamexperts incoming IP and not the end mailserver. should'nt be those fields called "primary destination host" and "secondary destination host"?
As per Marilena reques the title and the description need to be updated to the following values:
SpamExperts Email Security
The application integrates SpamExperts' advanced email security system with Plesk, offering automatic protection of domains and emails as well as a one-click login option to the dedicated SpamExperts control panel to manage specific settings and view detailed statistics.
Plesk Extensions SDK developers have recently added possibility to have formatted descriptions (in Markdown format):
We would want to improve the existing description to add more info about our extension.
SpamFilter MX hostnames are not set
The domain should be protected
<get>
<filter>
<site-id>1</site-id>
</filter>
</get>
</dns>
[2017-08-28 12:44:26] DEBUG [panel] run operator
[2017-08-28 12:44:26] DEBUG [extension/spamexperts-extension] Request is finished, response is: <?xml version="1.0" encoding="UTF-8"?>
<packet version="1.6.7.0"><dns><get><result><status>ok</status><site-id>1</site-id><zone_type>master</zone_type><zone_status>enabled</zone_status></result></get></dns></packet>
[2017-08-28 12:44:26] DEBUG [extension/spamexperts-extension] Modules_SpamexpertsExtension_SpamFilter_Api::checkDomain: Domain protection check request
[2017-08-28 12:44:26] INFO [extension/spamexperts-extension] Making SpamFilter API request: /api/domain/exists/domain/example.net
[2017-08-28 12:44:27] INFO [extension/spamexperts-extension] SpamFilter API response: ERROR: The domain 'example.net' does not belong to the admin 'plesk_04343131_1'.```
In the future release of the Plesk control panel, the PHP version used will be 7.1. There is no release date set for the new Plesk version, however we should ensure compatibility beforehand.
Changelog can be found here. The new Plesk version is still in "Preview" at this point.
Like the cPanel add-on does, our Plesk extension should also provide the ability to verify file hashes as a part of the diagnostic procedure (the Support tab) to make sure that none of the extension scripts have been changed.
The existing implementation can be ported to work as a part of the extension. The CLI interface abilities should be enough to make such task possible.
Steps:
Actual result:
Step 4: "Domain '' is NOT protected"
Step 6: "Domain '' is protected"
Step 7: Only one MX record is present:
. MX (10) mail..
Expected result:
Step 4: "Domain '' is protected"
Step 7: Appropriate MX records are present:
. MX (20) mail.simplyspamfree.com.
. MX (10) server1.aps1.simplyspamfree.com.
Additional info:
Such a behavior can be reproduced only for subdomains.
Newly added domains and aliases were protected automatically without such a time lag. Appropriate MX records were created for newly added domains and aliases. Possible this issue is somehow caused with last fix when sleep() was added.
N/A
When their clients try to submit a request to our support, they see the following notification: Professional Spam filter Information: Your message has been queued for delivery. Customer assumes this happens because they have port 25 blocked by Cloud provider or ISP.
Nothing happens and our support mail / ticketing system does not receive the message. There is also no auto-reply to the email specified in "Reply-To" with the ticket ID
Create a support request in our support mail / ticketing system which should land in the proper queue
Additional information from customer side:
Implement a mechanism for ticket submitting, which would avoid issues with port 25.
Improve the output, so that from our side it shows that a request has been sent only if it was sent indeed. And shows errors if it wasn’t.
Steps:
Actual result:
Primary contact email is NOT set for subdomains
Expected result:
Primary contact email is set for subdomains
It seems that a wrong debug log is added in the panel.log
when the Plesk license is valid and not added when the license is expired.
if (date('Ymd') < $licenseMeta['lim_date']) {
pm_Log::debug("Do not use Plesk license data is the license seems to be expired");
}
Steps:
Actual result:
Step 4. Subdomain is protected
Step 6. Subdomain is protected and DNS records:
protparent.example.test. MX (10) mail.protparent.sveta.test.
Expected result:
Step 6. Subdomain is NOT protected or DNS records:
protparent.example.test. MX (20) mail.simplyspamfree.com.
protparent.example.test. MX (10) server1.aps1.simplyspamfree.com.
It not possible to just change a Spampanel account details which is used for the extension-to-Spampanel API connection as due to security reasons the new account will not get access to all entities added by the previous one. Thus a special page - Migration - is required for the purpose of changing the operational account.
It should work exactly as it does in the cPanel added.
at the extension under settings there are the parameters "primary MX" and "secondary MX" entries. at the old extension for plesk 12.5 we filled in there our destination mail host name. lets say our antispam has the name nospam1.yourdomain.com and the mailserver ( destination host ) has mail.yourdomain.com. so we filled in at the primary MX inside the extension/settings register "mail.yourdomain.com". when we now setup a new domain this was taken a the destination host inside the spamexperts servers config for that domain. that was working. but now we can enter whatever we want it does not take those names. but instead i tries to choose as destination hostnames the MX DNS Records which is wrong because that would be the spamexperts incoming filter itselve!!
When domain list is viewed, the list remains empty. "There are no domains on this server."
PHP version:
OK!
PHP extensions:
OK!
Configuration permissions:
OK!
Panel version:
OK!
Addon version:
OK!
Hashes:
OK!
Hooks:
OK!
Symlinks:
OK!
Controlpanel API:
Unable to communicate with the controlpanel API
CRITICAL
Spamfilter API:
OK!
Symlink to PHP5 binary:
OK!
Plesk Version: Version 17.8.11
Extension Version: Version: 1.2-0
OS Version: CloudLinux 7.5
Kernel Version: 3.10.0-714.10.2.lve1.5.17.1.el7.x86_64
the original MX record is not removed
For the original MX record to be removed and only the filtering server's MX records to be kept
Plesk Onyx
Plesk: v17.0.17 (Unix)
PHP version: 5.6.27
Extension version: v1.1-0
Did not check if this replicates
Using the Plesk migrator to move one domain between servers, the general SpamExperts module configuration is also migrated, so the main user and password configured in the module to access to their spamexperts local cloud is overwritten on the destination node.
This should not be happening, from the client's perspective.
Whmcs #156235
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.