aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: d05595c1fa732593657044fbcc708824f6e87804 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 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 a standard web browser. It also
allows editing small text files directly in the browser using textarea. Since
WFM lets you edit html and markdown documents over the web, You can think and
 use WFM as a small Content Management System (CMS).

Since version 1.2 WFM has a built-in file version control system using GIT
via libgit2 library. All file operations from within the application are
automatically commited to a Git repository. 

Unlike Dropbox, box.net and others, WFM is compatible with most modern and
legacy web browsers dating back to Internet Explorer 1.5, Netscape 1.0 and
Mosaic 3.0. It outputs W3C certified HTML 4.01. JavaScript is optional and
only used for non-essential luxuries on modern web browsers. Compatibility
is tested using [BrowserStack](http://www.browserstack.com/).

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.

![alt text](https://raw.githubusercontent.com/tenox7/wfm/master/screenshot.png "WFM Screenshot")

## History
The application begun its life in 1994 as a perl CGI script for CERN httpd
server to allow uploading and managing customer logs by field support
engineers over the web. 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 instance 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
    # note that file and folder names starting with dot (.) are not counted
    # recursive-du=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 - ace type is either access-ip or access-user
    # mixable, eg access-ip=ro:* with number of access-user=rw
    # level is ro|rw, one host or username per line  * denotes all hosts
    # user is username:password combination
    access-ip=ro:*
    access-ip=rw:127.0.0.1
    access-user=ro:guest:secret
    access-user=rw:admin:password

If you use mixed ro/rw access for instance ip=ro:* and user=rw:admin
then in order to authenticate click on the lock sign on right side of
the top status bar.

## Copyrights and Credits
Copyright (c) 1994-2017 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](http://www.tenox.net/)  
[CGIC Library](https://www.boutell.com/cgic/) by Thomas Boutell  
Server Side RFC 1321 implementation by [L. Peter Deutsch](https://sourceforge.net/projects/libmd5-rfc/files/)  
Client Side RFC 1321 implementation by [Paul Johnston](http://pajhome.org.uk/crypt/md5/index.html)  
Icons by [Yusuke Kamiyamane](http://p.yusukekamiyamane.com/)  
URL Encoding routines by Fred Bulback  
Web browser testing by [BrowserStack](http://www.browserstack.com/)