Quantcast
Channel: Pydio, formerly AjaXplorer
Viewing all 71 articles
Browse latest View live

[must read] Upgrading v5 to v6

$
0
0

This is a summary of common issues that can appear during upgrade. It is a copy of original forum thread https://pyd.io/f/topic/troubleshooting-upgrade-to-v6/

Upgrade to v6 troubleshooting

Let’s use this forum thread to summarize and discuss potential issues while upgrading
First, a list of resources:
> Release note: https://pyd.io/pydio-core-6-0-0/
> Product tour: https://pyd.io/pydio-6-tour/

Please post as a comments your issues, i’ll reedit this thread accordingly.

1/ I don’t see “upgrade available” in the app

Make sure that your Update Engine plugin is correctly configured: if you are running 5.2.5, must be poiting to Stable channel. If you are running 5.3.4, must be pointing to dev channel.

2/ I can’t upgrade because I’m using APT-GET or YUM – Or I did upgrade using apt-get/yum update, but I have a blank page

Did you read https://pyd.io/upgrade-pydio-5-2-5-to-6-0-0/ ?

2.1/ Error : The root install path is not writeable, no file will be copied! The archive is available on your server, you can copy its manually to override the current installation.

The simplest way should be to temporarily change permissions on your Pydio install, perform upgrade from the interface, and revert them again. Basically, you can chown -R www-data (or httpd) the whole folder, do the upgrade, then revert to whatever the user was, and then again reopen the write permission on the /data/ folder.

3/ After upgrading from a serial-based pydio5, i cannot access my workspaces anymore

You see an error about “wrong SQL setup for meta plugins”. Open the file conf/bootstrap_repositories.php and comment out the lines of the default repositories where you see "meta.syncable" => array(), by simply adding a double slash at the beginning // "meta.syncable" => array(), . This should solve the problem.

Also, you’ll have to change the “Access.fs” plugin options. In the admin panel, in the plugins settings, look for Workspaces Drivers >> FileSystem Standard (access.fs), edit the global parameters of this plugin: remove “meta.syncable” from the Default Meta Sources here. Otherwise, each time you will create a workspace with this driver, the meta.syncable will be added automatically.

Please note that you then cannot use the PydioSync with such a setup.

4/ After upgrading, I still see the old theme, and not the beautiful one as on your demo!

Make sure to switch to the new ORBIT theme: under admin panel, in Features Plugins > Graphical User Interface > Client Driver, switch the theme to “Orbit”.

4.1/ I updated my DEB/RPM and manually applied the DB upgrade as explained in the how-to, but I now see DB errors like ‘Unknown column ‘index_path’ in ‘where clause’’

This is because another manual update was necessary when upgrading to v5.2.0, and you probably have not applied it. And it was probably transparent because the new columns were not used unless you activated some features, which we did in v6. So please go to https://github.com/pydio/pydio-core/blob/develop/dist/php/5.2.0.sql (or .sqlite) and apply this as well.

5/ Help! White Page after upgrade and no errors in logs [FIXED in 6.0.1]

If you see a blank page, and let’s say that your server is installed at http://yoururl.com/my_pydio , open the Web Developers console of your browser, and you see errors loading JS and CSS files. If you look carefully at the problematic urls, you can see that they are pointing to /plugins/gui.ajax/etc… instead of /my_pydio/plugins/gui.ajax etc.
You probably have manually set the Server URL in your pydio core options, and the base of the application is detected as /my_pydio instead of /my_pydio/ (the last slash is important).

Open the file plugins/gui.ajax/class.AJXP_ClientDriver.php and add the following line just after line 144:

if(!empty($configUrl)){
    $root = '/'.ltrim(parse_url($configUrl, PHP_URL_PATH), '/');
    // ADD THIS LINE
    if(strlen($root) > 1) $root = rtrim($root, '/').'/';
    // END
}else{

Now reload the interface.

6/ New Shares are not working (404)

New shares now REQUIRE that you have apache mod_rewrite enabled (or equivalent for other webservers). Also, the upgrade should have modified the .htaccess located in data/public/, but to make sure, you can remove the file data/public/grid_t.png inside this folder, and create a new share. This should regenerate the htaccess file.

7/ Php big errors like “Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING …

Make sure to use php5.3 or higher.

8/ Various errors with ldap_control_paged_result_response()  [FIXED in 6.0.1]

We introduced the usage of new PHP features to help browsing pages on an ad/ldap server (functions added in php5.4). But it seems some php versions have problems with that. We’ll add a parameter in next release, in between, you can hack the ldap plugin by forcing to ignore this feature.
In plugins/auth.ldap/class.authLdapDriver.php, replace existing line 312:
$isSupportPagedResult = function_exists("ldap_control_paged_result") && function_exists("ldap_control_paged_result_response");
by
$isSupportPagedResult = false;

9/ Problems creating workspaces in Italian Language  [FIXED in 6.0.1]

This should now be fixed in 6.0.1


Pydio 6.0.4 – Bugfix release

$
0
0

Pydio 6.0.4 – Bugfix

This is a bugfix release for 6.0.3

If you have not yet updated to v6, please take the complete product tour here.

  • Date: March, 3rd 2015
  • License: Affero GPL
  • Download: Sourceforge Project
  • Source Code: Github Project
  • Copyright: Abstrium SAS / Charles du Jeu 2015
  • Upgrade: In-app upgrade for archives installs – RPM/DEB update
  • Contributors: Charles du Jeu, Tran The Cuong, Andypmuc, Ndeet, Flauschbaellchen – Thanks to all of you!

 

The new welcome page

Pydio 6 welcome page

Upgrade Process

Upgrading from 6.0.3 to 6.0.4 should be straightforward.

> If you are upgrading from 5.X version, please first read the 6.0.0 release note and upgrade instructions. There are some specific manual DB upgrade to be applied for Linux Packages.

> If you are on v6 but not yet upgraded to 6.0.3, just make sure that the conf/bootstrap_context.php (or /etc/pydio/bootstrap_context.php) is updated to the latest version, otherwise you may see “Dibi class not found” errors.

Changelog

  • Bugfixes for sync between parent & shared folders, trigger indexation on first sync of shared workspace, update Observe Storage changes mechanism.
  • SearchEngine UX improved.
  • Analytics Dashboard now supported by PostgreSQL and Sqlite.
  • Decoupling index.lucene from meta.syncable.
  • New hooks: before/after create/delete/update workspace. Used to properly clear indexation data on workspace removal.

All commits

  • Update de.php (details)
  • Fix #834 – Wrong message on group deletion (details)
  • CartManager is triggering the old-fashion public link (details)
  • Make sure to push the newly activated plugins at the end of the list. Should fix #822 (details)
  • Transport a contextual user ID as a node property or through the URL. Pass a contextual user to the VarsFilter::filter() function Fix shareEventsForwarding when in a personal workspace (shared events not going to parents, preventing sync for example) (details)
  • Performances: do not call getRole() again if role is already loaded in the loop (details)
  • Meta.mount: New option to delete mount point on unmount (details)
  • Fix #803 (details)
  • Open search box when clicking on magnifier. (details)
  • Modal: handle case where dialogTitle is positioned absolute. Modify CSS accordingly. (details)
  • Typo prevented shared users deletion when not logged as admin (details)
  • Try base64_decode for legacy – Was breaking the mp3 player in a shared minisite (details)
  • Fix repository exposed property, values not correctly retrieved (details)
  • Error in slug generation, make sure to look at the reserved slugs when building new ones (details)
  • Share users list: Add an option to not trigger any listing if no regexp is sent (details)
  • Fix error if msgExchanger is not set. (details)
  • Use loadNodeInfo() instead of stat in ChangesTracker, otherwise eventForwarding can end up indexing a folder as file. (details)
  • [index.lucene] Typo calling getUser() on wrong object (details)
  • Introduce an AJXP_METADATA_ALLUSERS metadata users scope to gather meta from all users. Used in eventForwarding for ShareCenter. (details)
  • Big refactoring to decouple meta.syncable from index.lucene: core.index is now responsible for triggering a recursive indexation and sending corresponding events. (details)
  • Fix #842 : API issue on IIS when in root folder. (details)
  • Fix inZip detection for UserSelection built without “dir” parameter. (details)
  • Set pydio global variable from within AjaXplorer class, not only Bootstrap (skip updating bootstrap) (details)
  • Consume_channel: avoid repeating query if previous query is not yet finished (details)
  • Make sure to unset currentIndex to trigger the __destruct function and release all handlers on files. Prevented the cleaning of the TMP index on Windows. (details)
  • Fix Quota computation on MacOS server (details)
  • The indexIsSync() feature can be triggered with bad value, creating issues in synchro (details)
  • Comment out debugs from authfront.keystore , too verbose. (details)
  • Refactor upload method to make it more readable. Fix wrong event sent after partial uploads. (details)
  • Translate PHP errors (details)
  • Move fsAccessDriver functions to its parent AbstractAccessDriver (details)
  • Update “Observe Storage” mechanism to make it more reliable and less frequent. (details)
  • Do not set default plugin value if not in meta source. (details)
  • Fix Analytics Dashboard for Sqlite and PostgreSQL drivers (details)
  • New parameter in Index.Lucene to hide the “My Shares” section (details)
  • Close SearchEngine on context_changed (details)
  • Mark a repository for REQUIRES_INDEXATION at share time. Trigger indexation if necessary when requiring changes – Fix auto-indexation on first search. (details)
  • Trigger events on workspace before/after create/update/delete Hook indexers (lucene & meta.syncable) to the after_delete event to clear the indexes. (details)
  • Sync: trigger client last_seq reset if the sequence ID is greater than the current max of the changes table. Foresee the need to vacuum the changes table. (details)
  • Search results are limited by max-height (ndeet)
  • Fix Dav configuration when Server URL is set (andypmuc)
  • Sanitize function: trim spaces only no the left, or it can break when syncing files with trailing space
  • Secure error message on rename operations by catching the result

 

Troubleshooting Sync

$
0
0

This how-to will gather common problems encountered with the sync client.

  • Pydio Server requirements
    • v6 or later
    • SQL Database available
    • API properly configured
    • If using SSL, make sure to use a properly validated certificate
  • Workpsaces requirements
    • Meta.syncable plugin active (via Workspace Features)
    • FileHasher plugin active
    • Metastore plugin active (to cache file hashes)
    • If pydio <= 6.0.3, Index.lucene must be active as well
  • Indexation:
    on the server-side, the changes are continuously indexed so that the sync client only receives the modification of the tree when required. For this reason, if you are planning to modify the data of a workspace from outside pydio, you have to set up a specific strategy to make sure to keep pydio in sync. See How-to on this topic. If you are creating a workspace pointing to an already filled folder, make sure to manually trigger the first indexation as well (see action More…> Index Content in web interface).

Syncing with externally modified workspace

$
0
0

Syncing against an workspace which data can be modified outside of Pydio can be a challenge. This article will describe the mechanisms involved and the possible strategies for that.

This article is applicable as well for search engine indexation issues, which rely on the same mechanism.

How does sync/indexation work?

To perform syncrhonization, the desktop clients regularly “queries” the server to know if there were any changes inside the currently synced workspace. These requests are very light as if there were no changes since the previous one, the server just returns nothing, and computes nothing. To achieve that, we need to make the changes indexed “on the fly” when documents are modified in Pydio, and this is easily done when documents are added/deleted/modified directly throughout a Pydio interface (web, mobile, sync).

But sometimes, you will define a workspace that points to a storage which can be modified externally: files are posted by FTP to the filesystem, files are accessed through Samba shares, and theses shares are mounted directly via other protocols, etc… In that case, Pydio is basically not aware of the content changes, and you will observe issues during synchro (the web interface and mobile apps listing is not affected, as it’s always querying the storage in real time). So we have to make sure Pydio is “in sync” with its storage.

We will describe here the various options, starting with the most efficient ones, and ending with the more performance-greedy ones.

Triggering unitary indexation

If the files that are modified inside the storage are handled by a bot, or an automatized process, or through a protocol where you can hook to some events (like an ftp server), the best option is to actually inform pydio directly when a file is modified. This can be done by calling the “lsync” action either by command line or rest API. It takes three parameters and covers all modifications types: old, new, copy: old is either a filepath (file modified or deleted) or null (file created), new is either a filepath (file created or modified) or null (file deleted), copy is true or false and used only when old and new are not null, to determine whether it’s a move or a copy.

Triggering regular folders/worskapce re-indexation

If you cannot manage each file modification, you can on a regular basis trigger a re-indexation of some folders that you specifically want to monitor. Use the “index” action, again, either via command line or Rest API, and you can pass a “dir” parameter to limit the reindexation only to a given folder.

Auto-detecting changes

We added an auto-detection feature to make the process easier. It is only implemeted for “syncable” workspaces, and is called asynchronously (triggers a php command line) when the sync client is asking for “changes”. This can imply a small delay to see the changes impacted in the local folder. It will browse the folders on the filesystem and compare their modification time with the one register in the DB index, so it will significantly burden the server, you should probably not use this feature for many workspaces and many users.

To enable that feature, switch it on in the Meta.syncable parameteres of the workspace. And additional timer allows to avoid to rescan everything on each “changes” request, but rescan only every X-minutes.

Pydio 6.0.5 – Bugfix release

$
0
0

Pydio 6.0.5 – Bugfix

This release fixes annoying issues introduced by 6.0.4.

  • Revert “close search engine on context change” as it breaks results pane in admin (details)
  • Move Multi & WebFTP login screen into dedicated authfront plugin, as previous fixes in AJXP_PluginsService changes the plugins loading order. (details)
  • Prevent FTP login screen modal closing (details)
  • Fix #847: share link with non-ascii filename on windows IIS (details)
  • Fix scrolling issue: use a fixed scrolling step instead of a fraction, could make it hardly usable for long listings (details)

If you have not yet updated to v6, please take the complete product tour here.

  • Date: March, 6th 2015
  • License: Affero GPL
  • Download: Sourceforge Project
  • Source Code: Github Project
  • Copyright: Abstrium SAS / Charles du Jeu 2015
  • Upgrade: In-app upgrade for archives installs – RPM/DEB update

 

The new welcome page

Pydio 6 welcome page

Upgrade Process

Upgrading from 6.0.4 to 6.0.5 will be straightforward.

> If you are upgrading from 5.X version, please first read the 6.0.0 release note and upgrade instructions. There are some specific manual DB upgrade to be applied for Linux Packages.

> If you are on v6 but not yet upgraded to 6.0.3, just make sure that the conf/bootstrap_context.php (or /etc/pydio/bootstrap_context.php) is updated to the latest version, otherwise you may see “Dibi class not found” errors.

Pydio iOS client 1.6 released

$
0
0

Pydio iOS client version 1.6 released! This version is providing the “swipe-cells” for actions feature, plus a couple of bugfixes linked to the latest iOS updates. This version is probably the last before a brand new version entirely rewritten in Swift. Big up to Michal Svacha who joined the team recently!

  • New Features
    • Swipe the cell left or right for more actions.
    • Tap the cell to open the files.
    • When a file is added to clipboard, proper animation feedback is shown.
    • Added language support for Czech and Slovak.
  • Bugfixes
    • Search bar sets the query as text and not as a placeholder anymore.
    • Revamped icons of files and folders in the list.
    • Zip files no longer appear in preview.
    • App doesn’t crash after a file was opened in another app.
    • Minor UI bugfixes such as: new ‘fullscreen’ icon on iPad, new back button on iPhone in preview mode, fixed action sheet tint, removed overlay icons in offline list and many more.

 

Swipe cells for actions

 

More info on https://pyd.io/extensions/ios-client/

Enjoy!

Charles

Configuration public link on Pydio 6

$
0
0

Configuration public folder seems to be complicated and confused to some typical user. Some don’t know where is public folder, some one don’t know how to configure rewrite and some others stuck in blank page in public link. In this how-to, we hope that you can configure public folder easily.

1. URI

The most important is URI for Public in Pydio. As you know, there is a place in your system that all user can create a accessible path to file or folder to public where user from outside can download/upload without credential. Due to security reason, this location must be applied a special policy and could be located in other location than data and code of Pydio. Before doing configure public folder, make sure that you have URI for public folder.


1.1 Default URI

By default, public folder is shipped with pydio package (PYDIO/data/public). If you installed pydio from apt-get, you can have:
URL for pydio: http://your_server_address/pydio
URL for public: http://your_server_address/pydio/data/public
in this case URI for public is /pydio/data/public. In this case, you can access to public folder because of:
URI /pydio/data/public => VirtualDirectory /pydio in Apache point to /usr/share/pydio. => /usr/share/pydio/data (symbol link) => /var/lib/pydio/data/public

1.2 Customized URI for pydio

If you don’t want to use default uri for public (because of long string), you can create a new uri by your own:
Create a VirtualDirectory in webserver point to public folder

alias /public-for-pydio /var/pydio_public
<Directory "/var/pydio_public">
Options FollowSymLinks
AllowOverride Limit FileInfo
Require all granted
</Directory>

In this case, the new URI for public is /public-for-pydio and user can access to data by URL: http://your_server_address/public-for-pydio/abcd01.php

2. .htaccess file

In Pydio version 5 and ealier, when you create a public share, Pydio will create a new real file in public folder. Since version 6, generation a real file has been no longer used but database. When you request http://your_server_address/public-for-pydio/abcd01.php, module rewrite in web server will convert abcd01.php to an url parameter for share.php – a file auto created in public folder. That means in version 6, there is no .php file in public folder except share.php.

2.1 Verify rewrite module

Be sure that rewrite module for web server is enabled.
In debian, you can enable by command:

sudo a2enmod rewrite
sudo service apache2 reload

2.2 .htaccess file

In this article, I take a example for .htaccess for apache, but you can easily convert .htaccess to rules in Nginx (http://winginx.com/en/htaccess) or web.config in IIS (with import tool)
.htaccess example in public folder /var/pydio_public

Order Deny,Allow
Allow from all
<Files ".ajxp_*">
deny from all
</Files>

RewriteEngine on
RewriteBase /public-for-pydio
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)\.php$ share.php?hash=$1 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)--([a-z]+)$ share.php?hash=$1&lang=$2 [QSA]
RewriteRule ^([a-zA-Z0-9_-]+)$ share.php?hash=$1 [QSA]

3. Configuration in Pydio

After defining URI for public, and appling rewrite rule in .htaccess, you open Pydio and finish configuration:
– SERVER URL: url for server, in this case is: http://your_server_address/pydio
– DOWNLOAD FOLDER: physical folder for public: /var/pydio_public
– DOWNLOAD URL: url for public folder: http://your_server_address/public-for-pydio

pydiopublicconfig

For permission of public folder, you can visit:https://pyd.io/permission-for-pydios-filesfolders/


If you are running IIS 7 on windows server 2008, you have to install rewrite module manually.
Go: http://www.iis.net/downloads/microsoft/url-rewrite

In windows 2012 and IIS8, it is enabled

By default, public folder are shipped with pydio package in PYDIO/data/public. But in this article, I will take an general example.
I supposed:
– Pydio location: C:\inetpub\wwwroot\py605
– I need to use C:\inetpub\py605_public for public folder
– We are running this web app by application pool name “py605″.

1. Be sure permission is set correctly (for more information: https://pyd.io/configure-applicationpool-for-pydio-in-windows2012-iis8/)
2. Create a virtual host for public folder

In IIS management, right click and select Add Virtual Directory
IIS-add-virtual-directory2Configure public folder/url in Pydio

IIS-configig-public-link

Try to generate a new public share link in Pydio, at this time, you got an error of IIS:

IIS-public-not-foundBecause you have not configured yet rewrite rule for this folder

– Now, open IIS, click on Virtual Directory “public-for-pydio”

– Click on “rewrite URL”

– On the right menu, click on “Import Rule”

** Note: When you create a public share linke, Pydio will verify and create (if necessary) some default files: share.php, .htaccess, 404 …

Select file C:\inetpub\py605_public\.htaccess

** Note: RewriteBase is incompatible line, you just delete this line to besure that there is no error. You also can modify rule name by right-click on each rule. At the end of this step, you click on “Apply” on the top of right menu.

IIS-public-delete-line-htaccessVerify the share link you ‘ve create above and you can browse the link correctly

IIS-public-goodIf you don’t want to follow steps above, you just simple create a C:\inetpub\public-for-pydio\web.config and fill it by:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Pydio-Public-Folder-Rule-1">
                    <match url="^([a-zA-Z0-9_-]+)\.php$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="share.php?hash={R:1}" appendQueryString="true" />
                </rule>
                <rule name="Pydio-Public-Folder-Rule-2">
                    <match url="^([a-zA-Z0-9_-]+)--([a-z]+)$" ignoreCase="false" />
                    <action type="Rewrite" url="share.php?hash={R:1}&amp;lang={R:2}" appendQueryString="true" />
                </rule>
                <rule name="Pydio-Public-Folder-Rule-3">
                    <match url="^([a-zA-Z0-9_-]+)$" ignoreCase="false" />
                    <action type="Rewrite" url="share.php?hash={R:1}" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

For more information about permission, visit: https://pyd.io/configure-applicationpool-for-pydio-in-windows2012-iis8/



Pydio 6.0.6 – Stable release

$
0
0

V6 branch is getting more and more polished! This release brings bugfixes, security improvements, and a couple of handy new features. Most noticeable are:

  • New pure-HTML5 PDF viewer using Mozilla PDF.JS – Contributed by Garnetius.
  • New metadata type “tags” with auto-completion and special display.
  • Rework of the SearchEngine ergonomy: better list reloading, direct access to advanced mode, better handling of advanced external metadatas.
  • New filter action in Datagrid for logs: quick filtering on any column value.
  • Add a button in settings to clear cache
  • Revert the automatic switch to mysqli, which seems to create problems on some systems.

See the Detailed Changelog below for a list of bugfixes in various areas of the application.

If you have not yet updated to v6, please take the complete product tour here.

  • Date: April, 9th 2015
  • License: Affero GPL
  • Download: Sourceforge Project
  • Source Code: Github Project
  • Copyright: Abstrium SAS / Charles du Jeu 2015
  • Contributors: Cdujeu, DepaMarco, C12simple, Ellega, Kluckow, Huzergackl, Raiatea, Garnetius, Svetlemodry
  • Upgrade:
    • In-app upgrade for Zip archives installations
    • RPM/DEB update: note that if you have moved your pydio install in another location than webroot/pydio/, the .htaccess file may be overriden by the default one during upgrade. Just reedit it with the prober RewriteBase values afterward.
HTML5 Pdf Documents Viewer

HTML5 Pdf Documents Viewer

Autocomplete tags metadata

Autocomplete tags metadata

Dynamic filtering of log entries

Dynamic filtering of log entries

Upgrade Process

Upgrading from 6.0.5 to 6.0.6 will be straightforward.

> If you are upgrading from 5.X version, please first read the 6.0.0 release note and upgrade instructions. There are some specific manual DB upgrade to be applied for Linux Packages.

> If you are on v6 but not yet upgraded to 6.0.3, just make sure that the conf/bootstrap_context.php (or /etc/pydio/bootstrap_context.php) is updated to the latest version, otherwise you may see “Dibi class not found” errors.

Changelog

  • Plugins Fixes
    • [meta.mount] Remove type strict comparison for mount_env_passwd option. (details)
    • [action.powerfs]PowerFS don’t works if Command Line “enable” and accent (Windows OS) (details)
    • [auth.cas] Fix cas in client mode (click two times for login) (details)
    • [scheduler] Form validation for Schedule Task at client side (details)
    • [scheduler] Clean scheduler actions – Fix #838 Fix french translation (run current task, not tasks) (details)
    • [action.share] Update the plugin JavaScript code for iframe and shared file preview. (details)
    • [access.s3] Fix setMetadata() on metastore.s3 plugin, broken for non-ascii chars, the CopySource parameter must be urlencoded. (details)
    • [metastore.s3] Use rawurlencode instead of urlencode (details)
    • [editor.imagick] Add Illustrator File to Image Magick (details)
    • [editor.ckeditor] Adding a delay in CKEditor data loading seems to avoid random blank screen. (details)
    • [auth.cyphered_post] Add a switch to active repository (details)
    • [authfront.otp] Fix login form display in authfront.otp. (details)
    • [editor.etherpad-lite] Big update of the Etherpad-lite integration. Seems like we cannot detect pads with no author, we would have to set up a task to clean orphan pads. Should Fix #865 Fix #867 (details)
    • [meta.mount] Set the “use 32 result code as success” via option (default true for non-regression). Close #824 (details)
    • [index.lucene] Better error logging when lucene fails to open or create an index. (details)
    • [index.lucene] Lucene: detect if the tmp index is currently being modified (last 3 minutes) to avoid multiple indexation tasks loaded concurrently. (details)
    • [index.lucene] Fix meta fields indexation issues (on node.change event). (details)
    • [action.powerfs] Use DIRECTORY_SEPARATOR in powerfs plugin for operation_id file. (details)
    • [mq.sql] Notifications queuing: fix SQL implementation that fails selecting the max value as the column is varchar (use sql CAST expression). Remove unnecessary create.sql scripts. (details)
    • [core.index] Do not call is_dir on trigger node.index on the root node. It can create problems with non-fs workspaces like SMB for indexation. (details)
    • [access.fs] Internalize setHiddenAttribute in fsAccessDriver instead of AJXP_Utils (details)
    • [mq.sql] Feedstore: forward “reload_user_feed” event to parent repository if any. Fix i18n issues for “watch/stop watching” button Ignore notif to delete if already deleted. (details)
    • [sync] Detect when update queries are applied on non-indexed items using getAffectedRows() (details)
    • [sync] Automatically disable the keystore generate_auth_token action if Session Set Credentials is set in config. This will force systematic basic_auth. (details)
  • Core & Performances
    • Core performances: . AJXP_Controller: Minimize xPath calls by implementating a hookCache . AJXP_Plugin: reduce serialization – AJXP_PluginService: Try to use cache for softLoad operation (still return a cloned version of the cached plugin) . AJXP_Utils: cache the result of cleanDibiDriverParameters() function as it is called many times. (details)
    • Fix OS detection – Add iPad & iPhone (details)
    • RunTests: Fix apiPost function() (details)
    • If a client is posting bad parameters, it can end up copying a file into itself. (details)
    • Revert the automatic switch to MySQLi, add a parameter instead. (details)
    • Perfs: avoid reapplying role if already in the user’s roles. (details)
    • Hard reload node data with clearstatcache() call on node update Add a seed with file modiftime to make sure thumbnail is reloaded on change (details)
    • Fix comparison issue for AJXP_METADATA_ALLUSERS value. Could lead to share metadata. (details)
    • Typo in mailer, fix #864 (details)
    • Fix various issues with Forget Password action – Fix #863 (details)
    • Prevent some plugins to be disabled – Close #873 (details)
    • Add utils in node for moving meta on node change (details)
    • Add a hook on node.change to move bookmarks metadata, should fix #870 We should refactor all the bookmarks management into a proper plugin. At the moment, moving to recycle is not considered deleted. (details)
    • Use protocol in runTests script – Fix #871 (details)
    • Set nodes as nonLeaf when we know it – Fix #859 (details)
    • Add the function filterNodeName() to the AjxpWrapperProvider, and use it in the webdav collection to correctly load the hidden files/folders configurations. Alternative to fix #862 and fix #861 (details)
    • Fix edge-case where user cannot change its starting workspace (details)
    • Now that we need rewrite rules anyway, set the corresponding option to true by default in action.share (details)
    • Switch TRANSMIT_CLEAR_PASS to hidden parameter (don’t remove it totally for backward compatibility) – Close #875 (details)
    • Add a getOptionAsBool() function abstractAuthDriver and use everywhere we use TRANSMIT_CLEAR_PASS. Handle all possible values (true, “true”, 1, etc…). (details)
    • Plugin : load global_param and param configs definitions (details)
    • Do not override __AJXP_VALUE_SET__ value. Typo in AJXP_SAFE_SECRET_KEY. (details)
    • Move decypher function in AJXP_Utils instead of AbstractAjxpUser. Do not override __AJXP_VALUE_SET__ when parsing standard form. New parameter $complexChars in generateRandomString function. (details)
    • Unused decodeUserPassword method (use AJXP_Utils instead). (details)
    • Use AJXP_Utils function for decyphering password (details)
    • Make sure not to use the repositories cache if not yet initialized. (details)
    • Meta.quota: make sure to respect hierarchy by trying to get quota of parent repository owner if it exists (can be a template child without owner), then from the currently logged user, then from the repository config. Fix #884 (details)
    • Hunting while(!feof(..)) calls missing a test on the resource: can trigger an infinite read and a CPU hog. (details)
    • Default “Cache Master Users” parameter to False instead of True (details)
    • Remove meta_fields, meta_types, meta_labels from node metadata, use exposed plugins configs instead. Fix CSS labels on detailed view. (details)
  • Authentications & Security
    • Strip query string part of the url, otherwise using query like ?xdebug=true appends the query part to the base value. (details)
    • Login: empty the fields values only after response is received. (details)
    • Pass session credentials to command line via ENV variable. Generate a unique secret key at install for tokenisation of CLI calls instead of using default one. (details)
    • Prefix cyphered passwords inside role parameters with a specific string. listParameters() removes prefix by default, can either keep it ($preserveCypheredPasswords) or blur passwords ($blurCypheredPasswords) by replacing with __AJXP_VALUE_SET__ value. (details)
    • Massive changes for better handling parameters values in ajxp_conf driver. (details)
    • Fix various buttons issues with reset password (fix #885) and handle case insensitive logins. (details)
    • Add more logs for various “preview” operations (Imagick, Diaporama, etc) (details)
    • Fix pruneTemporaryKeys for PostgreSql (details)
    • FINAL_KEY is not used anymore, remove it. (details)
    • AJXP_Utils: Make sure to remove = from base64encoded string when generating random string. (details)
  • GUI
    • In standard List mode, show additional metadata (like in v5) by hovering rows with mouse. Permanent display can be customized by CSS.
    • Change place of “Set as default workspace” checkbox as it was no more accessible. (details)
    • Missing fitParent creates resizing issue in IE for My Account pane. (details)
    • Rework of the SearchEngine ergonomy: better list reloading, direct access to advanced mode, better handling of advanced external metadatas. New filters feature in FilesList to dynamic filter contents. In table mode, adds headers with input texts. In standard List mode, show additional metadata (like in v5) by hovering rows with mouse. (details)
    • Activate the new filter action in datagrid for logs (details)
    • Add a “filter” button using the new FilesList feature in ajxp_datagrid : applicable to logs directly. (details)
    • Fix Search input opening when media queries are applied (details)
    • Reset MetaSource selector after adding (to focus on the new instance). (details)
    • Fix scroller issue (details)
    • Fix message box blinking and style. (details)
    • User.js Detect and log circular references Fix circular references in AjxpTabulator (init Tab with object clone). (details)
    • Fix small glitch in PreviewFactory (details)
  • Internationalisation (i18n)
    • Update de.php (details)
    • missing “,” character in various en.php files (details)
    • Fix workspace display when using russian language on IIS. (details)
    • Italian translations (details)
    • Updated german translations, fixed translation keys and made more plugins translatable (details)

Pydio 6.0.7 – Security Release

$
0
0

We are releasing today a security patch for v6. Vulnerabilities were reported by Lane Thames and are registered under CVE-2015-3431 and CVE-2015-3432. Upgrade is of course highly recommanded.

If you have not yet updated to v6, please take the complete product tour here.

  • Date: May, 6th 2015
  • License: Affero GPL v3
  • Download: Sourceforge Project
  • Source Code: Github Project
  • Copyright: Abstrium SAS / Charles du Jeu 2015
  • Contributors: Cdujeu, DepaMarco, C12simple, Lane Thames
  • Upgrading from 6.0.6:
    • In-app upgrade for Zip archives installations
    • RPM/DEB update: using apt-get or YUM commands.

A number of other small bugs are fixed as well, listed below.

  • Add new parameter in ShareCenter to force password on public links. (details)
  • Massive refactoring of ElasticSearch plugin. Keyword search and indexed fields is working. (details)
  • Fix text logger: was broken due to the clone call on object: refresh the fileHandle resource on clone. (details)
  • Limit API connection “Login” logs to one per hour, otherwise it fills the log table, and makes the analytics quite slow. (details)
  • SMB Auth: include domain name to user name (details)
  • Get list of repository automatically (details)
  • AuthService test userExist and create new (details)
  • InfoPanel: catch modifier evaluation error – CSS: hack transparent backgrounds for IE8 using \9 symbol. (details)
  • Correct smb path string (details)
  • ShareCenter : fix link pointing to a non-existing repository (details)
  • ShareCenter.js: forgotten console calls (details)
  • ShareCenter: Catch exceptions when forwarding changes, otherwise it stops the loop. (details)
  • AjxpUtils::convertBytes : handle comma – Ajxp_VarsFilter::filter : pass an object or an id as resolve user (details)
  • Major update of ElasticSearch implementation / Refactor some method to common parent with Lucene. (details)
  • Check userExist to create new user for new sharing (details)
  • Add a new dependency type phpExtension to avoid loading plugin that have a strong dependency to one or more php extensions. (details)
  • Remove (beta) from sync clients buttons (details)
  • ShareCenter: Fix “Preview” checkbox being automagically rechecked. Check template is not ajxp_unique_dl. (details)
  • Start refactoring major JS resources. Split into subfolders. (details)
  • Display admin Search Results with USER_DISPLAY_NAME (details)
  • webdav error on smb workspace (details)
  • Shared user watch is not correctly removed when user is removed from “Share with…” list. (details)
  • Fix group listing for shared users when inside a group (cherry picked from commit a9fdc8c) (details)
  • Ability to use multiple secure_token in one session, to avoid force reload on new tab. Notify existing windows with <require_registry_reload>. (details)
  • IE8 Fixes – Fix #899 : remove tooltip when refreshing templates. (details)
  • Make Etherpad more simple: support only .pad extensions, disable hideExtension() hook. (details)
  • Refix c0205642045e943c086eb054f3947d5311d9997e : case is different if group listing is allowed on all groups or sub groups only. (details)
  • Pass AJXP_VALUE_CLEAR as metadata value to force clearing key after array_merge() (details)
  • Fix un-removed notification by checking ACL when listing the watches and updating metadata accordingly. (details)
  • Fix Zip options tweaking, by properly separating zipBrowsingEnabled vs. zipCreationEnabled. (details)
  • Use Dibi syntax for cross-db limit (details)
  • Fix Jumploader not correctly sending node.change event (thus missing indexation) (details)
  • Fix PLUploader : new way to get secure_token (details)

Pydio 6.0.8 – Security & bugfix release

$
0
0

We are releasing today another security patch for v6. Vulnerabilities were reported by Lane Thames and William Söderberg, as well as the HP Fortifiy security team. Although they are involving quite complicated reflective XSS scenaris, upgrade is of course highly recommanded. This version also fixes many other issues, and improves translations, see complete change log below.

If you have not yet updated to v6, please take the complete product tour here.

  • Date: June, 29th 2015
  • License: Affero GPL v3
  • Download: Sourceforge Project
  • Source Code: Github Project
  • Copyright: Abstrium SAS / Charles du Jeu 2015
  • Contributors: cdujeu, Lane Thames, William Sörderberg, c12simple, DepaMarco, FireFoxIXI, Sandoracs
  • Upgrading from 6.0.7:
    • In-app upgrade for Zip archives installations
    • RPM/DEB update: using apt-get or YUM commands.

Detailed Changelog

  • Minor update of german translation (mainly to unify the strings) (details)
  • Small fixes for the german translation of access.ajxp_conf (details)
  • Docker : add php-ldap dependency. (details)
  • Italian translation for plugin ‘meta.monitor_fs’ (details)
  • Italian translation for plugin ‘mq.serial’ (details)
  • Italian translation for plugin ‘mq.sql’ and FIXED English one (details)
  • Italian translation for plugin ‘shorten.bitly’ (details)
  • Italian translation for plugin ‘shorten.multi’ (details)
  • Italian translation for plugin ‘uploader.flex’ (details)
  • Italian translation for plugin ‘uploader.html’ (details)
  • Italian translation for plugin ‘uploader.http’ (details)
  • Add delete button on minisite (details)
  • Fix meta.mount fs on 6.0.7 (details)
  • Fix wording error (details)
  • Reload_registry message: make sure to trigger only if required. This can end up in a loop. (details)
  • Mysql: Tablename may create an error when getting size and count (details)
  • Added minor tweaks for getting the S3 driver working with EMC ViPR (details)
  • Add new DIRNAME mode for sanitization, same as filenames except that it lets the / pass through. Use strpos() instead of deprecated ereg() function. (details)
  • Should fix #912 (alert on watch broken in some cases) (details)
  • Fix #919 – Disable right click in FetchedResultPane (details)
  • Tweaks to support “dot” character in custom links handle – Fix #905 (details)
  • ShareCenter: Fix authorization checking for various share types. Make sure to register the REQUIRES_INDEXATION flag on syncable shared workspaces to trigger indexation at first changes API call (should fix #913) (details)
  • UserMetaManager: check metadata is not empty. (cherry picked from commit ac99bf4) (details)
  • Add a MAIL_ENCODING parameter in the phpmailer plugin to eventually switch to 7bit for old Exchange+Outlook configs. (cherry picked from commit 98eebeb) (details)
  • Perf: load repositories with a unique query instead of many small queries (cherry picked from commit c955991) (details)
  • Slight doc issue (details)
  • Italian translation for plugin ‘uploader.jumploader’ (details)
  • Italian translation for plugin ‘uploader.plupload’ (details)
  • Updated Italian translation for plugin ‘core.ajaxplorer’ (details)
  • Hide Native App download panel on Windows Phone (details)
  • Fix minisite login background by loading configs via JS. (details)
  • Clean listing code for sorting, get page_position on demand when listing unique file, fixes search results not going to correct page when pagination is on. (details)
  • Antivirus: make sure to do nothing when node is a folder, do not scan it! (details)
  • Repository Creation Time was overriden by parent repo when created for sharing. (details)
  • Fix 2G limitation on windows in many places ( do not use filesize directly ) (details)
  • Repository securityScope() : check the CONTAINER option if it exists for object-based drivers. (details)
  • Fix auto update via proxy (details)
  • revert cef1688f1e38830badefa1d147b48400cd09d7f2 (details)
  • Add a default sorting field and direction for server sorting. Set this params via the filesystem mixin instead of access.fs only. (details)
  • Fix SearchEngine template configuration issue on various remote drivers. (details)
  • Catch an OpenLayer error. (details)
  • Fix and improve various sorting aspects. Deselect everything on blur in search engine and fetchedresultpane, otherwise further click on the same item does nothing. (details)
  • Catch Zip decompression errors. (details)
  • Fix workspaces securityScope() for templates that predefine a Path (or Container) value. (details)
  • Make sure to not propagate a share event to a workspace parent if it’s a template. (details)
  • Make sure to use ConfService::listRepositoriesWithCriteria() instead of directly conf storage implementation, otherwise the hardcode workspaces/templates may be missing. (details)
  • Follow-up for filename encoding for attachment headers and IE. (details)
  • Make sure to never call getRepositoriesList() on “user” scope before the user is actually logged, otherwise it caches an incomplete list (e.g. in updateDefaultRights). Fixes incomplete list in sync client sometime, and make fix some issues with default rights as well. (details)
  • Reorder attributes (details)
  • Detect if Download URL contains a full URL or just an URI. In latter case, concatenate current server host (without URI) and URI. (details)
  • RPM: set PUBLIC_DOWNLOAD_URL to /pydio_public by default (details)
  • Make sure to use (details)

Example: Installing Pydio on Windows Server 2012 R2 / IIS 8.5

$
0
0

author Allan Dynes (Allan @ AllanDynes.com)
This guide is assuming a vanilla install of Server 2012 R2 and lists all prereqs to get Pydio up and running with IIS 8.5 / Server 2012 R2.   I have found that none of the current guides cover everything 100% so through lots of testing and looking at all the other guides I wrote this one.  It’s making a couple assumptions which I think make sense for the average Windows based server:

  • You are starting with a fresh Server 2012 R2 install.  It is setup how you want it setup (named, domain joined, etc) and all windows updates are done.
  • MySQL will be used for the database locally.
  • LDAP/AD authorization will be used for all users.

Adding the server roles

We will need to install some roles and features for Pydio and PHP to work properly and also some pre-reqs for additional software we will be installing later.  Start up the Server Manager if it didn’t open on its own at login and click Manage -> Add Roles and Features.

  • At the Before You Begin screen click Next
  • Leave the default of Role-based or feature-based installation and click Next
  • The local server should be selected be default.  Click Next
  • In the list select Web Server (IIS)
    • For the Add features required box that pops up click Add Features then Next
  • At the Select features screen check off .Net Framework 3.5 Features (required by the PHP manager later)  and Next
  • At the Web Server Role (IIS) screen click Next
  • At the Select role services screen leave all the defaults checked and then expand Application Development and check “CGI” then Next
  • At the Confirm installation selections you will most likely get a warning about specifying an alternative source to download the .Net 3.5 files from.  Click Specify an alternative source path at the bottom and enter in the path to these files.  If you are using a Server 2012 DVD it would be D:\Sources\SxS\ where D: is your DVD drive.  Once entered click OK then Install.
  • Once installed click Close.

Next check Windows Updates as there will be updates to the .Net 3.5 framework that was just installed.  Install all updates then reboot before the next step.

Installing required software

You can install some of these through the built in Microsoft Web Platform Installer 5.0 (Web PI) but after doing so many times I have found it easier to download and manually install the files I need.  The Web PI also seems to have some outdated files and I rather have the most up to date ones as possible.

First download PHP 5.6:  http://windows.php.net/download/ . You want the one labeled “VC11 Non Thread Safe x86” which should be the top download in the list.  Extract the zip file to C:\Program Files (x86)\PHP.

Next download and install the WinCache extension: http://sourceforge.net/projects/wincache/files/wincache-1.3.7/wincache-1.3.7.4-5.6-nts-vc11-x86.exe/download and run that.  It will extract some files to the directory of your choosing.  Copy the file php_wincache.dll to the C:\Program Files (x86)\PHP\ext directory.  This will help speed up PHP on your Windows server dramatically.

PHP Manager is next so download the x64 version: https://phpmanager.codeplex.com/releases/view/69115.   It still lists as for IIS 7 but there have been no changes and works fine on IIS8/8.5.

Download MySQL here: https://dev.mysql.com/downloads/mysql/5.5.html  Grab the latest x64 version in the series for Windows and install.  A typical installation should be fine.  Once it’s done leave the checkmark to configure the instance.  Choose a Standard Configuration and leave all the defaults.  Enter in a root password and write it down as you’ll need it later to create your database.

You will need the Microsoft URL Rewrite 2.0 module for public links to redirect correctly.  Get that here: http://go.microsoft.com/fwlink/?LinkID=615137 and install it.

Lastly PHP requires the Microsoft Visual C++ 2012 Redistributable.  Without it you’ll throw Internal Server 500 errors all day trying to run PHP.  Download the x86 version to match PHP: http://www.microsoft.com/en-us/download/details.aspx?id=30679 and install it.

Download Pydio

Download the latest version of Pydio from https://pyd.io/download/ .  Unzip the zip file to C:\inetpub\wwwroot\pydio or whatever name you choose.  For my server I called the folder “cloud.mydomain.com” which I will be using throughout these instructions.  Now I have found that public links do not work because of a later requests filtering rule on the data directory.  For this reason I MOVE the public directory one directory higher off the root as such: Selection_092

Once the public folder is moved up a directory browse into it and delete the index.htm.  We’re going to add a handler later to redirect people trying to browse the public folder over to our custom 404 error page.

 

Configuring PHP

There are some settings to change in PHP to make Pydio happy.  Startup Internet Information Services (IIS) Manager then click on your server in the tree on the left.  You will probably get a prompt about the Microsoft Web Platform.  Click the “Do not show this message” box and then No.  Double click the PHP Manager and you should have a yellow warning that PHP is not enabled.  Click Register new PHP version:
Selection_093

Click the browse button (three dots) and select C:\Program Files (x86)\PHP\php-cgi.exe then OK.  Now click the Set Runtime Limits link.  Here is one thing that will limit your ability to upload large files.  Personally I have my “Maximum POST size” and “Upload Maximum File Size” both set to 512M, my “Maximum Input Time” set to 300, and my “Memory Limit” set to 512M.  Set as appropriate for your environment then click the Apply button in the top right then Back to main page.

Let’s turn on some extensions.  Click “Enable or disable an extension” then in the Disabled list find php_wincache.dll and click Enable in the top right.  Next find php_ldap.dll which we will need for LDAP/AD authentication and enable that.  Also if you will be using the email function find php_snmp.dll and enable that too and php_exif.dll if you plan on handling images (probably). Click Back to main page.

I have found that PHP does not have access to the default temp directory on a 2012 R2 server so we will switch this to another directory and give Pydio write access to it.  While still in the PHP Manager click “Manage all settings” then find “upload_tmp_dir” in the list.  Change this value to “C:\inetpub\temp”.  Then find “session.save_path” and change that to “C:\inetpub\temp\sessions”.

Lastly is output buffering which is recommended to be turned off.  Look for “output_buffering” and change it from the default of 4096 to “Off”.  While you’re in here if you will be using the email functions of PHP look for SMTP and change that to your server and smtp_port if you use something other than the default of port 25.

Once all these changes are done PHP should be configured correctly for Pydio

Creating the Application Pool

You should still be in the IIS Manager.  On top left menu select “Application Pools” then right click it and select “Add Application Pool…”.  For the name enter pydio and change the .Net CLR version to “No Managed Code” then click OK.

Creating the Site

On the left side highlight “Sites” then right click it and select “Add Website…”.  Enter a name for your site, again I’ll be using cloud.mydomain.com to match my directory name.  Click the “Select…” button on the right and select the “pydio” application pool you created in the last step then OK..  Click the browse button for the physical path (three dots) and select your directory under C:\inetpub\wwwroot\(pydio directory) and then OK.  Under the binding enter the host name that will be used.  Again for mine I am entering cloud.mydomain.com.  Click OK.

Once created expand out “Sites” and select it.  Double click the “Authentication” button then right click “Anonymous Authentication” and select “Edit…”.  Check off “Application pool identity” and click OK.

Setup Folder Permissions

Time to set some permissions for Pydio.  Navigate to your C:\inetpub folder.  First right click the temp directory and go to Properties.  Click the Security tab then click Edit.  Click Add then under Locations… make sure the server is selected at the top.  In the object names field enter “iis apppool\pydio” then Check Names.  It should resolve to just “pydio”.  Click OK then give this user Modify writes to the temp folder and click OK twice.  Now navigate into the temp folder and add a new folder called “sessions”.  That should take care of our temp file locations.

Go up a directory and then navigate to your wwwroot directory which should be c:\inetpub\wwwroot.  From here right click your Pydio folder and select Properties then click the Security tab.  Click the Advanced button at the bottom then Disable Inheritance.  Select to Convert inherited permissions into explicit permissions on this object then check the box marked “Replace all child permission…” then OK.  You will get a warning.  Click YES.  Click the Edit button back on the Security tab, find the “IIS_IUSRS” group, and Remove.   Now click Add and add the pydio application identity (iis apppool\pydio) as you did above for the temp directory.  Leave the default rights of read and no write access then click OK twice.

Now we have to give the pydio application pool identity write access to the data and public directories.  Go into pydio folder, right click the data directory, and edit your pydio identity to have Modify rights by clicking Edit then adding the modify right for the pydio user then do the same for the public folder.

Add our Web.Config Files

For the data and public folders we need to create a web.config file to both protect our data and also make our rewrite rules work.  By default you cannot see file extensions so in Explorer click the View menu then check off File name extensions.  Create a new web.config file for each location and in the first notice the setting called maxAllaowedContentLength in the root web.config file.  This defaults to 30M through the GUI and in my example its set for 512M.  This will also prevent uploads larger then this value so adjust accordingly:

C:\inetpub\wwwroot\pydio\web.config

<?xml version=”1.0″ encoding=”UTF-8″?>

<configuration>

<system.webServer>

<security>

<requestFiltering>

<hiddenSegments>

<add segment=”data” />

</hiddenSegments>

<requestLimits maxAllowedContentLength=”512000000″ />

</requestFiltering>

</security>

<rewrite>

<rules>

<rule name=”Pydio-Rule-1″ stopProcessing=”true”>

<match url=”^shares” ignoreCase=”false” />

<conditions logicalGrouping=”MatchAll”>

<add input=”{REQUEST_FILENAME}” matchType=”IsFile” ignoreCase=”false” negate=”true” />

<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” ignoreCase=”false” negate=”true” />

</conditions>

<action type=”Rewrite” url=”./dav.php” />

</rule>

<rule name=”Pydio-Rule-2″ stopProcessing=”true”>

<match url=”^api” ignoreCase=”false” />

<action type=”Rewrite” url=”./rest.php” />

</rule>

<rule name=”Pydio-Rule-3″ stopProcessing=”true”>

<match url=”^user” ignoreCase=”false” />

<action type=”Rewrite” url=”./index.php?get_action=user_access_point” appendQueryString=”false” />

</rule>

<rule name=”Pydio-Rule-4″ stopProcessing=”true”>

<match url=”(.*)” ignoreCase=”false” />

<conditions logicalGrouping=”MatchAll”>

<add input=”{URL}” pattern=”^/pydio6/index” ignoreCase=”false” negate=”true” />

<add input=”{URL}” pattern=”^/pydio6/plugins” ignoreCase=”false” negate=”true” />

<add input=”{URL}” pattern=”^/pydio6/dashboard|^/pydio6/welcome|^/pydio6/settings|^/pydio6/ws-” ignoreCase=”false” />

</conditions>

<action type=”Rewrite” url=”index.php” />

</rule>

</rules>

</rewrite>

</system.webServer>

</configuration>

 

C:\inetpub\wwwroot\pydio\public\web.config

<?xml version=”1.0″ encoding=”UTF-8″?>

<configuration>

<system.webServer>

<rewrite>

<rules>

<rule name=”Pydio-Public-Folder-Rule-1″>

<match url=”^([a-zA-Z0-9_-]+)\.php$” ignoreCase=”false” />

<conditions logicalGrouping=”MatchAll”>

<add input=”{REQUEST_FILENAME}” matchType=”IsFile” ignoreCase=”false” negate=”true” />

<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” ignoreCase=”false” negate=”true” />

</conditions>

<action type=”Rewrite” url=”share.php?hash={R:1}” appendQueryString=”true” />

</rule>

<rule name=”Pydio-Public-Folder-Rule-2″>

<match url=”^([a-zA-Z0-9_-]+)–([a-z]+)$” ignoreCase=”false” />

<action type=”Rewrite” url=”share.php?hash={R:1}&amp;lang={R:2}” appendQueryString=”true” />

</rule>

<rule name=”Pydio-Public-Folder-Rule-3″>

<match url=”^([a-zA-Z0-9_-]+)$” ignoreCase=”false” />

<action type=”Rewrite” url=”share.php?hash={R:1}” appendQueryString=”true” />

</rule>

</rules>

</rewrite>

<httpErrors>

<remove statusCode=”404″ subStatusCode=”-1″ />

<error statusCode=”404″ prefixLanguageFilePath=”” path=”/public/404.html” responseMode=”ExecuteURL” />

<remove statusCode=”403″ subStatusCode=”-1″ />

<error statusCode=”403″ prefixLanguageFilePath=”” path=”/public/404.html” responseMode=”ExecuteURL” />

</httpErrors>

</system.webServer>

</configuration>

 

Create the pydio database in MySQL
Start up the MySQL command line. Enter in the root password you wrote down earlier and then at the command prompt enter the following to create a database named pydio with a user (pydiouser) and password (mypydiopw) that has access to this database:

CREATE DATABASE pydio;
CREATE USER "pydiouser"@"localhost" IDENTIFIED BY "mypydiopw";
GRANT ALL PRIVILEGES ON pydio.* TO "pydiouser"@"localhost";

 

Type exit to close the command prompt.

 

Start the Pydio Install Wizard and finish the install

All our setup should be done.  Browse to your pydio installation using the full URL, in my example its http://cloud.mydomain.com/.  You will be presented with a check of the requirements for installation of pydio which should have no errors after following the steps above although you might have a couple warnings for PHP command line and SSL.  If you have any red errors then something is wrong and they need to be fixed before continuing, make sure you followed all the steps above correctly.

Click the link that says “click here to continue to Pydio” to start the wizard.  At the first screen pick your language and then “Start Wizard”. For admin access enter an admin login, display name, and password.  This will only be used for the initial setup as we will be switching to LDAP/AD for future access.

For your global options you may want to change the application title, I changed mine to “MyDomain Cloud Storage” and same with the welcome message.  Also enable emailing if you plan on having that functionality and select “Mail” for the PHP Mailer.  Put in your own email for the administrators email or an account you have access to.

For configurations storage we will be using MySQL.  Click on “Database” in the drop down for storage type then for the host change it from localhost to 127.0.01.  For the database name, user, and password use the information in the step above (pydio, pydiouser, and mypydiopw).  For Use MySQLi check Yes.

Click the Install Pydio Now button to apply all these settings.  It should come back letting you know it cannot write to the .htaccess file.  Copy the contents as it instructs you to do and manually paste it into C:\inetpub\wwwroot\pydio\.htaccess then refresh the page.

You should get a login page.  Login as the administrator that you just defined.

 

Setting up LDAP access

In my scenario I will be setting up LDAP access for my users.  I don’t want ANY local users.  In fact after this step and a reboot of the server the default admin login will no longer work.  After this we will lock down some of the interface so users can’t change their account (the info will come from Active Directory…we don’t want them to change anything).

You should be logged in as the administrator.  Click the admin drop down in the top right then Settings.  Click Application Parameters then Application Core.  Double click Authentication and change as follows:

Secure Login Form: I recommend switching this to Yes

Main Instance (I’m only listing one that I am changing.  Use defaults for the rest)

  • Instance Type: LDAP/AD Directory
  • LDAP URL: enter your primary domain controllers FQDN such as  DC.mydomain.com
  • Protocol: leave on standard unless you are using LDAPS
  • LDAP Port:  389 for standard.  636 for LDAPS
  • LDAP Bind Username:  This is the full path to your user.  If you create a service user called “LDAP Lookup” in a OU called “Service Accounts” for your domain “mycompany.com” it will look something like  “CN=LDAP Lookup,OU=Service Accounts,DC=mycompany,DC=com”
  • LDAP Bind Password: The login password for the above user
  • People DN: The OU to search for users such as “OU=Users,DC=mycompany,DC=com”
  • LDAP Filter: Filter to use against your users.  You can use the default or use mine, it works well to pull all users that have an email address assigned so it filters out most of my service accounts:  “(&(|(objectClass=person))(mail=*))”
  • User Attribute: The attribute that the users will use to login.  I default to sAMAccountname, you might use mail.
  • LDAP Attribute: I recommend adding two. One that will map your users real name to the user display name and one to map their email address.
    • LDAP Attribute: displayName  / Mapping Type: Plugin Parameter / Plugin Parameter: core.conf/USER_DISPLAY_NAME
    • LDAP Attribute: mail / Mapping Type: Plugin Parameter / Plugin Parameter:  core.conf/email

Hit Save then scroll back down to “Test User”, enter a known user ID or email if that’s what you chose for user attribute, and click “Try to connect to LDAP”.  It should be successful.  If not figure out what is wrong in your LDAP/AD config before proceeding.

We cannot publicly share files until a secondary form of authentication is setup.  Scroll to the bottom of the Authentication screen and under “Secondary Instance Mode” pick Master/Slave.  Under “User Listing” switch to Master Only then for “Instance Type” select DB authentication storage then Save.

VERY IMPORTANT: Since I am only using LDAP/AD authentication at this point and the secondary is only for the public links to work the default admin login will not work once you log out and your session is destroyed.  This is how I want my setup as I rather control all users through AD and not have a second set of users in Pydio.  So the next thing to do is assign one of your AD users an administrator so you can get back in after you log out of the default admin account.

Click “Workspaces & Users” on the left then “Users and Groups” and you should have your user list.  Select one of your users in the list and then click Edit.  Under “Special Profile” select “Administrator” then Save.  Open a different browser on your system or connect from another system, navigate to the site, and verify your AD user can login and has administrative rights with a “My Settings” option.

Setup our default Role to lock down the user

Now to setup the default role and lock out some stuff I don’t want my users getting into.  On the left click “Workspaces & Users” then “Roles”.  Double click the “Root Role”.  Enter in a country, language, and default repository.  I personally have users default to their My Files.  Click on the ACL and for my users I deny the default Common Files (I’ll create my own later) along with My Account.  I leave My Files and Home as read write.  Click the Actions tab.  Now to lock the user out of the My Account screen since all our info is coming from AD.  Select Conf.sql – switch_to_user_dashboard (My Account) – All Workspaces and Add Action.  Click Save and the “My Account” option should not be there when a user logs in.

Change the public share location and links

Because we are using a non-standard public file location we need to tell Pydio where that now is.  While in Settings navigate to Application Parameters -> Application Core -> Pydio Main Options.  Change your download folder to remove the data subdirectory as such:

AJXP_INSTALL_PATH/public

Also hard code the public link in to your URL with the public subdirectory afterward:

http://cloud.mydomain.com/public

Personally while I’m in here I also disable Zip Creation because I don’t want people downloading massive amounts of files as a zip.  Click Save when down.

Testing

Login as a non-administrator AD account and you should find your correct AD name pops up in the top right and there is no My Account option.  Upload a file to your My Files workspace and then share it out.  It should generate an “http://cloud.mydomain.com/public/7adbe5” link which if you paste into a different browser or another system should redirect to the file.  Click the Invite button and type in your email address and send.  Test the link in your email also.

Some extra customizations

I have a lot of customizations that work for me but might not for you.  If you are happy with your Pydio install and want to play then you should stop here.  However I have found for a business certain things don’t make sense to allow and have disabled them.  Here are some of them and how to disable.

Under “Workspaces & Users” -> “Roles” -> “Root Role” -> Actions list:

No downloading files chunked: access.fs – download_chunk – All Workspaces

No copying files: access.fs – copy – All Workspaces

No moving files: access.fs – move – All Workspaces

 

I also have some workspaces where I want people to be able to share files but NOT folders or multiple files at once.  These are company-wide shared workspaces with everyone having read access so I lock out minisites for those:

 

Company “shared” folders: action.share – share-folder-minisite-public – (Shared Workspaces)

Company “shared” folders : action.share – share-selection-minisite –  (Shared Workspaces)

 

Personally I want my users to be able to share out mini sites for their own files and allow customers and vendors upload rights but I don’t want them to create new workspaces.  I change that under “Application Parameters” -> “Feature plugins” -> “Action plugins” -> “Sharing Features”

 

Folder Sharing -> Enable Folder Sharing -> Change to Minisites Only

 

At the same time I don’t want shared links sitting out there forever:

 

Link Generation -> Maximum File Expiration Limit -> xx days (I set for 90).

 

Lastly I do not want my users to have a recycle bin in their “My Files”.  That’s removed by editing the “bootstrap_repositories.php” file under the conf subdirectory and changing the “RECYCLE_BIN” setting from ‘recycle_bin’ to an empty string ( ‘’ ).

After all these customizations the site works how I need it to.  Modify for your own use and play with it.  Remember that some of these changes need the plugin cache cleared before they take effect or reboot the server which also seems to do the trick.

Viewing all 71 articles
Browse latest View live