WFM - Web File Manager
WFM is a web file management application. It allows to perform regular file and folder operations such as upload, download, rename, delete files and organize directory tree structure using standard web browser. Text files can be edited directly in the browser.
An integrated GIT client can track and auto commit all file change operations in to a to a GIT repository.
This app is most commonly used as a web front end for an FTP server. However since you can edit html and markdown documents over the web and there is GIT backed version control, you can think and use WFM as a small Content Management System (CMS).
WFM begun its life around 1994 as a Perl CGI script for CERN httpd server to allow uploading and managing customer logs by field support engineers over the web and as a front end to FTP server. Later rewritten in C language, when CGIC library and Apache httpd were released. Up to 2015 WFM has been a closed source commercial application, supported by a few companies. WFM is now released as open source.
WFM binary is self-contained including all icons/images. You only need to copy the compiled wfm binary (with any name) to your cgi execution directory, usually cgi-bin. Include a config file of the same name as the binary file plus .cfg extension. Example:
/home/user/web/cgi-bin wfm wfm.cfg
Edit the .cfg file according to your needs.
Point your browser to http://x.x.x.x/cgi-bin/wfm and you are done.
This application was designed with multiple instances in mind. An instance is made by copying or linking WFM binary with a different name. In a more advanced configuration different instances can suexec to different users.
In basic form each instance reads it's configuration file of instance name + .cfg extension from the current working directory. For example if you decide to use "ftpadmin" as name of the executable (or link) it will read file named "ftpadmin.cfg" for the configuration. Below is a simple, self-explanatory configuration file example:
# tagline or application name tagline=Snake Oil File Exchange # home directory, typically local directory on the server or SMB/NFS mount directory=/home/user/wfmdata # recursively calculate directory sizes - only enable if you have # fast disk (eg. SSD), large cache or a small directory tree structure #recursive-du=true # large file set makes move dialog display only reduced directory tree # instead of all directories from the whole repository #large-file-set=true # favicon / application icon, must be one of the embedded/compiled icon files # by default wfmicon.gif #favicon=home.gif # When clicking on txt file - edit instead of download by default #txt-default-edit=true # Edit any file as it was txt #edit-any-file=false # optional browser url prefix - aka "external link" - if defined, file # names will be glued to it giving option to be opened directly with the # external link button without going through cgi routines #browser-url=http://x.x.x.x/files/ # access lists # acl format is access-type=level:check, one per line # type is either access-ip, access-md5pw or access-htauth # level is ro|rw # check is ip address, username or * for any ip or user # md5 format is username:md5hashof(username:password) # to generate this use: echo -n "foo:bar" | md5 # htauth is for http basic/digest auth, use username or * for any user # htauth requires externally (httpd) defined auth and require directive access-ip=ro:* access-ip=rw:127.0.0.1 # guest / guest access-md5pw=ro:guest:d3c3b5cb55d3c6d0c6122eedccc3dcf3 # admin / password access-md5pw=rw:admin:73eff6386ce2091b5ca702fc007e1da9 access-htauth=ro:* access-htauth=rw:admin
If you use mixed readonly and readwrite access then then in order to authenticate click on the lock sign on right side of the top status bar.
For enterprise users LDAP/Active Directory is supported. Refer to mod_authnz_ldap with basic / digest authentication. To allow a specific LDAP group or DN use Require ldap-group or Require ldap-dn and
access-htauth=:rw:* in wfm.cfg.
Copyrights and Credits
Copyright (c) 1994-2018 by Antoni Sawicki
Copyright (c) 1996-2011 by Thomas Boutell and Boutell.Com, Inc.
Copyright (c) 2002 by Aladdin Enterprises
Copyright (c) 1999-2009 by Paul Johnston
Copyright (c) 2010 by Yusuke Kamiyamane
WFM implemented by Antoni Sawicki
CGIC Library by Thomas Boutell
Server Side RFC 1321 implementation by L. Peter Deutsch
Client Side RFC 1321 implementation by Paul Johnston
Icons by Yusuke Kamiyamane
URL Encoding routines by Fred Bulback
Web browser testing by BrowserStack