Description of your Plugin
Projects
-
About
Easy and modular OpenSimulator management and deployment for Linux. I made this system for running and managing my own regions, first in OsGrid and now on a private microgrid. Designed for OpenSim 0.9 and higher.
It’s probably not good enough for commercial-grade grids but makes life a lot easier for hobbyists running multiple sims in an open-to-connect grid (or your own microgrid).
Isthmus only works with the isthmus specific opensim runtime and needs Mono 5.11 or better:
https://github.com/lickx/opensim/tree/isthmus Alternatively, you can use your own opensim runtime, after applying the patches in doc/opensim-patchesFeatures
- Easily upgrade all sims at once
- Shared config, database and caches
- Logical folder hierarchy
- Issue mass commands (simauto) or per-sim (simctl)
- Flexible OAR backups
- Crash detection (and restart if needed)
- Dynamic port assignment (user definable range)
- Easily set up a microgrid using robust
- Only allow modern, non-shady viewers (optional)
Preconfigured
Works out of the box for:
- OsGrid (https://www.osgrid.org)
- Built-in robust gridserver (either with or without hypergrid)
For more info see the contents of the doc folder
-
HotelDruid migration tool to WooCommerce (dev)
This plugin is unstable. It addresses a specific need and is not intended for general distribution. Do not use it unless you are a developer and know what you do. You need to read, verify and adjust the code according to your needs.
The intend of this plugin is to migrate booking data from an HotelDruid setup to a WordPress WooCommerce bookings solution.
-
droopescan.
A plugin-based scanner that aids security researchers in identifying issues with several CMS.
Usage of droopescan for attacking targets without prior mutual consent is illegal. It is the end user’s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program. Please note that while droopescan outputs the most CMS likely version installed on the remote host, any correlation between version numbers and vulnerabilities must be done manually by the user.
CMS supported are:
- Drupal.
- SilverStripe.
- WordPress.
Partial functionality for:
- Joomla (version enumeration and interesting URLs only).
- Moodle (plugin & theme very limited, watch out)
computer:~/droopescan$ droopescan scan drupal -u http://example.org/ -t 8 [+] No themes found.
[+] Possible interesting urls found: Default changelog file - https://www.example.org/CHANGELOG.txt Default admin - https://www.example.org/user/login
[+] Possible version(s): 7.34
[+] Plugins found: views https://www.example.org/sites/all/modules/views/ https://www.example.org/sites/all/modules/views/README.txt https://www.example.org/sites/all/modules/views/LICENSE.txt token https://www.example.org/sites/all/modules/token/ https://www.example.org/sites/all/modules/token/README.txt https://www.example.org/sites/all/modules/token/LICENSE.txt pathauto https://www.example.org/sites/all/modules/pathauto/ https://www.example.org/sites/all/modules/pathauto/README.txt https://www.example.org/sites/all/modules/pathauto/LICENSE.txt https://www.example.org/sites/all/modules/pathauto/API.txt libraries https://www.example.org/sites/all/modules/libraries/ https://www.example.org/sites/all/modules/libraries/CHANGELOG.txt https://www.example.org/sites/all/modules/libraries/README.txt https://www.example.org/sites/all/modules/libraries/LICENSE.txt entity https://www.example.org/sites/all/modules/entity/ https://www.example.org/sites/all/modules/entity/README.txt https://www.example.org/sites/all/modules/entity/LICENSE.txt google_analytics https://www.example.org/sites/all/modules/google_analytics/ https://www.example.org/sites/all/modules/google_analytics/README.txt https://www.example.org/sites/all/modules/google_analytics/LICENSE.txt ctools https://www.example.org/sites/all/modules/ctools/ https://www.example.org/sites/all/modules/ctools/CHANGELOG.txt https://www.example.org/sites/all/modules/ctools/LICENSE.txt https://www.example.org/sites/all/modules/ctools/API.txt features https://www.example.org/sites/all/modules/features/ https://www.example.org/sites/all/modules/features/CHANGELOG.txt https://www.example.org/sites/all/modules/features/README.txt https://www.example.org/sites/all/modules/features/LICENSE.txt https://www.example.org/sites/all/modules/features/API.txt [... snip for README ...]
[+] Scan finished (0:04:59.502427 elapsed)
You can get a full list of options by running:
droopescan --help droopescan scan --help
Why not X?
Because droopescan:
- is fast
- is stable
- is up to date
- allows simultaneous scanning of multiple sites
- is 100% python
Installation
Installation is easy using pip:
apt-get install python-pip pip install droopescan
Manual installation is as follows:
git clone https://github.com/droope/droopescan.git cd droopescan pip install -r requirements.txt ./droopescan scan --help
The master branch corresponds to the latest release (what is in pypi). Development branch is unstable and all pull requests must be made against it. More notes regarding installation can be found here.
Features
Scan types.
Droopescan aims to be the most accurate by default, while not overloading the target server due to excessive concurrent requests. Due to this, by default, a large number of requests will be made with four threads; change these settings by using the
--number
and--threads
arguments respectively.This tool is able to perform four kinds of tests. By default all tests are ran, but you can specify one of the following with the
-e
or--enumerate
flag:- p — Plugin checks: Performs several thousand HTTP requests and returns a listing of all plugins found to be installed in the target host.
- t — Theme checks: As above, but for themes.
- v — Version checks: Downloads several files and, based on the checksums of these files, returns a list of all possible versions.
- i — Interesting url checks: Checks for interesting urls (admin panels, readme files, etc.)
More notes regarding scanning can be found here.
Target specification.
You can specify a particular host to scan by passing the
-u
or--url
parameter:droopescan scan drupal -u example.org
You can also omit the
drupal
argument. This will trigger “CMS identification”, like so:droopescan scan -u example.org
Multiple URLs may be scanned utilising the
-U
or--url-file
parameter. This parameter should be set to the path of a file which contains a list of URLs.droopescan scan drupal -U list_of_urls.txt
The
drupal
parameter may also be ommited in this example. For each site, it will make several GET requests in order to perform CMS identification, and if the site is deemed to be a supported CMS, it is scanned and added to the output list. This can be useful, for example, to rundroopescan
across all your organisation’s sites.droopescan scan -U list_of_urls.txt
The code block below contains an example list of URLs, one per line:
http://localhost/drupal/6.0/ http://localhost/drupal/6.1/ http://localhost/drupal/6.10/ http://localhost/drupal/6.11/ http://localhost/drupal/6.12/
A file containing URLs and a value to override the default host header with separated by tabs or spaces is also OK for URL files. This can be handy when conducting a scan through a large range of hosts and you want to prevent unnecessary DNS queries. To clarify, an example below:
192.168.1.1 example.org http://192.168.1.1/ example.org http://192.168.1.2/drupal/ example.org
It is quite tempting to test whether the scanner works for a particular CMS by scanning the official site (e.g.
wordpress.org
for wordpress), but the official sites rarely run vainilla installations of their respective CMS or do unorthodox things. For example,wordpress.org
runs the bleeding edge version of wordpress, which will not be identified as wordpress bydroopescan
at all because the checksums do not match any known wordpress version.Authentication.
The application fully supports
.netrc
files andhttp_proxy
environment variables.Use a .netrc file for basic authentication. An example netrc (a file named
.netrc
placed in your root home directory) file could look as follows:machine secret.google.com login admin@google.com password Winter01
You can set the
http_proxy
andhttps_proxy
variables. These allow you to set a parent HTTP proxy, in which you can handle more complex types of authentication (e.g. Fiddler, ZAP, Burp)export http_proxy='user:password@localhost:8080' export https_proxy='user:password@localhost:8080' droopescan scan drupal --url http://localhost/drupal
WARNING: By design, to allow intercepting proxies and the testing of applications with bad SSL, droopescan allows self-signed or otherwise invalid certificates. ˙ ͜ʟ˙
Output.
This application supports both "standard output", meant for human consumption, or JSON, which is more suitable for machine consumption. This output is stable between major versions.
This can be controlled with the
--output
flag. Some sample JSON output would look as follows (minus the excessive whitespace):{ "themes": { "is_empty": true, "finds": [
] }, "interesting urls": { "is_empty": false, "finds": [ { "url": "https://www.drupal.org/CHANGELOG.txt", "description": "Default changelog file." }, { "url": "https://www.drupal.org/user/login", "description": "Default admin." } ] }, "version": { "is_empty": false, "finds": [ "7.29", "7.30", "7.31" ] }, "plugins": { "is_empty": false, "finds": [ { "url": "https://www.drupal.org/sites/all/modules/views/", "name": "views" }, [...snip...] ] } }
Some attributes might be missing from the JSON object if parts of the scan are not ran.
This is how multi-site output looks like; each line contains a valid JSON object as shown above.
$ droopescan scan drupal -U six_and_above.txt -e v {"host": "http://localhost/drupal-7.6/", "version": {"is_empty": false, "finds": ["7.6"]}} {"host": "http://localhost/drupal-7.7/", "version": {"is_empty": false, "finds": ["7.7"]}} {"host": "http://localhost/drupal-7.8/", "version": {"is_empty": false, "finds": ["7.8"]}} {"host": "http://localhost/drupal-7.9/", "version": {"is_empty": false, "finds": ["7.9"]}} {"host": "http://localhost/drupal-7.10/", "version": {"is_empty": false, "finds": ["7.10"]}} {"host": "http://localhost/drupal-7.11/", "version": {"is_empty": false, "finds": ["7.11"]}} {"host": "http://localhost/drupal-7.12/", "version": {"is_empty": false, "finds": ["7.12"]}} {"host": "http://localhost/drupal-7.13/", "version": {"is_empty": false, "finds": ["7.13"]}} {"host": "http://localhost/drupal-7.14/", "version": {"is_empty": false, "finds": ["7.14"]}} {"host": "http://localhost/drupal-7.15/", "version": {"is_empty": false, "finds": ["7.15"]}} {"host": "http://localhost/drupal-7.16/", "version": {"is_empty": false, "finds": ["7.16"]}} {"host": "http://localhost/drupal-7.17/", "version": {"is_empty": false, "finds": ["7.17"]}} {"host": "http://localhost/drupal-7.18/", "version": {"is_empty": false, "finds": ["7.18"]}} {"host": "http://localhost/drupal-7.19/", "version": {"is_empty": false, "finds": ["7.19"]}} {"host": "http://localhost/drupal-7.20/", "version": {"is_empty": false, "finds": ["7.20"]}} {"host": "http://localhost/drupal-7.21/", "version": {"is_empty": false, "finds": ["7.21"]}} {"host": "http://localhost/drupal-7.22/", "version": {"is_empty": false, "finds": ["7.22"]}} {"host": "http://localhost/drupal-7.23/", "version": {"is_empty": false, "finds": ["7.23"]}} {"host": "http://localhost/drupal-7.24/", "version": {"is_empty": false, "finds": ["7.24"]}} {"host": "http://localhost/drupal-7.25/", "version": {"is_empty": false, "finds": ["7.25"]}} {"host": "http://localhost/drupal-7.26/", "version": {"is_empty": false, "finds": ["7.26"]}} {"host": "http://localhost/drupal-7.27/", "version": {"is_empty": false, "finds": ["7.27"]}} {"host": "http://localhost/drupal-7.28/", "version": {"is_empty": false, "finds": ["7.28"]}} {"host": "http://localhost/drupal-7.29/", "version": {"is_empty": false, "finds": ["7.29"]}} {"host": "http://localhost/drupal-7.30/", "version": {"is_empty": false, "finds": ["7.30"]}} {"host": "http://localhost/drupal-7.31/", "version": {"is_empty": false, "finds": ["7.31"]}} {"host": "http://localhost/drupal-7.32/", "version": {"is_empty": false, "finds": ["7.32"]}} {"host": "http://localhost/drupal-7.33/", "version": {"is_empty": false, "finds": ["7.33"]}} {"host": "http://localhost/drupal-7.34/", "version": {"is_empty": false, "finds": ["7.34"]}}
Debug.
When things are not going exactly your way, you can check why by using the
--debug-requests
command.Some output might look like this:
computer:~/droopescan# droopescan scan silverstripe -u http://localhost -n 10 -e p --debug-requests [head] http://localhost/framework/... 403 [head] http://localhost/cms/css/layout.css... 404 [head] http://localhost/framework/css/UploadField.css... 200 [head] http://localhost/misc/test/error/404/ispresent.html... 404 [head] http://localhost/widgetextensions/... 404 [head] http://localhost/orbit/... 404 [head] http://localhost/sitemap/... 404 [head] http://localhost/simplestspam/... 404 [head] http://localhost/ecommerce_modifier_example/... 404 [head] http://localhost/silverstripe-hashpath/... 404 [head] http://localhost/timeline/... 404 [head] http://localhost/silverstripe-hiddenfields/... 404 [head] http://localhost/addressable/... 404 [head] http://localhost/silverstripe-description/... 404 [+] No plugins found.
[+] Scan finished (0:00:00.058422 elapsed)
The
--debug
paramter also exists and may be used to debug application internals.Stats.
You can get an up to date report on the capabilities of the scanner by running the following command
droopescan stats
Some sample output might look as follows:
Functionality available for ‘drupal’: - Enumerate plugins (XXXX plugins.) - Enumerate themes (XXXX themes.) - Enumerate interesting urls (X urls.) - Enumerate version (up to version X.X.X-alphaXX, X.XX, X.XX.) Functionality available for ‘joomla’: - Enumerate interesting urls (X urls.) - Enumerate version (up to version XX.X, X.X.X, X.X.XX.rcX.) Functionality available for ‘wordpress’: - Enumerate interesting urls (X urls.) - Enumerate version (up to version X.X.X, X.X.X, X.X.X.) Functionality available for ‘silverstripe’: - Enumerate plugins (XXX plugins.) - Enumerate themes (XX themes.) - Enumerate interesting urls (X urls.) - Enumerate version (up to version X.X.XX, X.X.XX, X.X.XX.)
It is important to verify that the latest version available for the CMS installation is available within
droopescan
, as otherwise results may be inaccurate.Contribute.
Create your own plugin.
You can add suport for your favourite CMS. The process is actually quite simple, and a lot of information can be glimpsed by viewing the example.py file in the plugins/ folder.
This file should serve well as a base for your implementation.
You can create your own plugin for
Joomla
and enable it as follows:$ cp plugins/example.py plugins/joomla.py $ cp plugins.d/example.conf plugins.d/joomla.conf
You then need to go to
plugins/joomla.py
and change a few things:- The class name needs to be Joomla.
- The plugin label (located at Meta.label) needs to be changed to joomla.
- At the end of the file, the register call needs to be modified to reflect the correct class name.
- The exposed function, ‘example’, needs to be renamed to joomla.
@controller.expose(help='example scanner') def joomla(self): self.plugin_init()
We also need to change the
plugins.d/joomla.conf
file, and change it to the following:[joomla] enable_plugin = true
We should now be in a state which looks as follows:
$ droopescan scan joomla [+] --url parameter is required.
Your next step would be to generate a valid plugin wordlist, a valid theme wordlist, a versions.xml file, and optionally a list of interesting URLs, as well as replace all variables that are in joomla.py with values that are correct for your implementation.
The plugin needs to update automatically in order for a pull request to be accepted. Further documentation may be later made available, but for now, keep in mind that the update_version_check, update_version, update_plugins_check and update_plugins need to be implemented. For reference, please review the
drupal.py
file. This is required in order to ensure plugins are kept to date.Issues & Pull Requests.
Pull requests that create new plugins are welcome provided that maintenance for those plugins is done automatically.
Please remember to make your pull requests against the develoment branch rather than the master. Issues can be raised on the issue tracker here on GitHub.
To run tests, some dependencies must be installed. Running the following commands will result in them being installed and the tests being ran:
apt-get install libxslt1-dev libxml2-dev zlib1g-dev python python-pip python-dev python3 python3-pip python3-dev pip install -r requirements.txt -r requirements_test.txt pip3 install -r requirements.txt -r requirements_test.txt ./droopescan test
You can run individual tests with the
-s
flag../droopescan test -s test_integration_drupal
License.
The project is licensed under the AGPL license.
-
Documents from Git – Oli’s version
This WordPress Plugin lets you easily publish, collaborate on and version control your [Markdown, Jupyter notebook] documents directly from your favorite remote Git platform, even if it’s self-hosted.
The advantages are:
- Write documents in your favorite editor and just push to your remote repository to update your blog instantly
- Use the power of version control: publish different versions of the document in different posts, i.e. from another branch or commit than latest
master
- Easy to update by your readers via pull requests, minimizing the chance of stale tutorials
The following document types are currently supported:
- Markdown
- Jupyter notebooks (only for public repositories)
The following platforms are currently supported:
- Github
- Bitbucket
- Gitlab
Usage
Note, this plugin uses Github’s wonderful
/markdown
API to render to HTML. This comes with 2 caveats:- Unless authenticated, the rate limit is set at 60 requests per minute. Since v1.1.0 the plugin is capable of statically caching content. In case that’s not dynamic enough for you, your only option currently is to not use any cache in which case every document will be pulled from your provider every time someone opens it on your site. Then it’s strongly recommended to create a Github access token and register it with the plugin. Then the rate limit will be set to 5000 requests per hour. See Global attributes section for details on how to do that.
- The Markdown content cannot exceed 400 KB, so roughly 400 000 characters incl whitespace. If not a monographic dissertation, this should not be an applicable limit though.
Configuration
In the main menu Settings > Documents from Git you can set all important global settings.
Note: previous
config.json
is deprecated now due to security concerns.Shortcodes
The features of the plugin are provided through shortcodes. You can use them in your posts, pages or custom post types.
Publish documents
[git-<platform>-<action>]
The document-specific shortcode<platform>
can be one ofgithub
: if you use Github as your VCS platformbitbucket
: if you use Bitbucket as your VCS platformgitlab
: if you use Gitlab as your VCS platform
<action>
can be one ofmarkdown
: Render your Markdown files hosted on your VCS platform in Github’s rendering stylejupyter
: Render your Jupyter notebook hosted on your VCS platform (only for public repositories)checkout
: Renders a small badge-like box with a link to the document and the date of the last commithistory
: Renders a<h2>
section with the last commit dates, messages and authors
Manipulate rendering style
[git-add-css]
adds a<div id="git-add-css" class="<classes_attribute>"
to wrap content. That way you can manipulate the style freely with additional CSS classes. Follow these steps:- Add a CSS file to your theme’s root folder, which contains some classes, e.g.
class1
,class2
,class3
- Enqueue the CSS file by adding
wp_enqueue_style('my-style', get_template_directory_uri().'/my-style.css');
to the theme’sfunctions.php
- Add the enclosing
git-add-css
shortcode to your post with the custom CSS classes in theclasses
attribute, e.g.:
[git-add-css classes="class1 class2 class3"] [git-gitlab-checkout url=...] [git-gitlab-markdown url=...] [git-gitlab-history url=...] [/git-add-css]
Attributes
Each shortcode takes a few attributes, indicating if it’s required for public or private repositories:
url
: The URL of the document in the repository- Type: string
- Action: all except
git-add-css
- Public repo: :ballot_box_with_check:
- Private repo: :ballot_box_with_check:
user
: The user name (not email) of an authorized user- Type: string
- Action: all except
git-add-css
- Public repo: :negative_squared_cross_mark:
- Private repo: :ballot_box_with_check:
token
: The access token/app password for the authorized user- Type: string
- Action: all except
git-add-css
- Public repo: :negative_squared_cross_mark:
- Private repo: :ballot_box_with_check:
cache_ttl
: The time in seconds that the plugin will cache, only forcache_strategy=static
.- Type: integer
- Action: all except
git-add-css
- Public repo: :negative_squared_cross_mark:
- Private repo: :negative_squared_cross_mark:
cache_strategy
: Onlystatic
caching is implemented so far.dynamic
caching is on the way!- Type: integer
- Action: all except
git-add-css
- Public repo: :negative_squared_cross_mark:
- Private repo: :negative_squared_cross_mark:
limit
: Limits the history of commits to this number. Default 5.- Type: integer
- Action:
history
- Public repo: :negative_squared_cross_mark:
- Private repo: :negative_squared_cross_mark:
classes
: The additional CSS classes to render the content with- Type: string
- Action:
git-add-css
- Public repo: :ballot_box_with_check:
- Private repo: :ballot_box_with_check:
Caching
Often we need to prioritize speed when loading content and, in addition, it is very costly to fetch, load and format the content every time we need to read the content of the post.
This plugin soon offers 2 methods for caching,
static
anddynamic
which can be set via thecache_strategy
property.- Static caching (
cache_strategy=static
)
This is the default strategy, as it doesn’t require any user action.
The property
cache_ttl
sets how many seconds the content cache will keep alive.Currently there’s no way to flush the cache manually. However, changing
cache_ttl
or the historylimit
will create a new cache.- Dynamic caching (
cache_strategy=dynamic
)
This is not implemented yet. See #20 for details.
Token
authorizationYou need to authorize via
user
andtoken
if you intend to publish from a private repository. You don’t need to authorize if the repository is open.However, keep in mind that some platforms have stricter API limits for anonymous requests which are greatly extended if you provide your credentials. So even for public repos it could make sense. And unless you use this plugin’s caching capabilities, it’s strongly recommended to register a Github access token regardless of the VCS hosting platform, see the beginning of the chapter.
How to generate the
token
depends on your platform:- Github: Generate a Personal Access Token following these instructions
- Bitbucket: Generate a App Password following these instructions
- Gitlab: Generate a Personal Access Token following these instructions
This plugin needs only Read access to your repositories. Keep that in mind when creating an access token.
Examples
We publish our own tutorials with this plugin: https://gis-ops.com/tutorials/.
- Publish Markdown from Github
[git-github-markdown url="https://github.com/gis-ops/tutorials/blob/master/qgis/QGIS_SimplePlugin.md"]
- Publish Markdown from Github with 1 hour cache
[git-github-markdown url="https://github.com/gis-ops/tutorials/blob/master/qgis/QGIS_SimplePlugin.md" cache_ttl="3600" cache_strategy="static"]
- Publish Jupyter notebook from Github
[git-github-jupyter url="https://github.com/GIScience/openrouteservice-examples/blob/master/python/ortools_pubcrawl.ipynb"]
- Publish from a private repository
[git-bitbucket-jupyter user=nilsnolde token=3292_2p3a_84-2af url="https://bitbucket.org/nilsnolde/test-wp-plugin/src/master/README.md"]
- Display last commit and document URL from Bitbucket
[git-bitbucket-checkout url="https://bitbucket.org/nilsnolde/test-wp-plugin/src/master/README.md"]
- Display commit history from Gitlab
git-gitlab-history limit=5 url="https://gitlab.com/nilsnolde/esy-osm-pbf/-/blob/master/README.md"]
- Use additional CSS classes to style
The following example will put a dashed box around the whole post:
[git-add-css classes="md-dashedbox"] [git-github-checkout url="https://github.com/gis-ops/tutorials/blob/master/qgis/QGIS_SimplePlugin.md"] [git-github-markdown url="https://github.com/gis-ops/tutorials/blob/master/qgis/QGIS_SimplePlugin.md"] [git-github-history url="https://github.com/gis-ops/tutorials/blob/master/qgis/QGIS_SimplePlugin.md"] [/git-add-css]
With the following CSS file contents enqueued to your theme:
div.md_dashedbox { position: relative; font-size: 0.75em; border: 3px dashed; padding: 10px; margin-bottom:15px }
div.md_dashedbox div.markdown-github { color:white; line-height: 20px; padding: 0px 5px; position: absolute; background-color: #345; top: -3px; left: -3px; text-transform:none; font-size:1em; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; }
Installation
WordPress.org
The latest version is on Oli’s GitHub repository
https://github.com/magicoli/documents-from-git
There is no automatic update process from GitHub. You need to download the latest release and upload it to your WordPress installation, or, for advanced users, clone the repository into your
wp-content/plugins
folder and use git features.Note: The release from the original author on WordPress plugin store is deprecated and does not receive updates Documents from Git.
Troubleshooting
For troubleshooting and frequently asked questions, please refer to the FAQ page.
Acknowledgements
Contributions from other projects
- Nils Nolde, former maintainer of the plugin.
The file structure has been reorganised from the original version to make it more maintainable and to follow WordPress best practices, mainly bringing the wordpress file structure to the root folder, so applying this repo modifications to an original clone might need some extra preparation, but is not impossible.
github-markdown-css
: CSS project for the Github flavored Markdown style, License MIT- This plugin maintains a copy of the CSS file
nbconvert
: WordPress plugin to convert Jupyter notebooks into blog posts, License MIT- The idea for this plugin was mainly inspired by
nbconvert
and borrows some of the HTML and the CSS for Jupyter notebooks
- The idea for this plugin was mainly inspired by
- Jason Long: Git logos under Creative Commons Attribution 3.0 Unported License
-
Disable Password Change Notification
Simple plugin to disable admin notifications when users change their password. No configuration, activate the plugin and voilà.
-
Bash helpers
Copyright 2015 Olivier van Helden olivier@van-helden.net. Released under GNU Affero GPL v3.0 license, unless otherwise stated. http://www.gnu.org/licenses/agpl-3.0.html
A couple of useful tools for bash scripting.
helpers
Put this line at the beginning of your script (do not run the file directly, source it):
. /path/to/helpers
and use these functions inside the script
end [errornumber] [message] log [errornumber] [message] readvar [var] yesno [-y] ["message"] ucfirst [string]
ini_parser
A tool to read .ini config in bash scripts
let’s say you have a .ini file with this content
[Default] name = "Albert" [Smart] name = "Einstein"
Put this line at the beginning of your script (do not run the file directly, source it):
. /path/to/ini_parser
And, where you need it
ini.parse /path/to/config/file.ini ini.section.Default echo $name
Output:
Albert
Then, later… (no need to repeat ini.parse /path/to/config/file.ini)
ini.section.Smart echo $name
Output:
Einstein
Voilà ! (en français dans le texte)
More details inside ini_parser
-
Band Tools
Post types and tools for bands. Allow publishing of records with songs list. Easy enough for a single band. Complete enough for several ones.
Although you can get this plugin for free, buying it will fund development and help providing future features.
-
automatic-theme-plugin-update
Automatic Theme & Plugin Updater for Self-Hosted Themes/Plugins
Support This Developer: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SE9ZVJUS324UC
Any amount is always appreciated
General Info
For themes and plugins that can’t be submitted to official WordPress repository, ie … commercial themes/plugins/, non-gpl licensed, written for one client.
Folder structure
- api (Folder to upload to server where updates will be housed)
- .htaccess (set Options+Indexes to allow checking to work properly)
- index.php (holds code used to check request for new versions)
- packages.php (file containing all info about plugins and themes)
- download.php (validates md5 key of date and package zip file)
- update (folder to hold all zip file updates for url masking – protected by .htaccess to disallow file listings)
- update (default folder for holding theme and plugin zip files)
- .htaccess (prevents indexing and viewing of any zip files in directory)
- plugin (folder for adding plugin update checking)
- test-plugin-update (simple plugin folder to show how update functions work)
- test-plugin-update.php (example plugin that only checks for updates to server)
- test-plugin-update (simple plugin folder to show how update functions work)
- theme (folder for theme update checking)
- update.php (file that can be included from functions.php of theme to check for updates)
Important:
Change $api_url to your api server url in:
/plugin/test-plugin-update/test-plugin-update.php /theme/update.php
Adding new versions
Edit the packages.php under api folder on your server. Commented thoroughly throughout with sections that need to be changed to reflect themes/plugins that are to be updated.
Adding additional themes/plugins
Simply create another $package array with the key of the new theme/plugin slug and add all the appropriate info. When releasing the theme/plugin make sure that functions and variables are prefixed to prevent errors and allow multiple themes/plugins to be updated.
Child theme support
Child themes are now supported. If the theme being updated is meant to be a parent theme the standard theme/update.php from the theme file will work. If the theme is a child theme of another theme comment out the parent theme section and uncomment the child theme section on the theme/update.php
Securing Download location
Downloads are now always secured by a md5 hash of the package file_name and timestamp of current date. When downloading file current timestamp and timestamp of previous day are compared to key received from update request, if either match zip file is passed, and file can be downloaded.
- api (Folder to upload to server where updates will be housed)