Web File/Content Management Application with GIT integration
C Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
icons
Makefile
README.md
bin2c.c
cgic.c
cgic.h
dialogs.c
dir.c
fileio.c fix rt.token Jul 11, 2018
git.c
md5.c
md5.h
mkicons.sh
screenshot.png
urlencode.c
wfm.c
wfm.cfg
wfm.h

README.md

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).

This program is written using portable C code and compiles natively for many flavors of Unix. It runs as a CGI application on most httpd servers and does not require PHP, Perl, Python or any other interpreted language. It's very small and lightning fast. I runs on resource constrained embedded or vintage / historical systems. It outputs W3C certified HTML 4.01 for compatiblity with legacy browsers. JavaScript is optional and only used for non-essential luxuries. Compatibility is tested using BrowserStack.

alt text

History

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.

Installation

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.

Configuration

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