├── config ├── images ├── icons │ ├── mime │ │ ├── gtk-file.png │ │ ├── html.png │ │ ├── jpeg.png │ │ ├── jpg.png │ │ ├── misc.png │ │ ├── none.png │ │ ├── txt.png │ │ ├── txt2.png │ │ ├── www.png │ │ ├── application-x-deb.png │ │ ├── application-x-rpm.png │ │ ├── font.png │ │ ├── image.png │ │ ├── pdf.png │ │ ├── sound.png │ │ ├── svg.png │ │ ├── tar.png │ │ ├── text-csv.png │ │ ├── text-htmlh.png │ │ ├── text-mht.png │ │ ├── text-x-csrc.png │ │ ├── text-x-css.png │ │ ├── text-x-log.png │ │ ├── text-x-preview.png │ │ ├── video.png │ │ ├── zip.png │ │ ├── application-mbox.png │ │ ├── application-sql.png │ │ ├── application-x-perl.png │ │ ├── application-xml.png │ │ ├── audio-mpeg.png │ │ ├── audio-x-adpcm.png │ │ ├── audio-x-mod.png │ │ ├── audio-x-s3m.png │ │ ├── audio-x-xm.png │ │ ├── document.png │ │ ├── font_bitmap.png │ │ ├── font_type1.png │ │ ├── image-jpeg2000.png │ │ ├── image-x-icon.png │ │ ├── message-rfc822.png │ │ ├── package.png │ │ ├── package_editors.png │ │ ├── shellscript.png │ │ ├── stock_calendar.png │ │ ├── stock_script.png │ │ ├── text-x-authors.png │ │ ├── text-x-c++src.png │ │ ├── text-x-credits.png │ │ ├── text-x-generic.png │ │ ├── text-x-go.png │ │ ├── video-mpeg.png │ │ ├── application-rtf.png │ │ ├── application-text.png │ │ ├── application-x-csh.png │ │ ├── application-x-java.png │ │ ├── application-x-m4.png │ │ ├── application-x-mswinurl.png │ │ ├── application-x-trash.png │ │ ├── application-x-yaml.png │ │ ├── binary.png │ │ ├── exec.png │ │ ├── folder_tar.png │ │ ├── font_truetype.png │ │ ├── image-svg+xml.png │ │ ├── image-x-dds.png │ │ ├── image-x-tga.png │ │ ├── image-x-win-bitmap.png │ │ ├── image-x-xpixmap.png │ │ ├── inode-mount-point.png │ │ ├── media-audio.png │ │ ├── media-image.png │ │ ├── media-video.png │ │ ├── playlist.png │ │ ├── text-enriched.png │ │ ├── text-markdown.png │ │ ├── text-x-csharp.png │ │ ├── text-x-java-source.png │ │ ├── text-x-markdown.png │ │ ├── application-7zip.png │ │ ├── application-font-woff.png │ │ ├── application-gzip.png │ │ ├── application-json.png │ │ ├── application-ogg.png │ │ ├── application-pgp-encrypted.png │ │ ├── application-vnd.ms-access.png │ │ ├── application-x-class-file.png │ │ ├── application-x-pak.png │ │ ├── application-x-sqlite2.png │ │ ├── application-x-sqlite3.png │ │ ├── application-zip.png │ │ ├── audio-x-flac+ogg.png │ │ ├── audio-x-mpegurl.png │ │ ├── audio-x-scpls.png │ │ ├── audio-x-speex+ogg.png │ │ ├── image-vnd.adobe.photoshop.png │ │ ├── image-vnd.microsoft.icon.png │ │ ├── image-x-apple-ios-png.png │ │ ├── image-x-portable-bitmap.png │ │ ├── image-x-psdimage-x-psd.png │ │ ├── image-x-svg+xml.png │ │ ├── kpresenter_kpr.png │ │ ├── office-document.png │ │ ├── office-illustration.png │ │ ├── openofficeorg3-database.png │ │ ├── openofficeorg3-extension.png │ │ ├── playlist-automatic.png │ │ ├── source-playlist.png │ │ ├── spreadsheet.png │ │ ├── wordprocessing.png │ │ ├── application-atom+xml.png │ │ ├── application-illustrator.png │ │ ├── application-javascript.png │ │ ├── application-vnd.ms-word.png │ │ ├── application-x-arc.png │ │ ├── application-x-csproj.png │ │ ├── application-x-desktop.png │ │ ├── application-x-extension-html.png │ │ ├── application-x-font-ttf.png │ │ ├── application-x-lha.png │ │ ├── application-x-lhz.png │ │ ├── application-x-matroska.png │ │ ├── application-x-shellscript.png │ │ ├── application-x-wais-source.png │ │ ├── office-spreadsheet.png │ │ ├── openofficeorg3-drawing.png │ │ ├── openofficeorg3-oasis-database.png │ │ ├── package_wordprocessing.png │ │ ├── source-smart-playlist.png │ │ ├── stock_addressbook.png │ │ ├── template_source.png │ │ ├── text-spreadsheet.png │ │ ├── text-x-gettext-translation.png │ │ ├── application-octet-stream.png │ │ ├── application-pkcs7-mime.png │ │ ├── application-vnd.rn-realmedia.png │ │ ├── application-vnd.sun.xml.draw.png │ │ ├── application-vnd.wordperfect.png │ │ ├── application-x-7z-compressed.png │ │ ├── application-x-compress.png │ │ ├── application-x-designer.png │ │ ├── application-x-gnumeric.png │ │ ├── application-x-java-archive.png │ │ ├── application-x-javascript.png │ │ ├── application-x-keepass.png │ │ ├── application-x-ole-storage.png │ │ ├── application-x-pem-key.png │ │ ├── application-x-python-bytecode.png │ │ ├── application-x-scribus.png │ │ ├── application-x-x509-ca-cert.png │ │ ├── application-vnd.sun.xml.calc.png │ │ ├── application-vnd.sun.xml.writer.png │ │ ├── application-x-compressed-tar.png │ │ ├── application-x-msi.png │ │ ├── application-x-xz-compressed-tar.png │ │ ├── vnd.oasis.opendocument.drawing.png │ │ ├── application-vnd.oasis.opendocument.database.png │ │ ├── application-vnd.oasis.opendocument.text-web.png │ │ ├── application-x-gnome-theme-package.png │ │ ├── application-x-iwork-keynote-sffkey.png │ │ ├── application-x-shockwave-flash.png │ │ ├── openofficeorg3-oasis-spreadsheet.png │ │ ├── application-vnd.oasis.opendocument.graphics.png │ │ ├── application-vnd.oasis.opendocument.text.png │ │ ├── application-vnd.oasis.opendocument.spreadsheet.png │ │ ├── deb.png │ │ ├── empty.png │ │ ├── rpm.png │ │ ├── authors.png │ │ ├── broken.png │ │ ├── message.png │ │ ├── unknown.png │ │ ├── application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png │ │ ├── application-vnd.openxmlformats-officedocument.wordprocessingml.document.png │ │ ├── encrypted.png │ │ ├── extension.png │ │ ├── image-bmp.png │ │ ├── image-gif.png │ │ ├── image-jpeg.png │ │ ├── image-png.png │ │ ├── image-tiff.png │ │ ├── text-css.png │ │ ├── text-html.png │ │ ├── text-plain.png │ │ ├── text-x-bak.png │ │ ├── text-x-c++.png │ │ ├── text-x-c.png │ │ ├── text-x-sql.png │ │ ├── text-x-tex.png │ │ ├── text-xml.png │ │ ├── vcalendar.png │ │ ├── application-vnd.oasis.opendocument.formula-template.png │ │ ├── audio-x-mpeg.png │ │ ├── audio-x-wav.png │ │ ├── image-x-eps.png │ │ ├── image-x-ico.png │ │ ├── image-x-psd.png │ │ ├── image-x-xcf.png │ │ ├── opera-widget.png │ │ ├── text-x-chdr.png │ │ ├── text-x-java.png │ │ ├── application-pdf.png │ │ ├── application-vnd.openxmlformats-officedocument.presentationml.slideshow.png │ │ ├── audio-x-generic.png │ │ ├── audio-x-ms-wma.png │ │ ├── font-x-generic.png │ │ ├── image-x-generic.png │ │ ├── inode-directory.png │ │ ├── inode-symlink.png │ │ ├── opera-extension.png │ │ ├── text-richtext.png │ │ ├── text-x-bibtex.png │ │ ├── text-x-c++hdr.png │ │ ├── text-x-copying.png │ │ ├── text-x-install.png │ │ ├── text-x-makefile.png │ │ ├── text-x-python.png │ │ ├── text-x-readme.png │ │ ├── text-x-script.png │ │ ├── text-x-source.png │ │ ├── text-xhtml+xml.png │ │ ├── video-x-generic.png │ │ ├── x-dia-diagram.png │ │ ├── application-vnd.openxmlformats-officedocument.presentationml.presentation.png │ │ ├── application-x-ace.png │ │ ├── application-x-cue.png │ │ ├── application-x-jar.png │ │ ├── application-x-php.png │ │ ├── application-x-rar.png │ │ ├── application-x-sln.png │ │ ├── application-x-tar.png │ │ ├── application-x-zip.png │ │ ├── package-x-generic.png │ │ ├── phatch-actionlist.png │ │ ├── text-x-changelog.png │ │ ├── text-x-javascript.png │ │ ├── x-office-document.png │ │ ├── x-office-drawing.png │ │ ├── application-msword.png │ │ ├── application-pgp-keys.png │ │ ├── application-rss+xml.png │ │ ├── application-x-7zip.png │ │ ├── application-x-glade.png │ │ ├── application-x-gzip.png │ │ ├── application-x-ruby.png │ │ ├── application-x-theme.png │ │ ├── audio-x-mp3-playlist.png │ │ ├── audio-x-vorbis+ogg.png │ │ ├── multipart-encrypted.png │ │ ├── x-office-spreadsheet.png │ │ ├── application-x-archive.png │ │ ├── application-x-cd-image.png │ │ ├── x-office-address-book.png │ │ ├── x-office-presentation.png │ │ ├── application-vnd.ms-excel.png │ │ ├── application-vnd.scribus.png │ │ ├── application-x-bittorrent.png │ │ ├── application-x-executable.png │ │ ├── application-x-flash-video.png │ │ ├── application-x-msdownload.png │ │ ├── opera-unite-application.png │ │ ├── text-x-generic-template.png │ │ ├── application-vnd.ms-powerpoint.png │ │ ├── application-x-ms-dos-executable.png │ │ ├── application-vnd.oasis.opendocument.formula.png │ │ └── font.xpm │ └── AUTHORS ├── icon.gif └── icon.png ├── .gitignore ├── defaultacl ├── lang ├── ca ├── zh_CN.UTF-8 ├── de.UTF-8 ├── en └── ru.UTF-8 ├── filemin-updater.tar.gz ├── filemin-updater.bsd.tar.gz ├── filemin-updater ├── images │ └── icon.gif ├── module.info ├── lang │ └── en └── index.cgi ├── distrib ├── filemin-2.2.0.linux.wbm.gz └── filemin-2.2.0.freebsd.wbm.gz ├── config.info ├── config.info.pl.UTF-8 ├── get_buffer.cgi ├── setfacl.cgi ├── module.info ├── pack.sh ├── get_bookmarks.cgi ├── load_session.cgi ├── get_file_contents.cgi ├── lib ├── JSON │ └── PP │ │ └── Boolean.pm └── Mojo │ └── Base.pm ├── check_exists.cgi ├── delete.cgi ├── save_session.cgi ├── save_bookmarks.cgi ├── cut.cgi ├── copy.cgi ├── unauthenticated ├── js │ ├── chmod-calculator.min.js │ ├── chmod-calculator.js │ └── bootstrap-table-contextmenu.min.js ├── css │ ├── pnotify-filemin.min.css │ ├── pnotify-filemin.css │ ├── filemin.css │ └── filemin.min.css └── templates │ ├── context_menu_search.html │ ├── context_menu.html │ ├── main_menu.html │ └── index.html ├── download.cgi ├── rename.cgi ├── save_file.cgi ├── create_folder.cgi ├── create_file.cgi ├── get_img.cgi ├── get_size.cgi ├── bookmark.cgi ├── list_archive.cgi ├── extract.cgi ├── getfacl.cgi ├── symlink.cgi ├── http_download.cgi ├── chown.cgi ├── compress.cgi ├── update.cgi ├── update_symlink.cgi ├── chcon.cgi ├── filemin.cgi ├── LICENCE ├── linux.cdn.sh ├── download_multi.cgi ├── acl_security.pl ├── linux.sh ├── linux.builtin.sh ├── freebsd.sh ├── paste.cgi ├── TODO ├── README.md ├── index.cgi ├── chmod.cgi ├── upload.cgi ├── list.cgi └── change_properties.cgi /config: -------------------------------------------------------------------------------- 1 | allowed_paths=$HOME 2 | -------------------------------------------------------------------------------- /images/icons/mime/gtk-file.png: -------------------------------------------------------------------------------- 1 | ./empty.png -------------------------------------------------------------------------------- /images/icons/mime/html.png: -------------------------------------------------------------------------------- 1 | ./text-html.png -------------------------------------------------------------------------------- /images/icons/mime/jpeg.png: -------------------------------------------------------------------------------- 1 | ./image-jpeg.png -------------------------------------------------------------------------------- /images/icons/mime/jpg.png: -------------------------------------------------------------------------------- 1 | ./image-jpeg.png -------------------------------------------------------------------------------- /images/icons/mime/misc.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/none.png: -------------------------------------------------------------------------------- 1 | ./unknown.png -------------------------------------------------------------------------------- /images/icons/mime/txt.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/txt2.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/www.png: -------------------------------------------------------------------------------- 1 | ./text-html.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | unauthenticated/libs 2 | upload 3 | -------------------------------------------------------------------------------- /images/icons/mime/application-x-deb.png: -------------------------------------------------------------------------------- 1 | ./deb.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-rpm.png: -------------------------------------------------------------------------------- 1 | ./rpm.png -------------------------------------------------------------------------------- /images/icons/mime/font.png: -------------------------------------------------------------------------------- 1 | ./font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image.png: -------------------------------------------------------------------------------- 1 | ./image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/pdf.png: -------------------------------------------------------------------------------- 1 | ./application-pdf.png -------------------------------------------------------------------------------- /images/icons/mime/sound.png: -------------------------------------------------------------------------------- 1 | ./audio-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/svg.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/tar.png: -------------------------------------------------------------------------------- 1 | ./application-x-tar.png -------------------------------------------------------------------------------- /images/icons/mime/text-csv.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/text-htmlh.png: -------------------------------------------------------------------------------- 1 | ./text-html.png -------------------------------------------------------------------------------- /images/icons/mime/text-mht.png: -------------------------------------------------------------------------------- 1 | ./text-html.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-csrc.png: -------------------------------------------------------------------------------- 1 | ./text-x-c.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-css.png: -------------------------------------------------------------------------------- 1 | ./text-css.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-log.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-preview.png: -------------------------------------------------------------------------------- 1 | ./empty.png -------------------------------------------------------------------------------- /images/icons/mime/video.png: -------------------------------------------------------------------------------- 1 | ./video-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/zip.png: -------------------------------------------------------------------------------- 1 | ./application-x-zip.png -------------------------------------------------------------------------------- /defaultacl: -------------------------------------------------------------------------------- 1 | allowed_paths=$HOME 2 | work_as_root=1 3 | -------------------------------------------------------------------------------- /images/icons/mime/application-mbox.png: -------------------------------------------------------------------------------- 1 | ./message.png -------------------------------------------------------------------------------- /images/icons/mime/application-sql.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-perl.png: -------------------------------------------------------------------------------- 1 | ./unknown.png -------------------------------------------------------------------------------- /images/icons/mime/application-xml.png: -------------------------------------------------------------------------------- 1 | ./text-xml.png -------------------------------------------------------------------------------- /images/icons/mime/audio-mpeg.png: -------------------------------------------------------------------------------- 1 | ./audio-x-mpeg.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-adpcm.png: -------------------------------------------------------------------------------- 1 | ./audio-x-wav.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-mod.png: -------------------------------------------------------------------------------- 1 | audio-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-s3m.png: -------------------------------------------------------------------------------- 1 | audio-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-xm.png: -------------------------------------------------------------------------------- 1 | audio-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/document.png: -------------------------------------------------------------------------------- 1 | ./text-richtext.png -------------------------------------------------------------------------------- /images/icons/mime/font_bitmap.png: -------------------------------------------------------------------------------- 1 | ./font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/font_type1.png: -------------------------------------------------------------------------------- 1 | ./font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image-jpeg2000.png: -------------------------------------------------------------------------------- 1 | ./image-jpeg.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-icon.png: -------------------------------------------------------------------------------- 1 | ./image-x-ico.png -------------------------------------------------------------------------------- /images/icons/mime/message-rfc822.png: -------------------------------------------------------------------------------- 1 | ./message.png -------------------------------------------------------------------------------- /images/icons/mime/package.png: -------------------------------------------------------------------------------- 1 | ./package-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/package_editors.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/shellscript.png: -------------------------------------------------------------------------------- 1 | ./text-x-script.png -------------------------------------------------------------------------------- /images/icons/mime/stock_calendar.png: -------------------------------------------------------------------------------- 1 | ./vcalendar.png -------------------------------------------------------------------------------- /images/icons/mime/stock_script.png: -------------------------------------------------------------------------------- 1 | ./text-x-source.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-authors.png: -------------------------------------------------------------------------------- 1 | ./authors.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-c++src.png: -------------------------------------------------------------------------------- 1 | ./text-x-c++.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-credits.png: -------------------------------------------------------------------------------- 1 | ./authors.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-generic.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-go.png: -------------------------------------------------------------------------------- 1 | ./text-x-source.png -------------------------------------------------------------------------------- /images/icons/mime/video-mpeg.png: -------------------------------------------------------------------------------- 1 | video-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/application-rtf.png: -------------------------------------------------------------------------------- 1 | ./text-richtext.png -------------------------------------------------------------------------------- /images/icons/mime/application-text.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-csh.png: -------------------------------------------------------------------------------- 1 | text-x-script.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-java.png: -------------------------------------------------------------------------------- 1 | ./text-x-java.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-m4.png: -------------------------------------------------------------------------------- 1 | ./text-richtext.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-mswinurl.png: -------------------------------------------------------------------------------- 1 | ./unknown.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-trash.png: -------------------------------------------------------------------------------- 1 | ./text-x-bak.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-yaml.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/binary.png: -------------------------------------------------------------------------------- 1 | ./application-x-executable.png -------------------------------------------------------------------------------- /images/icons/mime/exec.png: -------------------------------------------------------------------------------- 1 | ./application-x-executable.png -------------------------------------------------------------------------------- /images/icons/mime/folder_tar.png: -------------------------------------------------------------------------------- 1 | ./application-x-tar.png -------------------------------------------------------------------------------- /images/icons/mime/font_truetype.png: -------------------------------------------------------------------------------- 1 | ./font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image-svg+xml.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-dds.png: -------------------------------------------------------------------------------- 1 | ./image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-tga.png: -------------------------------------------------------------------------------- 1 | ./image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-win-bitmap.png: -------------------------------------------------------------------------------- 1 | ./image-bmp.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-xpixmap.png: -------------------------------------------------------------------------------- 1 | image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/inode-mount-point.png: -------------------------------------------------------------------------------- 1 | inode-directory.png -------------------------------------------------------------------------------- /images/icons/mime/media-audio.png: -------------------------------------------------------------------------------- 1 | ./audio-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/media-image.png: -------------------------------------------------------------------------------- 1 | ./image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/media-video.png: -------------------------------------------------------------------------------- 1 | ./video-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/playlist.png: -------------------------------------------------------------------------------- 1 | ./audio-x-mp3-playlist.png -------------------------------------------------------------------------------- /images/icons/mime/text-enriched.png: -------------------------------------------------------------------------------- 1 | ./text-richtext.png -------------------------------------------------------------------------------- /images/icons/mime/text-markdown.png: -------------------------------------------------------------------------------- 1 | ./text-x-readme.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-csharp.png: -------------------------------------------------------------------------------- 1 | ./text-x-source.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-java-source.png: -------------------------------------------------------------------------------- 1 | ./text-x-java.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-markdown.png: -------------------------------------------------------------------------------- 1 | ./text-x-readme.png -------------------------------------------------------------------------------- /images/icons/mime/application-7zip.png: -------------------------------------------------------------------------------- 1 | ./application-x-7zip.png -------------------------------------------------------------------------------- /images/icons/mime/application-font-woff.png: -------------------------------------------------------------------------------- 1 | ./font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/application-gzip.png: -------------------------------------------------------------------------------- 1 | application-x-gzip.png -------------------------------------------------------------------------------- /images/icons/mime/application-json.png: -------------------------------------------------------------------------------- 1 | ./text-x-javascript.png -------------------------------------------------------------------------------- /images/icons/mime/application-ogg.png: -------------------------------------------------------------------------------- 1 | ./audio-x-vorbis+ogg.png -------------------------------------------------------------------------------- /images/icons/mime/application-pgp-encrypted.png: -------------------------------------------------------------------------------- 1 | ./encrypted.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.ms-access.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-class-file.png: -------------------------------------------------------------------------------- 1 | ./text-x-java.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-pak.png: -------------------------------------------------------------------------------- 1 | ./package-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-sqlite2.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-sqlite3.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/application-zip.png: -------------------------------------------------------------------------------- 1 | ./application-x-zip.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-flac+ogg.png: -------------------------------------------------------------------------------- 1 | ./audio-x-vorbis+ogg.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-mpegurl.png: -------------------------------------------------------------------------------- 1 | ./audio-x-mp3-playlist.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-scpls.png: -------------------------------------------------------------------------------- 1 | ./audio-x-mp3-playlist.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-speex+ogg.png: -------------------------------------------------------------------------------- 1 | ./audio-x-vorbis+ogg.png -------------------------------------------------------------------------------- /images/icons/mime/image-vnd.adobe.photoshop.png: -------------------------------------------------------------------------------- 1 | image-x-psd.png -------------------------------------------------------------------------------- /images/icons/mime/image-vnd.microsoft.icon.png: -------------------------------------------------------------------------------- 1 | ./image-x-ico.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-apple-ios-png.png: -------------------------------------------------------------------------------- 1 | image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-portable-bitmap.png: -------------------------------------------------------------------------------- 1 | ./image-bmp.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-psdimage-x-psd.png: -------------------------------------------------------------------------------- 1 | ./image-x-psd.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-svg+xml.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/kpresenter_kpr.png: -------------------------------------------------------------------------------- 1 | ./x-office-presentation.png -------------------------------------------------------------------------------- /images/icons/mime/office-document.png: -------------------------------------------------------------------------------- 1 | ./x-office-document.png -------------------------------------------------------------------------------- /images/icons/mime/office-illustration.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/openofficeorg3-database.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/openofficeorg3-extension.png: -------------------------------------------------------------------------------- 1 | ./extension.png -------------------------------------------------------------------------------- /images/icons/mime/playlist-automatic.png: -------------------------------------------------------------------------------- 1 | ./text-x-makefile.png -------------------------------------------------------------------------------- /images/icons/mime/source-playlist.png: -------------------------------------------------------------------------------- 1 | ./audio-x-mp3-playlist.png -------------------------------------------------------------------------------- /images/icons/mime/spreadsheet.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icons/mime/wordprocessing.png: -------------------------------------------------------------------------------- 1 | ./x-office-document.png -------------------------------------------------------------------------------- /images/icons/mime/application-atom+xml.png: -------------------------------------------------------------------------------- 1 | ./application-rss+xml.png -------------------------------------------------------------------------------- /images/icons/mime/application-illustrator.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/application-javascript.png: -------------------------------------------------------------------------------- 1 | ./text-x-javascript.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.ms-word.png: -------------------------------------------------------------------------------- 1 | application-msword.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-arc.png: -------------------------------------------------------------------------------- 1 | ./application-x-archive.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-csproj.png: -------------------------------------------------------------------------------- 1 | ./application-x-sln.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-desktop.png: -------------------------------------------------------------------------------- 1 | ./application-x-theme.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-extension-html.png: -------------------------------------------------------------------------------- 1 | ./text-html.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-font-ttf.png: -------------------------------------------------------------------------------- 1 | ./font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-lha.png: -------------------------------------------------------------------------------- 1 | ./application-x-archive.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-lhz.png: -------------------------------------------------------------------------------- 1 | ./application-x-archive.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-matroska.png: -------------------------------------------------------------------------------- 1 | ./video-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-shellscript.png: -------------------------------------------------------------------------------- 1 | ./text-x-script.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-wais-source.png: -------------------------------------------------------------------------------- 1 | text-x-source.png -------------------------------------------------------------------------------- /images/icons/mime/office-spreadsheet.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icons/mime/openofficeorg3-drawing.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/openofficeorg3-oasis-database.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/package_wordprocessing.png: -------------------------------------------------------------------------------- 1 | ./x-office-document.png -------------------------------------------------------------------------------- /images/icons/mime/source-smart-playlist.png: -------------------------------------------------------------------------------- 1 | ./text-x-makefile.png -------------------------------------------------------------------------------- /images/icons/mime/stock_addressbook.png: -------------------------------------------------------------------------------- 1 | ./x-office-address-book.png -------------------------------------------------------------------------------- /images/icons/mime/template_source.png: -------------------------------------------------------------------------------- 1 | ./text-x-generic-template.png -------------------------------------------------------------------------------- /images/icons/mime/text-spreadsheet.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-gettext-translation.png: -------------------------------------------------------------------------------- 1 | ./text-plain.png -------------------------------------------------------------------------------- /lang/ca: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/lang/ca -------------------------------------------------------------------------------- /images/icons/mime/application-octet-stream.png: -------------------------------------------------------------------------------- 1 | ./multipart-encrypted.png -------------------------------------------------------------------------------- /images/icons/mime/application-pkcs7-mime.png: -------------------------------------------------------------------------------- 1 | ./application-pgp-keys.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.rn-realmedia.png: -------------------------------------------------------------------------------- 1 | ./video-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.sun.xml.draw.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.wordperfect.png: -------------------------------------------------------------------------------- 1 | ./x-office-document.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-7z-compressed.png: -------------------------------------------------------------------------------- 1 | ./application-x-7zip.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-compress.png: -------------------------------------------------------------------------------- 1 | ./application-x-archive.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-designer.png: -------------------------------------------------------------------------------- 1 | ./application-x-glade.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-gnumeric.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-java-archive.png: -------------------------------------------------------------------------------- 1 | ./application-x-jar.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-javascript.png: -------------------------------------------------------------------------------- 1 | ./text-x-javascript.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-keepass.png: -------------------------------------------------------------------------------- 1 | ./application-pgp-keys.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-ole-storage.png: -------------------------------------------------------------------------------- 1 | ./multipart-encrypted.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-pem-key.png: -------------------------------------------------------------------------------- 1 | ./application-pgp-keys.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-python-bytecode.png: -------------------------------------------------------------------------------- 1 | ./text-x-python.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-scribus.png: -------------------------------------------------------------------------------- 1 | ./application-vnd.scribus.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-x509-ca-cert.png: -------------------------------------------------------------------------------- 1 | ./multipart-encrypted.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.sun.xml.calc.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.sun.xml.writer.png: -------------------------------------------------------------------------------- 1 | ./x-office-document.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-compressed-tar.png: -------------------------------------------------------------------------------- 1 | ./application-x-gzip.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-msi.png: -------------------------------------------------------------------------------- 1 | ./application-x-ms-dos-executable.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-xz-compressed-tar.png: -------------------------------------------------------------------------------- 1 | ./application-x-tar.png -------------------------------------------------------------------------------- /images/icons/mime/vnd.oasis.opendocument.drawing.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.database.png: -------------------------------------------------------------------------------- 1 | ./text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.text-web.png: -------------------------------------------------------------------------------- 1 | ./text-html.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-gnome-theme-package.png: -------------------------------------------------------------------------------- 1 | ./application-x-theme.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-iwork-keynote-sffkey.png: -------------------------------------------------------------------------------- 1 | ./application-pgp-keys.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-shockwave-flash.png: -------------------------------------------------------------------------------- 1 | ./application-x-flash-video.png -------------------------------------------------------------------------------- /images/icons/mime/openofficeorg3-oasis-spreadsheet.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icon.gif -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icon.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.graphics.png: -------------------------------------------------------------------------------- 1 | ./x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.text.png: -------------------------------------------------------------------------------- 1 | ./x-office-document.png -------------------------------------------------------------------------------- /filemin-updater.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/filemin-updater.tar.gz -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.spreadsheet.png: -------------------------------------------------------------------------------- 1 | ./x-office-spreadsheet.png -------------------------------------------------------------------------------- /filemin-updater.bsd.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/filemin-updater.bsd.tar.gz -------------------------------------------------------------------------------- /images/icons/mime/deb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/deb.png -------------------------------------------------------------------------------- /images/icons/mime/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/empty.png -------------------------------------------------------------------------------- /images/icons/mime/rpm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/rpm.png -------------------------------------------------------------------------------- /images/icons/mime/authors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/authors.png -------------------------------------------------------------------------------- /images/icons/mime/broken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/broken.png -------------------------------------------------------------------------------- /images/icons/mime/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/message.png -------------------------------------------------------------------------------- /images/icons/mime/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/unknown.png -------------------------------------------------------------------------------- /filemin-updater/images/icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/filemin-updater/images/icon.gif -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png: -------------------------------------------------------------------------------- 1 | ./application-vnd.ms-excel.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png: -------------------------------------------------------------------------------- 1 | ./application-msword.png -------------------------------------------------------------------------------- /images/icons/mime/encrypted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/encrypted.png -------------------------------------------------------------------------------- /images/icons/mime/extension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/extension.png -------------------------------------------------------------------------------- /images/icons/mime/image-bmp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-bmp.png -------------------------------------------------------------------------------- /images/icons/mime/image-gif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-gif.png -------------------------------------------------------------------------------- /images/icons/mime/image-jpeg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-jpeg.png -------------------------------------------------------------------------------- /images/icons/mime/image-png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-png.png -------------------------------------------------------------------------------- /images/icons/mime/image-tiff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-tiff.png -------------------------------------------------------------------------------- /images/icons/mime/text-css.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-css.png -------------------------------------------------------------------------------- /images/icons/mime/text-html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-html.png -------------------------------------------------------------------------------- /images/icons/mime/text-plain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-plain.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-bak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-bak.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-c++.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-c++.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-c.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-sql.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-tex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-tex.png -------------------------------------------------------------------------------- /images/icons/mime/text-xml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-xml.png -------------------------------------------------------------------------------- /images/icons/mime/vcalendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/vcalendar.png -------------------------------------------------------------------------------- /distrib/filemin-2.2.0.linux.wbm.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/distrib/filemin-2.2.0.linux.wbm.gz -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.formula-template.png: -------------------------------------------------------------------------------- 1 | ./application-vnd.oasis.opendocument.formula.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-mpeg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/audio-x-mpeg.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-wav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/audio-x-wav.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-eps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-x-eps.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-x-ico.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-psd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-x-psd.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-xcf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-x-xcf.png -------------------------------------------------------------------------------- /images/icons/mime/opera-widget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/opera-widget.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-chdr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-chdr.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-java.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-java.png -------------------------------------------------------------------------------- /distrib/filemin-2.2.0.freebsd.wbm.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/distrib/filemin-2.2.0.freebsd.wbm.gz -------------------------------------------------------------------------------- /images/icons/mime/application-pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-pdf.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.openxmlformats-officedocument.presentationml.slideshow.png: -------------------------------------------------------------------------------- 1 | ./application-vnd.ms-powerpoint.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/audio-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-ms-wma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/audio-x-ms-wma.png -------------------------------------------------------------------------------- /images/icons/mime/font-x-generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/font-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/image-x-generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/image-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/inode-directory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/inode-directory.png -------------------------------------------------------------------------------- /images/icons/mime/inode-symlink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/inode-symlink.png -------------------------------------------------------------------------------- /images/icons/mime/opera-extension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/opera-extension.png -------------------------------------------------------------------------------- /images/icons/mime/text-richtext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-richtext.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-bibtex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-bibtex.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-c++hdr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-c++hdr.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-copying.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-copying.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-install.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-makefile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-makefile.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-python.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-readme.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-script.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-script.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-source.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-source.png -------------------------------------------------------------------------------- /images/icons/mime/text-xhtml+xml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-xhtml+xml.png -------------------------------------------------------------------------------- /images/icons/mime/video-x-generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/video-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/x-dia-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/x-dia-diagram.png -------------------------------------------------------------------------------- /config.info: -------------------------------------------------------------------------------- 1 | allowed_paths=Directories accessible to Usermin users,9,60,5,\t 2 | max=Maximum size for uploaded files,3,Unlimited 3 | -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.openxmlformats-officedocument.presentationml.presentation.png: -------------------------------------------------------------------------------- 1 | ./application-vnd.ms-powerpoint.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-ace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-ace.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-cue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-cue.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-jar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-jar.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-php.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-php.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-rar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-rar.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-sln.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-sln.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-tar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-tar.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-zip.png -------------------------------------------------------------------------------- /images/icons/mime/package-x-generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/package-x-generic.png -------------------------------------------------------------------------------- /images/icons/mime/phatch-actionlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/phatch-actionlist.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-changelog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-changelog.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-javascript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-javascript.png -------------------------------------------------------------------------------- /images/icons/mime/x-office-document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/x-office-document.png -------------------------------------------------------------------------------- /images/icons/mime/x-office-drawing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/x-office-drawing.png -------------------------------------------------------------------------------- /images/icons/mime/application-msword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-msword.png -------------------------------------------------------------------------------- /images/icons/mime/application-pgp-keys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-pgp-keys.png -------------------------------------------------------------------------------- /images/icons/mime/application-rss+xml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-rss+xml.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-7zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-7zip.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-glade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-glade.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-gzip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-gzip.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-ruby.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-theme.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-mp3-playlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/audio-x-mp3-playlist.png -------------------------------------------------------------------------------- /images/icons/mime/audio-x-vorbis+ogg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/audio-x-vorbis+ogg.png -------------------------------------------------------------------------------- /images/icons/mime/multipart-encrypted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/multipart-encrypted.png -------------------------------------------------------------------------------- /images/icons/mime/x-office-spreadsheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/x-office-spreadsheet.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-archive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-archive.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-cd-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-cd-image.png -------------------------------------------------------------------------------- /images/icons/mime/x-office-address-book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/x-office-address-book.png -------------------------------------------------------------------------------- /images/icons/mime/x-office-presentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/x-office-presentation.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.ms-excel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-vnd.ms-excel.png -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.scribus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-vnd.scribus.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-bittorrent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-bittorrent.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-executable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-executable.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-flash-video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-flash-video.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-msdownload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-msdownload.png -------------------------------------------------------------------------------- /images/icons/mime/opera-unite-application.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/opera-unite-application.png -------------------------------------------------------------------------------- /images/icons/mime/text-x-generic-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/text-x-generic-template.png -------------------------------------------------------------------------------- /config.info.pl.UTF-8: -------------------------------------------------------------------------------- 1 | allowed_paths=Katalogi dostępne dla użytkowników Usermin,9,60,5,\t 2 | max=Maksymalny rozmiar wysyłanych plików,3,Bez limitu 3 | -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.ms-powerpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-vnd.ms-powerpoint.png -------------------------------------------------------------------------------- /images/icons/mime/application-x-ms-dos-executable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-x-ms-dos-executable.png -------------------------------------------------------------------------------- /filemin-updater/module.info: -------------------------------------------------------------------------------- 1 | desc=Filemin Updater 2 | os_support=*-linux freebsd 3 | name=Filemin Updater 4 | longdesc=Filemin updater 5 | version=1.0.3 6 | webmin=1 7 | -------------------------------------------------------------------------------- /images/icons/mime/application-vnd.oasis.opendocument.formula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Real-Gecko/Filemin/HEAD/images/icons/mime/application-vnd.oasis.opendocument.formula.png -------------------------------------------------------------------------------- /filemin-updater/lang/en: -------------------------------------------------------------------------------- 1 | newer_version_available=Newer version of Filemin is available 2 | click_to_update=Click to update 3 | module_updated=Updated module $1 ($2 kB) 4 | checking_for_update=Checking for update... 5 | module_up_to_date=module is up to date 6 | -------------------------------------------------------------------------------- /get_buffer.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | get_paths(); 7 | 8 | print_ajax_header(); 9 | 10 | $data = &read_file_contents(&get_paste_buffer_file()); 11 | print Mojo::JSON::to_json({'success' => $data}); 12 | -------------------------------------------------------------------------------- /images/icons/AUTHORS: -------------------------------------------------------------------------------- 1 | Faenza is designed and developed by Matthieu James . 2 | 3 | Faenza icons are all licensed under the GPL. 4 | 5 | Thanks to Holger Seelig and clemyeats for their help for having some text preview inside icons in Nautilus. 6 | -------------------------------------------------------------------------------- /setfacl.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | # Remove exploiting "../" 12 | $name = $in{'name'}; 13 | $name =~ s/\.\.//g; 14 | $name = simplify_path($name); 15 | 16 | -------------------------------------------------------------------------------- /module.info: -------------------------------------------------------------------------------- 1 | desc=Filemin File Manager 2 | os_support=*-linux freebsd 3 | name=Filemin 4 | longdesc=Fast and light file manager written in perl 5 | version=2.2.3 6 | webmin=1 7 | usermin=1 8 | flavour=full 9 | longdesc_pl.UTF-8=Szybki i lekki menadżer plików napisany w perl 10 | desc_pl.UTF-8=Filemin - menadżer plików -------------------------------------------------------------------------------- /pack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm upload/* 3 | cp unauthenticated/js/filemin.js unauthenticated/js/filemin.min.js 4 | cp unauthenticated/js/spec-ops.js unauthenticated/js/spec-ops.min.js 5 | cp unauthenticated/css/filemin.css unauthenticated/css/filemin.min.css 6 | ./linux.sh 7 | ./linux.cdn.sh 8 | ./freebsd.sh 9 | ./linux.builtin.sh 10 | -------------------------------------------------------------------------------- /get_bookmarks.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | $confdir = get_config_dir(); 12 | my $bookmarks = &read_file_lines($confdir.'/.bookmarks', 1); 13 | 14 | $result = ''; 15 | foreach $bookmark(@$bookmarks) { 16 | $result.= "$bookmark\n"; 17 | } 18 | print $result; 19 | -------------------------------------------------------------------------------- /load_session.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use Mojo::JSON; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | print_ajax_header(); 11 | 12 | $confdir = get_config_dir(); 13 | 14 | if(-e "$confdir/.session") { 15 | my $session = &read_file_contents($confdir.'/.session', 1); 16 | print $session; 17 | } else { 18 | print Mojo::JSON::to_json({'error' => $text{'failed_to_read_file'}.' .session'}) 19 | } 20 | -------------------------------------------------------------------------------- /get_file_contents.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | # Remove exploiting "../" 12 | $name = $in{'name'}; 13 | $name =~ s/\.\.//g; 14 | $name = simplify_path($name); 15 | 16 | if($name && -e $cwd.'/'.$name) { 17 | $data = &read_file_contents($cwd.'/'.$name); 18 | print $data; 19 | } else { 20 | print status('error', $text{'failed_to_read_file'}); 21 | } 22 | -------------------------------------------------------------------------------- /lib/JSON/PP/Boolean.pm: -------------------------------------------------------------------------------- 1 | =head1 NAME 2 | 3 | JSON::PP::Boolean - dummy module providing JSON::PP::Boolean 4 | 5 | =head1 SYNOPSIS 6 | 7 | # do not "use" yourself 8 | 9 | =head1 DESCRIPTION 10 | 11 | This module exists only to provide overload resolution for Storable and similar modules. See 12 | L for more info about this class. 13 | 14 | =cut 15 | 16 | use JSON::PP (); 17 | use strict; 18 | 19 | 1; 20 | 21 | =head1 AUTHOR 22 | 23 | This idea is from L written by Marc Lehmann 24 | 25 | =cut 26 | 27 | -------------------------------------------------------------------------------- /check_exists.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use Mojo::JSON; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | print_ajax_header(); 11 | 12 | $name = $in{'name'}; 13 | $name =~ s/\.\.//g; 14 | $name = &simplify_path($name); 15 | 16 | #print '{"success": "1"}'; 17 | 18 | $exists = (-e "$cwd/$name") ? 1 : 0; 19 | $directory = (-d "$cwd/$name") ? 1 : 0; 20 | $notice = &text('dialog_exists_overwrite', $name, $cwd) if $exists; 21 | 22 | print Mojo::JSON::to_json({'exists' => $exists, 'directory' => $directory, 'notice' => $notice}) 23 | -------------------------------------------------------------------------------- /delete.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | my @errors; 10 | 11 | print_ajax_header(); 12 | 13 | foreach $name (split(/\0/, $in{'name[]'})) { 14 | next if $name eq ''; 15 | $name =~ s/\.\.//g; 16 | $name = &simplify_path($name); 17 | if(!$name || !&unlink_logged("$cwd/$name")) { 18 | push @errors, "$name - $text{'error_delete'}: $!"; 19 | } 20 | } 21 | 22 | if (scalar(@errors) > 0) { 23 | print status('error', \@errors); 24 | } else { 25 | print status('success', 1); 26 | } 27 | -------------------------------------------------------------------------------- /save_session.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | $confdir = get_config_dir(); 12 | 13 | my $data = $in{'data'}; 14 | #$bookmarks =~ s/\r\n/\n/g; 15 | 16 | my $fh; 17 | 18 | if(open($fh, ">", $confdir.'/.session')) { 19 | print $fh $data; 20 | close $fh; 21 | } else { 22 | push @errors, "$text{'error_saving_file'} .session - $!"; 23 | } 24 | 25 | if (scalar(@errors) > 0) { 26 | print status('error', \@errors); 27 | } else { 28 | print status('success', 1); 29 | } 30 | -------------------------------------------------------------------------------- /save_bookmarks.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | $confdir = get_config_dir(); 12 | 13 | my $bookmarks = $in{'bookmarks'}; 14 | $bookmarks =~ s/\r\n/\n/g; 15 | 16 | my $fh; 17 | 18 | if(open($fh, ">", $confdir.'/.bookmarks')) { 19 | print $fh $bookmarks; 20 | close $fh; 21 | } else { 22 | push @errors, "$text{'error_saving_bookmarks'} - $!"; 23 | } 24 | 25 | if (scalar(@errors) > 0) { 26 | print status('error', \@errors); 27 | } else { 28 | print status('success', 1); 29 | } 30 | -------------------------------------------------------------------------------- /cut.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use Mojo::JSON; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | print_ajax_header(); 11 | 12 | if(open(my $fh, ">", &get_paste_buffer_file())) { 13 | print $fh "cut\n"; 14 | print $fh "$path\n"; 15 | @names = (split(/\0/, $in{'name[]'})); 16 | foreach $name (@names) { 17 | print $fh "$name\n"; 18 | } 19 | close($fh); 20 | print Mojo::JSON::to_json({'success' => 1, 'text' => scalar(@names)." $text{'cut_to_buffer'}"}); 21 | } else { 22 | print Mojo::JSON::to_json({'error' => "$text{'error_writing_file'} .buffer $!"}); 23 | } 24 | -------------------------------------------------------------------------------- /copy.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | #use lib './lib'; 5 | #use Mojo::JSON; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | print_ajax_header(); 11 | 12 | if(open(my $fh, ">", &get_paste_buffer_file())) { 13 | print $fh "copy\n"; 14 | print $fh "$path\n"; 15 | @names = (split(/\0/, $in{'name[]'})); 16 | foreach $name (@names) { 17 | print $fh "$name\n"; 18 | } 19 | close($fh); 20 | print Mojo::JSON::to_json({'success' => 1, 'text' => scalar(@names)." $text{'copied_to_buffer'}"}); 21 | } else { 22 | print Mojo::JSON::to_json({'error' => "$text{'error_writing_file'} .buffer $!"}); 23 | } 24 | -------------------------------------------------------------------------------- /unauthenticated/js/chmod-calculator.min.js: -------------------------------------------------------------------------------- 1 | function pad(e,t){return("0000"+e).substr(-t)}function calc(e,t){var a=parseInt(e.form.permissions.value,8);var i=parseInt(t,8);if(e.checked){a|=i}else{a^=i}e.form.permissions.value=pad(a.toString(8),4)}function octalchange(e){form=e.form;curval=e.value;var t=curval.charAt(0);var a=curval.charAt(1);var i=curval.charAt(2);var r=curval.charAt(3);form.extra4.checked=t&4;form.extra2.checked=t&2;form.extra1.checked=t&1;form.owner4.checked=a&4;form.owner2.checked=a&2;form.owner1.checked=a&1;form.group4.checked=i&4;form.group2.checked=i&2;form.group1.checked=i&1;form.other4.checked=r&4;form.other2.checked=r&2;form.other1.checked=r&1} -------------------------------------------------------------------------------- /download.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | #use File::Basename; 7 | #use Cwd 'abs_path'; 8 | 9 | &ReadParse(); 10 | 11 | get_paths(); 12 | 13 | my $file = $cwd.'/'.sanitize($in{'file'}); 14 | my $size = -s "$file"; 15 | #(my $name, my $dir, my $ext) = fileparse($file, qr/\.[^.]*/); 16 | print "Content-Type: application/x-download\n"; 17 | print "Content-Disposition: attachment; filename=\"$in{'file'}\"\n"; 18 | print "Content-Length: $size\n\n"; 19 | open (FILE, "< $file") or die "can't open $file: $!"; 20 | binmode FILE; 21 | local $/ = \102400; 22 | while () { 23 | print $_; 24 | } 25 | close FILE; 26 | -------------------------------------------------------------------------------- /rename.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | &ReadParse(); 5 | 6 | if(!$in{'name'}) { 7 | print("{\"error\": \"1\"}"); 8 | } 9 | 10 | get_paths(); 11 | 12 | # Remove exploiting "../" in new file names 13 | $name = $in{'name'}; 14 | $name =~ s/\.\.//g; 15 | $name = &simplify_path($name); 16 | 17 | print_ajax_header(); 18 | 19 | if ($name && -e "$cwd/$name") { 20 | print("{\"error\": \"$name $text{'error_exists'}\"}"); 21 | } else { 22 | if($name && &rename_file($cwd.'/'.$in{'file'}, $cwd.'/'.$name)) { 23 | print '{"success": "1"}'; 24 | } else { 25 | print("{\"error\": \"$text{'error_rename'} $in{'file'}: $!\"}"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /save_file.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | my @errors; 12 | 13 | # Remove exploiting of "../" in parameters 14 | $file = $in{'name'}; 15 | $file =~ s/\.\.//g; 16 | $file = &simplify_path($file); 17 | 18 | # Correct end of lines 19 | $data = $in{'data'}; 20 | $data =~ s/\r\n/\n/g; 21 | if(open(SAVE, ">", $cwd.'/'.$file)) { 22 | print SAVE $data; 23 | close SAVE; 24 | } else { 25 | push @errors, "$text{'error_saving_file'} - $!"; 26 | } 27 | 28 | if (scalar(@errors) > 0) { 29 | print status('error', \@errors); 30 | } else { 31 | print status('success', 1); 32 | } 33 | -------------------------------------------------------------------------------- /create_folder.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | &ReadParse(); 5 | 6 | get_paths(); 7 | 8 | # Remove exploiting "../" in new file names 9 | $name = $in{'name'}; 10 | $name =~ s/\.\.//g; 11 | $name = &simplify_path($name); 12 | 13 | print_ajax_header(); 14 | 15 | if(!$in{'name'} || !defined($name)) { 16 | print("{\"error\": \"$text{'provide_folder_name'}\"}"); 17 | } else { 18 | if (-e "$cwd/$name") { 19 | print("{\"error\": \"$name $text{'error_exists'}\"}"); 20 | } else { 21 | if( mkdir ("$cwd/$name", oct(755)) ) { 22 | print status('success', 1); 23 | } else { 24 | print status('error', "$name - $text{'error_create'} $!"); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /create_file.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | &ReadParse(); 5 | 6 | get_paths(); 7 | 8 | # Remove exploiting "../" in new file names 9 | $name = $in{'name'}; 10 | $name =~ s/\.\.//g; 11 | $name = &simplify_path($name); 12 | 13 | print_ajax_header(); 14 | 15 | if(!$in{'name'} || !defined($name)) { 16 | print("{\"error\": \"$text{'provide_file_name'}\"}"); 17 | } else { 18 | if (-e "$cwd/$name") { 19 | print("{\"error\": \"$name $text{'error_exists'}\"}"); 20 | } else { 21 | if (open my $fh, "> $cwd/$name") { 22 | close($fh); 23 | print status('success', 1); 24 | } else { 25 | print status('error', "$name - $text{'error_create'} $!"); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /get_img.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use File::MimeInfo; 6 | 7 | &ReadParse(); 8 | 9 | get_paths(); 10 | 11 | # Remove exploiting of "../" in file names 12 | $name = $in{'name'}; 13 | $name =~ s/\.\.//g; 14 | $name = &simplify_path($name); 15 | 16 | if( !defined($name) ){ 17 | 18 | print_ajax_header(); 19 | print status('error', $text{'failed_to_read_file'}); 20 | exit; 21 | } 22 | 23 | my $img = $cwd.'/'.$name; 24 | my $size = -s "$img"; 25 | my $type = mimetype($img); 26 | 27 | print "Content-Type: $type\n"; 28 | print "Content-Length: $size\n\n"; 29 | open (FILE, "< $img") or exit;#die "can't open $img: $!"; 30 | binmode FILE; 31 | local $/ = \102400; 32 | while () { 33 | print $_; 34 | } 35 | close FILE; 36 | -------------------------------------------------------------------------------- /get_size.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use File::MimeInfo; 6 | use Mojo::JSON; 7 | 8 | &ReadParse(); 9 | get_paths(); 10 | 11 | print_ajax_header(); 12 | 13 | $size = 0; 14 | @names = (split(/\0/, $in{'name[]'})); 15 | foreach $name(@names) { 16 | next if $name eq ''; 17 | # Remove exploiting of "../" in file parameters 18 | $name =~ s/\.\.//g; 19 | $name = &simplify_path($name); 20 | 21 | if($name && -d "$cwd/$name") { 22 | $size = $size + &recursive_disk_usage("$cwd/$name"); 23 | } elsif( $name ) { 24 | my @fstat = stat "$cwd/$name"; 25 | $size = $size + $fstat[7]; 26 | } else { 27 | $size = undef; 28 | } 29 | } 30 | print Mojo::JSON::to_json({'success' => 1, 'data' => $size}); 31 | -------------------------------------------------------------------------------- /unauthenticated/css/pnotify-filemin.min.css: -------------------------------------------------------------------------------- 1 | .ui-pnotify.filemin .ui-pnotify-container{background-color:#404040!important;background-image:none!important;border:none!important;border-radius:4px}.ui-pnotify.filemin .ui-pnotify-title{font-size:16px}.ui-pnotify.filemin .ui-pnotify-text{font-size:14px}.ui-pnotify.filemin .ui-pnotify-title,.ui-pnotify.filemin .ui-pnotify-text{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#fff!important;padding-left:50px!important;line-height:1!important}.ui-pnotify.filemin .ui-pnotify-icon{float:left}.ui-pnotify.filemin .fa{margin:3px;height:33px;font-size:33px}.brighttheme-success{color:#5cb85c}.brighttheme-error{color:#d9534f}.brighttheme-notice{color:#f0ad4e}.brighttheme .ui-pnotify-action-button{color:#fff;border-radius:4px;transition:ease background .3s}.brighttheme .ui-pnotify-action-button:hover{background:#aaa} -------------------------------------------------------------------------------- /bookmark.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | $confdir = get_config_dir(); 12 | my @errors; 13 | 14 | if(!-e $confdir) { 15 | mkdir $confdir or push @error, "$text{'error_creating_conf'}: $!"; 16 | } 17 | 18 | if(!-e "$confdir/.bookmarks") { 19 | utime time, time, "$configdir/.bookmarks"; 20 | } 21 | 22 | $bookmarks = &read_file_lines($confdir.'/.bookmarks'); 23 | # Check if already exists 24 | my %h_bookmarks = map { $_ => 1 } @$bookmarks; 25 | if(exists($h_bookmarks{$path})) { 26 | push @errors, $text{'bookmark_exists'}; 27 | } else { 28 | push @$bookmarks, $path; 29 | } 30 | #@bookmarks = sort(@bookmarks); 31 | &flush_file_lines("$confdir/.bookmarks"); 32 | 33 | if (scalar(@errors) > 0) { 34 | print status('error', \@errors); 35 | } else { 36 | print status('success', 1); 37 | } 38 | -------------------------------------------------------------------------------- /list_archive.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use File::MimeInfo; 6 | use Mojo::JSON; 7 | 8 | &ReadParse(); 9 | get_paths(); 10 | 11 | if(!$in{'file'}) { 12 | print Mojo::JSON::to_json({'error' => $text{'provide_correct_parameters'}}); 13 | exit; 14 | } 15 | 16 | # Remove exploiting "../" 17 | $file = $in{'file'}; 18 | $file =~ s/\.\.//g; 19 | $file = &simplify_path($file); 20 | 21 | print_ajax_header(); 22 | 23 | $archive_type = mimetype($cwd.'/'.$file); 24 | 25 | my $result; 26 | my $command; 27 | 28 | if ($archive_type eq 'application/zip') { 29 | $command = "unzip -l ".quotemeta("$cwd/$file")." 2>&1"; 30 | $result = `$command`; 31 | print Mojo::JSON::to_json({'success' => $result}); 32 | } elsif (index($archive_type, "tar") != -1 || index($archive_type, "gzip") != -1) { 33 | $command = "tar tvf ".quotemeta("$cwd/$file")." 2>&1"; 34 | $result = `$command`; 35 | # $result = system($command); 36 | print Mojo::JSON::to_json({'success' => $result}); 37 | } else { 38 | print Mojo::JSON::to_json({'error' => "$archive_type $text{'error_archive_type_not_supported'}"}); 39 | } 40 | -------------------------------------------------------------------------------- /extract.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use File::MimeInfo; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | if(!$in{'file'}) { 11 | print encode_json({'error' => $text{'provide_correct_parameters'}}); 12 | exit; 13 | } 14 | 15 | # Remove exploiting "../" 16 | $file = $in{'file'}; 17 | $file =~ s/\.\.//g; 18 | $file = &simplify_path($file); 19 | 20 | if( !defined($file) ){ 21 | 22 | print_ajax_header(); 23 | print status('error', "$archive_type $text{'error_archive_type_not_supported'}"); 24 | exit; 25 | } 26 | 27 | print_ajax_header(); 28 | 29 | $archive_type = mimetype($cwd.'/'.$file); 30 | 31 | if ($archive_type eq 'application/zip') { 32 | &backquote_logged("unzip -o ".quotemeta("$cwd/$file"). 33 | " -d ".quotemeta($cwd)); 34 | print status('success', 1); 35 | } elsif (index($archive_type, "tar") != -1 || index($archive_type, "gzip") != -1) { 36 | &backquote_logged("tar xf ".quotemeta("$cwd/$file"). 37 | " -C ".quotemeta($cwd)); 38 | print status('success', 1); 39 | } else { 40 | print status('error', "$archive_type $text{'error_archive_type_not_supported'}"); 41 | } 42 | -------------------------------------------------------------------------------- /getfacl.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | # Remove exploiting "../" 12 | $name = $in{'name'}; 13 | $name =~ s/\.\.//g; 14 | $name = &simplify_path($name); 15 | 16 | # my @errors; 17 | 18 | # $command = "getfacl ".quotemeta("$cwd$name")." 2>&1"; 19 | # $result = `$command`; 20 | 21 | # print Mojo::JSON::to_json({'success' => "$result"}); 22 | 23 | $out = &backquote_command("getfacl ".quotemeta("$cwd$name")." 2>&1"); 24 | if ($?) { 25 | print $out,"\n"; 26 | } 27 | else { 28 | foreach $l (split(/\n/, $out)) { 29 | $l =~ s/#.*$//; 30 | $l =~ s/\s+$//; 31 | push(@rv, $l) if ($l =~ /\S/); 32 | } 33 | if (!@rv) { 34 | print "Filesystem does not support ACLs\n"; 35 | } 36 | else { 37 | print "\n"; 38 | foreach $l (@rv) { 39 | # $l =~ s/:/ /g; 40 | if (index($l, "user") != -1) { 41 | print $l,"\n"; 42 | } 43 | } 44 | } 45 | } 46 | 47 | -------------------------------------------------------------------------------- /symlink.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | if(open(my $fh, "<", &get_paste_buffer_file())) { 12 | my @arr = <$fh>; 13 | close($fh); 14 | my $act = $arr[0]; 15 | my $dir = $arr[1]; 16 | chomp($act); 17 | chomp($dir); 18 | $dir =~ s/\.\.//g; 19 | $dir = &simplify_path($dir); 20 | my @errors; 21 | for(my $i = 2;$i <= scalar(@arr)-1;$i++) { 22 | chomp($arr[$i]); 23 | $arr[$i] =~ s/\.\.//g; 24 | $arr[$i] = &simplify_path($arr[$i]); 25 | my @p = split('/', $arr[$i]); 26 | my $name = pop(@p); 27 | if (-e "$cwd/$name") { 28 | push @errors, "$cwd/$name $text{'error_exists'}"; 29 | } else { 30 | system("ln -s ".quotemeta($base.$arr[$i]). 31 | " ".quotemeta("$cwd/$name")) == 0 or push @errors, $base.$arr[$i]." $text{'error_symlink'} $!"; 32 | } 33 | } 34 | if (scalar(@errors) > 0) { 35 | print status('error', \@errors); 36 | } else { 37 | print status('success', 1); 38 | } 39 | } else { 40 | print("{\"error\": \" Error .buffer $!\"}"); 41 | } 42 | -------------------------------------------------------------------------------- /unauthenticated/js/chmod-calculator.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Chmod Calculator for Filemin 3 | */ 4 | 5 | function pad(num, size) { 6 | return ('0000' + num).substr(-size); 7 | } 8 | 9 | function calc (sender, number) { 10 | var curval = parseInt(sender.form.permissions.value, 8); 11 | var num = parseInt(number, 8); 12 | if (sender.checked) { 13 | curval |= num; 14 | } else { 15 | curval ^= num; 16 | } 17 | sender.form.permissions.value = pad((curval).toString(8), 4); 18 | } 19 | 20 | function octalchange(sender) { 21 | form = sender.form; 22 | curval = sender.value; 23 | var extra = curval.charAt(0); 24 | var owner = curval.charAt(1); 25 | var group = curval.charAt(2); 26 | var other = curval.charAt(3); 27 | 28 | form.extra4.checked = extra & 4; 29 | form.extra2.checked = extra & 2; 30 | form.extra1.checked = extra & 1; 31 | form.owner4.checked = owner & 4; 32 | form.owner2.checked = owner & 2; 33 | form.owner1.checked = owner & 1; 34 | form.group4.checked = group & 4; 35 | form.group2.checked = group & 2; 36 | form.group1.checked = group & 1; 37 | form.other4.checked = other & 4; 38 | form.other2.checked = other & 2; 39 | form.other1.checked = other & 1; 40 | } 41 | -------------------------------------------------------------------------------- /unauthenticated/css/pnotify-filemin.css: -------------------------------------------------------------------------------- 1 | .ui-pnotify.filemin .ui-pnotify-container { 2 | background-color: #404040 !important; 3 | background-image: none !important; 4 | border: none !important; 5 | border-radius: 4px; 6 | } 7 | .ui-pnotify.filemin .ui-pnotify-title { 8 | font-size: 16px; 9 | } 10 | 11 | .ui-pnotify.filemin .ui-pnotify-text { 12 | font-size: 14px; 13 | } 14 | 15 | .ui-pnotify.filemin .ui-pnotify-title, .ui-pnotify.filemin .ui-pnotify-text { 16 | font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; 17 | color: #fff !important; 18 | padding-left: 50px !important; 19 | line-height: 1 !important; 20 | } 21 | 22 | .ui-pnotify.filemin .ui-pnotify-icon { 23 | float: left; 24 | } 25 | 26 | .ui-pnotify.filemin .fa { 27 | margin: 3px; 28 | height: 33px; 29 | font-size: 33px; 30 | } 31 | 32 | .brighttheme-success { 33 | color: #5cb85c; 34 | } 35 | 36 | .brighttheme-error { 37 | color: #d9534f; 38 | } 39 | 40 | .brighttheme-notice { 41 | color: #f0ad4e; 42 | } 43 | 44 | .brighttheme .ui-pnotify-action-button { 45 | color: #fff; 46 | border-radius: 4px; 47 | transition: ease background 0.3s; 48 | } 49 | 50 | .brighttheme .ui-pnotify-action-button:hover { 51 | background: #aaa; 52 | } 53 | -------------------------------------------------------------------------------- /http_download.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | my $mode; 12 | my @errors; 13 | my ($host, $port, $page, $ssl) = &parse_http_url($in{'link'}); 14 | 15 | if (!$host || !$in{'link'}) { 16 | # Not an HTTP or FTP URL 17 | push @errors, $text{'error_invalid_uri'}; 18 | } else { 19 | # Looks like a valid URL 20 | my $file = $page; 21 | $file =~ s/^.*\///; 22 | $file ||= "index.html"; 23 | 24 | if(-e "$cwd/$file") { 25 | push @errors, "$file $text{'file_already_exists'} $path"; 26 | } else { 27 | if ($ssl == 0 || $ssl == 1) { 28 | # HTTP or HTTPS download 29 | &http_download($host, $port, $page, "$cwd/$file", undef, 30 | \&filemin_progress_callback, $ssl, 31 | $in{'username'}, $in{'password'}); 32 | } else { 33 | # Actually an FTP download 34 | &ftp_download($host, $page, "$cwd/$file", undef, 35 | \&filemin_progress_callback, 36 | $in{'username'}, $in{'password'}, $port); 37 | } 38 | } 39 | } 40 | 41 | if (scalar(@errors) > 0) { 42 | print status('error', \@errors); 43 | } 44 | -------------------------------------------------------------------------------- /chown.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | my @errors; 11 | 12 | 13 | if(!$in{'owner'} or !$in{'group'}) { 14 | print encode_json({'error' => $text{'provide_correct_parameters'}}); 15 | exit; 16 | } 17 | 18 | (my $login, my $pass, my $uid, my $gid) = getpwnam($in{'owner'}); 19 | my $grid = getgrnam($in{'group'}); 20 | my $recursive; 21 | if($in{'recursive'}) { $recursive = '-R'; } else { $recursive = ''; } 22 | 23 | if(! defined $login) { 24 | push @errors, "$in{'owner'} $text{'error_user_not_found'}"; 25 | } 26 | 27 | if(! defined $grid) { 28 | push @errors, "$in{'group'} $text{'error_group_not_found'}"; 29 | } 30 | 31 | if (scalar(@errors) > 0) { 32 | print status('error', \@errors); 33 | } else { 34 | foreach $name (split(/\0/, $in{'name'})) { 35 | $name =~ s/\.\.//g; 36 | $name = &simplify_path($name); 37 | if(system_logged("chown $recursive $uid:$grid ".quotemeta("$cwd/$name")) != 0) { 38 | push @errors, "$name - $text{'error_chown'}: $?"; 39 | } 40 | } 41 | if (scalar(@errors) > 0) { 42 | print status('error', \@errors); 43 | } else { 44 | print status('success', 1); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /compress.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use Mojo::JSON; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | print_ajax_header(); 11 | my @errors; 12 | 13 | # Exploits, exploits everywhere 14 | if(!$in{'archivename'} || ($in{'method'} ne 'tar' && $in{'method'} ne 'zip')) { 15 | print Mojo::JSON::to_json({'error' => $text{'provide_correct_parameters'}}); 16 | exit; 17 | } 18 | 19 | # Remove exploiting "../" in new file names 20 | $archivename = $in{'archivename'}; 21 | $archivename =~ s/\.\.//g; 22 | $archivename = &simplify_path($archivename); 23 | 24 | my $command; 25 | 26 | if($in{'method'} eq 'tar') { 27 | $command = "tar czf ".quotemeta("$cwd/$archivename.tar.gz"). 28 | " -C ".quotemeta($cwd); 29 | } elsif($in{'method'} eq 'zip') { 30 | $command = "cd ".quotemeta($cwd)." && zip -r ". 31 | quotemeta("$cwd/$archivename.zip"); 32 | } 33 | 34 | foreach my $name(split(/\0/, $in{'name'})) 35 | { 36 | $name =~ s/\.\.//g; 37 | $name = &simplify_path($name) // next; # Missing/Invalid name - skip command 38 | $name =~ s/$in{'cwd'}\///ig; 39 | $command .= " ".quotemeta($name); 40 | } 41 | 42 | system_logged($command); 43 | 44 | if (scalar(@errors) > 0) { 45 | print status('error', \@errors); 46 | } else { 47 | print status('success', 1); 48 | } 49 | -------------------------------------------------------------------------------- /update.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | &foreign_require("webmin", "webmin-lib.pl"); 5 | use version; 6 | 7 | &ReadParse(); 8 | 9 | &ui_print_unbuffered_header(); 10 | $webprefix = $gconfig{'webprefix'}; 11 | 12 | # Just in case 13 | if($remote_user eq 'root') { 14 | my $os = $gconfig{'os_type'}; 15 | my $version = $in{'version'}; 16 | my $flavour = $in{'flavour'}; 17 | if(index($os, 'linux') != -1) { 18 | $os = 'linux'; 19 | } elsif (index($os, 'freebsd') != -1) { 20 | $os = 'freebsd'; 21 | } else { 22 | &error('WHAT???'); 23 | } 24 | # my $url = "https://github.com/Real-Gecko/filemin/raw/master/distrib/filemin-$version.$os.wbm.gz"; 25 | my $url = "https://github.com/Real-Gecko/Filemin/releases/download/$version/filemin-$version.$os.$flavour.wbm.gz"; 26 | my $tempfile = transname(); 27 | my ($host, $port, $page, $ssl) = &parse_http_url($url); 28 | &http_download($host, $port, $page, $tempfile, undef, \&progress_callback, $ssl); 29 | $irv = &webmin::install_webmin_module($tempfile); 30 | if (!ref($irv)) { 31 | print &text('update_failed', $irv),"

\n"; 32 | } 33 | else { 34 | print &text('module_updated', "$irv->[0]->[0]", "$irv->[2]->[0]"),"\n"; 35 | print "Filemin"; 36 | } 37 | } 38 | 39 | &ui_print_footer("/", $text{'index'}); 40 | -------------------------------------------------------------------------------- /update_symlink.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | 8 | if(!$in{'name'}) { 9 | print("{\"error\": \"1\"}"); 10 | } 11 | 12 | my @errors; 13 | 14 | get_paths(); 15 | 16 | print_ajax_header(); 17 | 18 | # Remove exploiting "../" in new file names 19 | $name = $in{'name'}; 20 | $name =~ s/\.\.//g; 21 | $name = &simplify_path($name); 22 | 23 | $link = $in{'link'}; 24 | if(-e $link) { 25 | $target = $link; 26 | } elsif(-e "$cwd/$link") { 27 | $target = &simplify_path("$cwd/$link") 28 | } else { 29 | push @errors, $text{'invalid_symlink_target'}; 30 | } 31 | 32 | if($target) { 33 | my $error = 1; 34 | for $allowed_path (@allowed_paths) { 35 | if (&is_under_directory($allowed_path, $target) || 36 | $allowed_path =~ /^$target/) { 37 | $error = 0; 38 | } 39 | } 40 | if ($error) { 41 | push @errors, &text('notallowed', 42 | &html_escape($target), 43 | &html_escape(join(" , ", @allowed_paths))); 44 | } 45 | } 46 | 47 | if (!(scalar(@errors) > 0)) { 48 | my $command = "ln -sfn ".quotemeta($link)." ".quotemeta("$cwd/$name"); 49 | system($command) == 0 or push @errors, $target." $text{'error_symlink'} $!"; 50 | } 51 | 52 | if (scalar(@errors) > 0) { 53 | print status('error', \@errors); 54 | } else { 55 | print status('success', 1); 56 | } 57 | -------------------------------------------------------------------------------- /chcon.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | my @errors; 11 | 12 | if(!$in{'user'} or !$in{'role'} or !$in{'type'} or !$in{'level'}) { 13 | print encode_json({'error' => $text{'provide_correct_parameters'}}); 14 | exit; 15 | } 16 | 17 | # (my $login, my $pass, my $uid, my $gid) = getpwnam($in{'owner'}); 18 | # my $grid = getgrnam($in{'group'}); 19 | my $recursive; 20 | if($in{'recursive'}) { $recursive = '-R'; } else { $recursive = ''; } 21 | 22 | # if(! defined $login) { 23 | # push @errors, "$in{'owner'} $text{'error_user_not_found'}"; 24 | # } 25 | 26 | # if(! defined $grid) { 27 | # push @errors, "$in{'group'} $text{'error_group_not_found'}"; 28 | # } 29 | 30 | if (scalar(@errors) > 0) { 31 | print status('error', \@errors); 32 | } else { 33 | foreach $name (split(/\0/, $in{'name'})) { 34 | $name =~ s/\.\.//g; 35 | &simplify_path($name); 36 | if( 37 | system_logged( 38 | "chcon $recursive ".quotemeta($in{'user'}).":". 39 | quotemeta($in{'role'}).":". 40 | quotemeta($in{'type'}).":". 41 | quotemeta($in{'level'})." ". 42 | quotemeta("$cwd/$name") 43 | ) != 0) { 44 | push @errors, "$name - $text{'error_chown'}: $?"; 45 | } 46 | } 47 | if (scalar(@errors) > 0) { 48 | print status('error', \@errors); 49 | } else { 50 | print status('success', 1); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /filemin.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | # File manager written in perl 3 | 4 | require './filemin-lib.pl'; 5 | use lib './lib'; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | # Print header 11 | print "Content-Security-Policy: script-src 'self' cdnjs.cloudflare.com 'unsafe-inline'; frame-src 'self'\n"; 12 | print "Content-type: text/html; Charset=utf-8\n\n"; 13 | 14 | # Set 'root' icon 15 | if($base eq '/') { 16 | $root_icon = ""; 17 | } else { 18 | $root_icon = ""; 19 | } 20 | 21 | # Load user bookmarks 22 | $bookmarks = get_bookmarks(); 23 | 24 | # Transfer Filemin locale to JSON 25 | my $user = $remote_user_info[0]; 26 | my $language; 27 | 28 | if($gconfig{'lang_'.$user}) { 29 | $language = $gconfig{'lang_'.$user} 30 | } else { 31 | $language = $gconfig{'lang'}; 32 | } 33 | 34 | %user_locale = (); 35 | %en_locale = (); 36 | 37 | &read_file_cached("./lang/en", \%en_locale); 38 | 39 | if(-e "./lang/$language") { 40 | &read_file_cached("./lang/$language", \%user_locale); 41 | } 42 | 43 | # Fill up untranslated strings with "en" strings 44 | for my $key(keys %en_locale) { 45 | if(!exists $user_locale{$key}) { 46 | $user_locale{$key} = $en_locale{$key}; 47 | } 48 | } 49 | 50 | $text_to_js = Mojo::JSON::to_json(\%user_locale); 51 | 52 | # Load interface templates 53 | $main_menu = get_template('main_menu.html'); 54 | $context_menu = get_template('context_menu.html'); 55 | $context_menu_search = get_template('context_menu_search.html'); 56 | $ dialogs = get_template('dialogs.html'); 57 | 58 | # Print main interface 59 | print_template('index.html'); 60 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------- 2 | Copyright (c) Alexandr Bezenkov 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions 7 | are met: 8 | 1. Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 3. Neither the name of the developer nor the names of contributors 14 | may be used to endorse or promote products derived from this software 15 | without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND 18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | ARE DISCLAIMED. IN NO EVENT SHALL THE DEVELOPER OR CONTRIBUTORS BE LIABLE 21 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 | SUCH DAMAGE. 28 | --------------------------------------------------------- 29 | 30 | -------------------------------------------------------------------------------- /linux.cdn.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | FILES="*.cgi" 3 | TGDIR="./upload/filemin" 4 | DISTR="./upload" 5 | mkdir -p $TGDIR 6 | mkdir -p $TGDIR/unauthenticated 7 | mkdir -p $TGDIR/unauthenticated/js 8 | mkdir -p $TGDIR/unauthenticated/css 9 | mkdir -p $TGDIR/unauthenticated/templates 10 | cp -R images $TGDIR 11 | cp -R lang $TGDIR 12 | cp -R lib $TGDIR 13 | cp -R unauthenticated/js/*.min.js $TGDIR/unauthenticated/js 14 | cp -R unauthenticated/css/*.min.css $TGDIR/unauthenticated/css 15 | cp filemin-updater.tar.gz $TGDIR/unauthenticated 16 | 17 | cp CHANGELOG.md $TGDIR 18 | cp LICENCE $TGDIR 19 | cp README.md $TGDIR 20 | cp acl_security.pl $TGDIR 21 | # cp postinstall.pl $TGDIR 22 | # cp uninstall.pl $TGDIR 23 | cp config $TGDIR 24 | cp config.info $TGDIR 25 | cp defaultacl $TGDIR 26 | cp filemin-lib.pl $TGDIR 27 | sed -e "s/flavour=full/flavour=cdn/g" "module.info" > "$TGDIR/module.info" 28 | 29 | for f in $FILES 30 | do 31 | if [ -f $f -a -r $f ]; then 32 | cp $f "$TGDIR/$f" 33 | else 34 | echo "Error: Cannot read $f" 35 | fi 36 | done 37 | 38 | FILES="unauthenticated/templates/*.html" 39 | 40 | for f in $FILES 41 | do 42 | if [ -f $f -a -r $f ]; then 43 | sed -e "s/filemin\./filemin\.min\./g" -e "s/chmod-calculator\./chmod-calculator\.min\./g" -e "s/spec-ops\./spec-ops\.min\./g" "$f" > "$TGDIR/$f" 44 | else 45 | echo "Error: Cannot read $f" 46 | fi 47 | done 48 | 49 | while IFS='=' read -r key value; do 50 | case $key in 51 | version) 52 | VERSION="$value" 53 | ;; 54 | esac 55 | done < module.info 56 | 57 | echo "Packing Linux CDN version $VERSION" 58 | 59 | cd $DISTR 60 | tar -zcf filemin-$VERSION.linux.cdn.wbm.gz filemin 61 | cd ../ 62 | rm -rf $TGDIR 63 | -------------------------------------------------------------------------------- /download_multi.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | use Mojo::JSON; 6 | 7 | &ReadParse(); 8 | get_paths(); 9 | 10 | # Exploits, exploits everywhere 11 | if(!$in{'archivename'} || ($in{'method'} ne 'tar' && $in{'method'} ne 'zip')) { 12 | print Mojo::JSON::to_json({'error' => $text{'provide_correct_parameters'}}); 13 | exit; 14 | } 15 | 16 | # Prevent exploiting "../" 17 | $archivename = $in{'archivename'}; 18 | $archivename =~ s/\.\.//g; 19 | $archivename = &simplify_path($archivename); 20 | 21 | if( !$archivename ){ 22 | 23 | print status('error', $text{'failed_to_read_file'}); 24 | } 25 | 26 | my $command; 27 | 28 | if($in{'method'} eq 'tar') { 29 | $archivename .= ".tar.gz"; 30 | } elsif($in{'method'} eq 'zip') { 31 | $archivename .= ".zip"; 32 | } 33 | 34 | my $tempfile = transname(); 35 | 36 | if($in{'method'} eq 'tar') { 37 | $command = "tar czf ".quotemeta($tempfile). 38 | " -C ".quotemeta($cwd); 39 | } elsif($in{'method'} eq 'zip') { 40 | $command = "cd ".quotemeta($cwd)." && zip -r ". 41 | quotemeta($tempfile); 42 | } 43 | 44 | foreach my $name(split(/\0/, $in{'name'})) 45 | { 46 | $name = sanitize($name); 47 | $name =~ s/$in{'cwd'}\///ig; 48 | $command .= " ".quotemeta($name); 49 | } 50 | 51 | system_logged($command); 52 | 53 | my $size = -s $tempfile; 54 | 55 | print "Content-Type: application/x-download\n"; 56 | print "Content-Disposition: attachment; filename=\"$archivename\"\n"; 57 | print "Content-Length: $size\n\n"; 58 | open (FILE, '<', $tempfile) or die "can't open $tempfile: $!"; 59 | binmode FILE; 60 | local $/ = \102400; 61 | while () { 62 | print $_; 63 | } 64 | close FILE; 65 | -------------------------------------------------------------------------------- /acl_security.pl: -------------------------------------------------------------------------------- 1 | require 'filemin-lib.pl'; 2 | 3 | sub acl_security_form { 4 | my ($access) = @_; 5 | 6 | # Directories the user can access 7 | print &ui_table_row($text{'acl_allowed_paths'}, 8 | ui_textarea("allowed_paths", 9 | join("\n", split(/\s+/, $access->{'allowed_paths'})), 10 | 10, 80, undef, undef, "style='width: 100%'"), 2); 11 | 12 | # Run as Unix user 13 | print &ui_table_row($text{'acl_work_as'}, 14 | ui_radio_table("user_mode", $access->{'work_as_root'} ? 0 : 15 | $access->{'work_as_user'} ? 2 : 1, 16 | [ [ 0, $text{'acl_root'} ], 17 | [ 1, $text{'acl_same'} ], 18 | [ 2, $text{'acl_user'}, 19 | ui_user_textbox("acl_user", $access->{'work_as_user'}) ] ]), 20 | 3); 21 | 22 | # Upload max 23 | print &ui_table_row($text{'acl_max'}, 24 | &ui_opt_textbox("max", $access->{'max'}, 10, $text{'acl_unlimited'}). 25 | " ".$text{'acl_bytes'}, 3); 26 | } 27 | 28 | sub acl_security_save { 29 | my ($access, $in) = @_; 30 | local @allowed_paths = split(/\s+/, $in->{'allowed_paths'}); 31 | if (scalar(@allowed_paths) == 0) { &error("No allowed paths defined"); } 32 | for $path(@allowed_paths) { 33 | if (!-e $path && $path ne '$HOME' && $path ne '$ROOT') { 34 | &error(&text('acl_epath', &html_escape($path))); 35 | } 36 | } 37 | $access->{'allowed_paths'} = join(" ", @allowed_paths); 38 | 39 | if ($in->{'user_mode'} == 0) { 40 | $access->{'work_as_root'} = 1; 41 | $access->{'work_as_user'} = undef; 42 | } elsif ($in->{'user_mode'} == 1) { 43 | $access->{'work_as_root'} = 0; 44 | $access->{'work_as_user'} = undef; 45 | } else { 46 | defined(getpwnam($in->{'acl_user'})) || &error($text{'acl_euser'}); 47 | $access->{'work_as_root'} = 0; 48 | $access->{'work_as_user'} = $in->{'acl_user'}; 49 | } 50 | $access->{'max'} = $in->{'max_def'} ? undef : $in{'max'}; 51 | } 52 | -------------------------------------------------------------------------------- /linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | OLD="https:\/\/cdnjs.cloudflare.com\/ajax" 3 | NEW="unauthenticated" 4 | FILES="*.cgi" 5 | TGDIR="./upload/filemin" 6 | DISTR="./upload" 7 | mkdir -p $TGDIR 8 | mkdir -p $TGDIR/unauthenticated 9 | mkdir -p $TGDIR/unauthenticated/js 10 | mkdir -p $TGDIR/unauthenticated/css 11 | mkdir -p $TGDIR/unauthenticated/templates 12 | cp -R images $TGDIR 13 | cp -R lang $TGDIR 14 | cp -R lib $TGDIR 15 | cp -R unauthenticated/libs $TGDIR/unauthenticated 16 | cp -R unauthenticated/css/*.min.css $TGDIR/unauthenticated/css 17 | cp filemin-updater.tar.gz $TGDIR/unauthenticated 18 | 19 | cp CHANGELOG.md $TGDIR 20 | cp LICENCE $TGDIR 21 | cp README.md $TGDIR 22 | cp acl_security.pl $TGDIR 23 | # cp postinstall.pl $TGDIR 24 | # cp uninstall.pl $TGDIR 25 | cp config $TGDIR 26 | cp config.info $TGDIR 27 | cp defaultacl $TGDIR 28 | cp filemin-lib.pl $TGDIR 29 | cp module.info $TGDIR 30 | 31 | for f in $FILES 32 | do 33 | if [ -f $f -a -r $f ]; then 34 | cp $f "$TGDIR/$f" 35 | else 36 | echo "Error: Cannot read $f" 37 | fi 38 | done 39 | 40 | FILES="unauthenticated/templates/*.html" 41 | 42 | for f in $FILES 43 | do 44 | if [ -f $f -a -r $f ]; then 45 | sed -e "s/$OLD/$NEW/g" -e "s/filemin\./filemin\.min\./g" -e "s/chmod-calculator\./chmod-calculator\.min\./g" -e "s/spec-ops\./spec-ops\.min\./g" "$f" > "$TGDIR/$f" 46 | else 47 | echo "Error: Cannot read $f" 48 | fi 49 | done 50 | 51 | FILES="unauthenticated/js/*.min.js" 52 | 53 | for f in $FILES 54 | do 55 | if [ -f $f -a -r $f ]; then 56 | sed "s/$OLD/$NEW/g" "$f" > "$TGDIR/$f" 57 | else 58 | echo "Error: Cannot read $f" 59 | fi 60 | done 61 | 62 | while IFS='=' read -r key value; do 63 | case $key in 64 | version) 65 | VERSION="$value" 66 | ;; 67 | esac 68 | done < module.info 69 | 70 | echo "Packing Linux version $VERSION" 71 | 72 | cd $DISTR 73 | # tar -zcf filemin-$VERSION.linux.wbm.gz filemin 74 | tar -zcf filemin-$VERSION.linux.full.wbm.gz filemin 75 | cd ../ 76 | perl makemoduledeb.pl --target-dir $DISTR $TGDIR 77 | rm -rf $TGDIR 78 | -------------------------------------------------------------------------------- /linux.builtin.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | OLD="https:\/\/cdnjs.cloudflare.com\/ajax" 3 | NEW="unauthenticated" 4 | FILES="*.cgi" 5 | TGDIR="./upload/filemin" 6 | DISTR="./upload" 7 | mkdir -p $TGDIR 8 | mkdir -p $TGDIR/unauthenticated 9 | mkdir -p $TGDIR/unauthenticated/js 10 | mkdir -p $TGDIR/unauthenticated/css 11 | mkdir -p $TGDIR/unauthenticated/templates 12 | cp -R images $TGDIR 13 | cp -R lang $TGDIR 14 | cp -R lib $TGDIR 15 | cp -R unauthenticated/libs $TGDIR/unauthenticated 16 | cp -R unauthenticated/css/*.min.css $TGDIR/unauthenticated/css 17 | cp filemin-updater.tar.gz $TGDIR/unauthenticated 18 | 19 | cp CHANGELOG.md $TGDIR 20 | cp LICENCE $TGDIR 21 | cp README.md $TGDIR 22 | cp acl_security.pl $TGDIR 23 | # cp postinstall.pl $TGDIR 24 | # cp uninstall.pl $TGDIR 25 | cp config $TGDIR 26 | cp config.info $TGDIR 27 | cp defaultacl $TGDIR 28 | cp filemin-lib.pl $TGDIR 29 | sed -e "s/flavour=full/flavour=builtin/g" "module.info" > "$TGDIR/module.info" 30 | 31 | for f in $FILES 32 | do 33 | if [ -f $f -a -r $f ]; then 34 | cp $f "$TGDIR/$f" 35 | else 36 | echo "Error: Cannot read $f" 37 | fi 38 | done 39 | 40 | FILES="unauthenticated/templates/*.html" 41 | 42 | for f in $FILES 43 | do 44 | if [ -f $f -a -r $f ]; then 45 | sed -e "s/$OLD/$NEW/g" -e "s/filemin\./filemin\.min\./g" -e "s/chmod-calculator\./chmod-calculator\.min\./g" -e "s/spec-ops\./spec-ops\.min\./g" "$f" > "$TGDIR/$f" 46 | else 47 | echo "Error: Cannot read $f" 48 | fi 49 | done 50 | 51 | FILES="unauthenticated/js/*.min.js" 52 | 53 | for f in $FILES 54 | do 55 | if [ -f $f -a -r $f ]; then 56 | sed "s/$OLD/$NEW/g" "$f" > "$TGDIR/$f" 57 | else 58 | echo "Error: Cannot read $f" 59 | fi 60 | done 61 | 62 | while IFS='=' read -r key value; do 63 | case $key in 64 | version) 65 | VERSION="$value" 66 | ;; 67 | esac 68 | done < module.info 69 | 70 | echo "Packing Linux builtin version $VERSION" 71 | mv -f $TGDIR/filemin.cgi $TGDIR/index.cgi 72 | 73 | cd $DISTR 74 | tar -zcf filemin-$VERSION.linux.builtin.wbm.gz filemin 75 | cd ../ 76 | rm -rf $TGDIR 77 | -------------------------------------------------------------------------------- /freebsd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | OLD="bin\/perl" 3 | NEW="local\/bin\/perl" 4 | FILES="*.cgi" 5 | TGDIR="./upload/filemin" 6 | DISTR="./upload" 7 | mkdir -p $TGDIR 8 | mkdir -p $TGDIR/unauthenticated 9 | mkdir -p $TGDIR/unauthenticated/js 10 | mkdir -p $TGDIR/unauthenticated/css 11 | mkdir -p $TGDIR/unauthenticated/templates 12 | cp -R images $TGDIR 13 | cp -R lang $TGDIR 14 | cp -R lib $TGDIR 15 | cp -R unauthenticated/libs $TGDIR/unauthenticated 16 | cp -R unauthenticated/css/*.min.css $TGDIR/unauthenticated/css 17 | cp filemin-updater.bsd.tar.gz $TGDIR/unauthenticated/filemin-updater.tar.gz 18 | 19 | cp CHANGELOG.md $TGDIR 20 | cp LICENCE $TGDIR 21 | cp README.md $TGDIR 22 | cp acl_security.pl $TGDIR 23 | # cp postinstall.pl $TGDIR 24 | # cp uninstall.pl $TGDIR 25 | cp config $TGDIR 26 | cp config.info $TGDIR 27 | cp defaultacl $TGDIR 28 | cp filemin-lib.pl $TGDIR 29 | cp module.info $TGDIR 30 | 31 | for f in $FILES 32 | do 33 | if [ -f $f -a -r $f ]; then 34 | sed "s/$OLD/$NEW/g" "$f" > "$TGDIR/$f" 35 | else 36 | echo "Error: Cannot read $f" 37 | fi 38 | done 39 | 40 | OLD="https:\/\/cdnjs.cloudflare.com\/ajax" 41 | NEW="unauthenticated" 42 | 43 | FILES="unauthenticated/templates/*.html" 44 | 45 | for f in $FILES 46 | do 47 | if [ -f $f -a -r $f ]; then 48 | sed -e "s/$OLD/$NEW/g" -e "s/filemin\./filemin\.min\./g" -e "s/chmod-calculator\./chmod-calculator\.min\./g" -e "s/spec-ops\./spec-ops\.min\./g" "$f" > "$TGDIR/$f" 49 | else 50 | echo "Error: Cannot read $f" 51 | fi 52 | done 53 | 54 | FILES="unauthenticated/js/*.min.js" 55 | 56 | for f in $FILES 57 | do 58 | if [ -f $f -a -r $f ]; then 59 | sed "s/$OLD/$NEW/g" "$f" > "$TGDIR/$f" 60 | else 61 | echo "Error: Cannot read $f" 62 | fi 63 | done 64 | 65 | while IFS='=' read -r key value; do 66 | case $key in 67 | version) 68 | VERSION="$value" 69 | ;; 70 | esac 71 | done < module.info 72 | 73 | echo "Packing FreeBSD version $VERSION" 74 | 75 | cd $DISTR 76 | # tar -zcf filemin-$VERSION.freebsd.wbm.gz filemin 77 | tar -zcf filemin-$VERSION.freebsd.full.wbm.gz filemin 78 | cd ../ 79 | rm -rf $TGDIR 80 | -------------------------------------------------------------------------------- /paste.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | if(open(my $fh, "<", &get_paste_buffer_file())) { 12 | my @arr = <$fh>; 13 | close($fh); 14 | my $act = $arr[0]; 15 | my $dir = $arr[1]; 16 | chomp($act); 17 | chomp($dir); 18 | $dir =~ s/\.\.//g; 19 | $dir = &simplify_path($dir); 20 | my @errors; 21 | 22 | if ($cwd eq &simplify_path($base.$dir) & ($act eq "cut" || $in{'overwrite'})) { 23 | push @errors, $text{'error_pasting_nonsence'}; 24 | } else { 25 | for(my $i = 2;$i <= scalar(@arr)-1;$i++) { 26 | chomp($arr[$i]); 27 | $arr[$i] =~ s/\.\.//g; 28 | $arr[$i] = &simplify_path($arr[$i]); 29 | my @p = split('/', $arr[$i]); 30 | my $name = pop(@p); 31 | my $suggested_name; 32 | if ($in{'overwrite'}) { 33 | $suggested_name = $name; 34 | } else { 35 | $suggested_name = suggest_filename($cwd, $name); 36 | } 37 | if ($act eq "copy") { 38 | system("cp -r ".quotemeta($base.$arr[$i]). 39 | " ".quotemeta("$cwd/$suggested_name")) == 0 or push @errors, $base.$arr[$i]." $text{'error_copy'} $!"; 40 | } elsif ($act eq "cut") { 41 | system("mv ".quotemeta($base.$arr[$i]). 42 | " ".quotemeta("$cwd/$suggested_name")) == 0 or push @errors, $base.$arr[$i]." $text{'error_copy'} $!"; 43 | } 44 | } 45 | } 46 | if (scalar(@errors) > 0) { 47 | $result = ''; 48 | foreach $error(@errors) { 49 | $result.= "$error\\n"; 50 | } 51 | print Mojo::JSON::to_json({'error' => $result}); 52 | } else { 53 | my $success_text = ($act eq "copy") ? $text{'copy_complete'} : $text {'move_complete'}; 54 | print Mojo::JSON::to_json({'success' => 1, 'text' => $success_text, 'from' => $dir}); 55 | } 56 | } else { 57 | print Mojo::JSON::to_json({'error' => "Error .buffer $!"}); 58 | } 59 | -------------------------------------------------------------------------------- /filemin-updater/index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | use WebminCore; 4 | &init_config(); 5 | &foreign_require("webmin", "webmin-lib.pl"); 6 | 7 | my $vc = eval #102 fix 8 | { 9 | require version; 10 | version->import(); 11 | 1; 12 | }; 13 | 14 | $webprefix = $gconfig{'webprefix'}; 15 | 16 | &ui_print_unbuffered_header(undef, "Filemin Updater", "", undef, 1 , 0, 0); 17 | 18 | # Check for updates 19 | if($remote_user eq 'root' & $vc) { 20 | print $text{'checking_for_update'}; 21 | my $url = 'https://github.com/Real-Gecko/filemin/raw/master/module.info'; 22 | my $tempfile = transname(); 23 | my %remote_module_info = (); 24 | my %module_info = (); 25 | my ($host, $port, $page, $ssl) = &parse_http_url($url); 26 | &http_download($host, $port, $page, $tempfile, undef, undef, $ssl) 27 | &read_file($tempfile, \%remote_module_info); 28 | %module_info = &get_module_info('filemin'); 29 | my $remote = version->parse($remote_module_info{'version'}); 30 | my $local = version->parse($module_info{'version'}); 31 | my $flavour = $config{'flavour'}; 32 | if($local < $remote) { 33 | my $os = $gconfig{'os_type'}; 34 | if(index($os, 'linux') != -1) { 35 | $os = 'linux'; 36 | } elsif (index($os, 'freebsd') != -1){ 37 | $os = 'freebsd'; 38 | } else { 39 | &error('WHAT???'); 40 | } 41 | # my $url = "https://github.com/Real-Gecko/filemin/raw/master/distrib/filemin-$remote.$os.wbm.gz"; 42 | my $url = "https://github.com/Real-Gecko/Filemin/releases/download/$remote/filemin-$remote.$os.$flavour.wbm.gz"; 43 | my $tempfile = transname(); 44 | my ($host, $port, $page, $ssl) = &parse_http_url($url); 45 | &http_download($host, $port, $page, $tempfile, undef, \&progress_callback, $ssl); 46 | $irv = &webmin::install_webmin_module($tempfile); 47 | if (!ref($irv)) { 48 | print &text('update_failed', $irv),"

\n"; 49 | } 50 | else { 51 | print &text('module_updated', "$irv->[0]->[0]", "$irv->[2]->[0]"),"\n"; 52 | print "Filemin"; 53 | } 54 | } else { 55 | print $text{'module_up_to_date'}; 56 | }; 57 | } 58 | 59 | &ui_print_footer("/", $text{'index'}); 60 | -------------------------------------------------------------------------------- /unauthenticated/templates/context_menu_search.html: -------------------------------------------------------------------------------- 1 |

58 | -------------------------------------------------------------------------------- /unauthenticated/js/bootstrap-table-contextmenu.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author David Graham 3 | * @version v1.1.4 4 | * @link https://github.com/prograhammer/bootstrap-table-contextmenu 5 | */ 6 | !function(t){"use strict";t.extend(t.fn.bootstrapTable.defaults,{contextMenu:void 0,contextMenuTrigger:"right",contextMenuAutoClickRow:!0,contextMenuButton:void 0,beforeContextMenuRow:function(t,n,e){},onContextMenuItem:function(t,n){return!1},onContextMenuRow:function(t,n){return!1}}),t.fn.bootstrapTable.methods.push("showContextMenu"),t.extend(t.fn.bootstrapTable.Constructor.EVENTS,{"contextmenu-item.bs.table":"onContextMenuItem","contextmenu-row.bs.table":"onContextMenuRow"});var n=t.fn.bootstrapTable.Constructor,e=n.prototype.initBody;n.prototype.initBody=function(){e.apply(this,Array.prototype.slice.apply(arguments)),(this.options.contextMenu||this.options.contextMenuButton||this.options.beforeContextMenuRow)&&this.initContextMenu()},n.prototype.initContextMenu=function(){var n=this;("right"==n.options.contextMenuTrigger||"both"==n.options.contextMenuTrigger)&&n.$body.find("> tr[data-index]").off("contextmenu.contextmenu").on("contextmenu.contextmenu",function(e){var o=n.data[t(this).data("index")],i=n.options.beforeContextMenuRow.apply(this,[e,o,null]);return i!==!1&&n.showContextMenu({event:e}),!1}),("left"==n.options.contextMenuTrigger||"both"==n.options.contextMenuTrigger)&&n.$body.find("> tr[data-index]").off("click.contextmenu").on("click.contextmenu",function(e){var o=n.data[t(this).data("index")],i=n.options.beforeContextMenuRow.apply(this,[e,o,null]);return i!==!1&&n.showContextMenu({event:e}),!1}),"string"==typeof n.options.contextMenuButton&&n.$body.find("> tr[data-index]").find(n.options.contextMenuButton).off("click.contextmenu").on("click.contextmenu",function(e){var o=n.data[t(this).closest("tr[data-index]").data("index")],i=n.options.beforeContextMenuRow.apply(this,[e,o,this]);return i!==!1&&n.showContextMenu({event:e,buttonElement:this}),!1})},n.prototype.showContextMenu=function(n){function e(n,e,o,i){var u=t(window)[o](),c=t(window)[i](),r=n[o](),a=e+c;return e+r>u&&e>r&&(a-=r),a}if(!n||!n.event)return!1;if(n&&!n.contextMenu&&"string"!=typeof this.options.contextMenu)return!1;var o,i,u,c=this,r=t(n.event.target).closest("tr[data-index]"),a=c.data[r.data("index")];n&&!n.contextMenu&&"string"==typeof this.options.contextMenu&&(i=n.event.clientX,u=n.event.clientY,o=t(this.options.contextMenu)),n&&n.contextMenu&&(i=n.event.clientX,u=n.event.clientY,o=t(n.contextMenu)),n&&n.buttonElement&&(i=n.buttonElement.getBoundingClientRect().left,u=n.buttonElement.getBoundingClientRect().bottom),o.find("li").off("click.contextmenu").on("click.contextmenu",function(n){var e=c.data[o.data("index")];c.trigger("contextmenu-item",e,t(this))}),t(document).triggerHandler("click.contextmenu"),t(document).off("click.contextmenu").on("click.contextmenu",function(n){(c.pageX!=n.pageX||c.pageY!=n.pageY)&&(o.hide(),t(document).off("click.contextmenu"))}),c.pageX=n.event.pageX,c.pageY=n.event.pageY,o.data("index",r.data("index")).appendTo(t("body")).css({position:"absolute",left:e(o,i,"width","scrollLeft"),top:e(o,u,"height","scrollTop"),zIndex:1100}).show(),c.trigger("contextmenu-row",a,r),c.options.contextMenuAutoClickRow&&"right"==c.options.contextMenuTrigger&&c.trigger("click-row",a,r)}}(jQuery); -------------------------------------------------------------------------------- /TODO: -------------------------------------------------------------------------------- 1 | Clear filter on directory change 2 | 3 | - To do 4 | - To do 5 | - To do, to do, to do, to do, to dooo 6 | 7 | ,;|||||\ 8 | ___ |;|||:;:| 9 | /;,a.\\ |||||...._ 10 | |||@@@\\\ __----,'......~\_ ,---._ 11 | |||@@@@\\\,-~~~~::::::,'... _.----\_,' `. 12 | |||;aaa/,;;;;:::::::::: _.-': ;...._ ; 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 | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## File manager for Webmin written in Perl. 2 | Features modern GUI with the help of numerous JS and CSS libraries. Makes file management on [**Webmin**](https://github.com/webmin/webmin) controlled server much easier. 3 | 4 | %100 AJAX - NO page reloads. 5 | 6 | ### Libraries in use 7 | * [**jQuery**](https://github.com/jquery/jquery) 8 | * [**jQuery UI**](https://github.com/jquery/jquery-ui) 9 | * [**Bootstrap**](https://github.com/twbs/bootstrap) 10 | * [**Font Awesome**](https://github.com/FortAwesome/Font-Awesome) 11 | * [**Bootbox**](https://github.com/makeusabrew/bootbox) 12 | * [**Bootstrap Hover Dropdown Plugin**](https://github.com/CWSpear/bootstrap-hover-dropdown) 13 | * [**Bootstrap-submenu**](https://github.com/vsn4ik/bootstrap-submenu) 14 | * [**Bootstrap Table**](https://github.com/wenzhixin/bootstrap-table) 15 | * [**jQuery File Upload Plugin**](https://github.com/blueimp/jQuery-File-Upload) 16 | * [**PNotify**](https://github.com/sciactive/pnotify) 17 | * [**CodeMirror**](https://github.com/codemirror/CodeMirror) 18 | * [**Fancytree**](https://github.com/mar10/fancytree) 19 | * [**markdown-js**](https://github.com/evilstreak/markdown-js) 20 | 21 | ### Developed with 22 | [**Codiad Web IDE**](https://github.com/Codiad/Codiad) 23 | 24 | ### Icon theme by Matthieu James 25 | [**Faenza Icon Theme**](https://code.google.com/archive/p/faenza-icon-theme) 26 | 27 | ## Contributors 28 | * [**Real-Gecko**](https://github.com/Real-Gecko) 29 | * [**Jamie Cameron**](https://github.com/jcameron) 30 | * [**Ilia Rostovtsev**](https://github.com/qooob) 31 | * [**Zen4All**](https://github.com/Zen4All) 32 | * [**ffrewer**](https://github.com/ffrewer) 33 | * [**SavageCore**](https://github.com/SavageCore) 34 | * [**Piotr Kozica**](https://github.com/vipkoza) 35 | * [**Denis Kanchev**](https://github.com/Demayl) 36 | * [**eldk**](https://github.com/eldk) 37 | 38 | ## Installation: 39 | Package for installation through Webmin interface 40 | For [**Linux**](https://github.com/Real-Gecko/Filemin/releases/download/2.2.0/filemin-2.2.0.linux.full.wbm.gz) distributions and for [**FreeBSD**](https://github.com/Real-Gecko/Filemin/releases/download/2.2.0/filemin-2.2.0.freebsd.full.wbm.gz). 41 | 42 | ## Flavours 43 | Filemin comes in different flavours such as: 44 | 45 | ### Full 46 | Complete installation with all required dependencies, will work literally everywhere even on servers with no acces to Internet. 47 | 48 | ### Builtin version 49 | Same as **Full**, but opens Filemin in the same tab as Webmin. Works with every theme except Authentic. 50 | 51 | ### CDN 52 | Sames as full but all required librares are delivered from [cdnjs](https://cdnjs.com/). Takes less space, but requires internet connection to get required JS libraries. 53 | 54 | ## Update 55 | As of version 1.1.0 Filemin automatically checks for update and offers to install it if available. 56 | However currently Webmin itself bundles outdated 0.9 branch of the module and new version of Filemin is always downgraded with Webmin update. 57 | To avoid the issue since version 2.0.0 Filemin installs additional Filemin Updater module. Just click "Filemin Updater" option in "Others" menu of Webmin to reinstall Filemin. 58 | 59 | ## Note for FreeBSD users. 60 | FreeBSD users are recommended to install _shared-mime-info_ package. 61 | 62 | `pkg install shared-mime-info` 63 | 64 | Otherwise mime recognition will fail resulting usability reduction. 65 | -------------------------------------------------------------------------------- /index.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | # File manager written in perl 3 | 4 | require './filemin-lib.pl'; 5 | 6 | $usermin = &get_product_name() eq 'usermin'; 7 | if(!$usermin) { 8 | &foreign_require("webmin", "webmin-lib.pl"); 9 | } 10 | 11 | my $vc = eval #102 fix 12 | { 13 | require version; 14 | version->import(); 15 | 1; 16 | }; 17 | 18 | #use version; 19 | 20 | $webprefix = $gconfig{'webprefix'}; 21 | 22 | &ui_print_unbuffered_header(undef, "Filemin", "", undef, 1 , 0, 0); 23 | 24 | print "

$text{'will_open'} $text{'new_tab'}

"; 25 | print ""; 26 | print ""; 27 | 28 | # Check for updates 29 | if($remote_user eq 'root' & $vc & !$usermin) { 30 | # Check if updater is installed 31 | my $updater = &foreign_installed('filemin-updater'); 32 | if(!$updater) { 33 | print "Installing updater
"; 34 | $irv = &webmin::install_webmin_module("$module_root_directory/unauthenticated/filemin-updater.tar.gz"); 35 | if (!ref($irv)) { 36 | print "Installation failed $irv
"; 37 | } 38 | else { 39 | print "Updater Installed $irv->[0]->[0] $irv->[2]->[0]
"; 40 | } 41 | } else { 42 | my %updater_info = &get_module_info('filemin-updater'); 43 | $installed = version->parse($updater_info{'version'}); 44 | $latest = version->parse('1.0.3'); 45 | if ($installed < $latest) { 46 | print "Updating updater
"; 47 | $irv = &webmin::install_webmin_module("$module_root_directory/unauthenticated/filemin-updater.tar.gz"); 48 | if (!ref($irv)) { 49 | print "Update failed $irv
"; 50 | } 51 | else { 52 | print "Updater updated $irv->[0]->[0] $irv->[2]->[0]
"; 53 | } 54 | } 55 | } 56 | 57 | print $text{'checking_for_update'}; 58 | my $url = 'https://github.com/Real-Gecko/filemin/raw/master/module.info'; 59 | my $tempfile = transname(); 60 | my %remote_module_info = (); 61 | my %module_info = (); 62 | my ($host, $port, $page, $ssl) = &parse_http_url($url); 63 | &http_download($host, $port, $page, $tempfile, undef, undef, $ssl) 64 | &read_file($tempfile, \%remote_module_info); 65 | %module_info = &get_module_info('filemin'); 66 | my $remote = version->parse($remote_module_info{'version'}); 67 | my $local = version->parse($module_info{'version'}); 68 | my $flavour = $module_info{'flavour'}; 69 | &save_module_config({'flavour' => $flavour}, 'filemin-updater'); 70 | if($local < $remote) { 71 | print "

$text{'newer_version_available'}
$text{'click_to_update'}

"; 72 | } else { 73 | print $text{'module_up_to_date'}; 74 | }; 75 | } 76 | 77 | # Display changelog 78 | if($remote_user eq 'root' & $vc) { 79 | my $changelog = &read_file_contents('CHANGELOG.md'); 80 | 81 | print '
'; 82 | print $changelog; 83 | print '
'; 84 | 85 | print ""; 90 | } 91 | 92 | &ui_print_footer("/", $text{'index'}); 93 | -------------------------------------------------------------------------------- /chmod.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | my @errors; 12 | 13 | my $permissions = $in{'permissions'}; 14 | 15 | # Fix chmod setuid/setgid to 0 for directories 16 | my $permissions = oct_to_symbolic($permissions); 17 | 18 | # Selected directories and files only 19 | if($in{'applyto'} eq '1') { 20 | foreach $name (split(/\0/, $in{'name'})) { 21 | next if $name eq ''; 22 | $name =~ s/\.\.//g; 23 | $name = &simplify_path($name); 24 | if (!$name || system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 25 | push @errors, "$name - $text{'error_chmod'}: $?"; 26 | } 27 | } 28 | } 29 | 30 | # Selected files and directories and files in selected directories 31 | if($in{'applyto'} eq '2') { 32 | foreach $name (split(/\0/, $in{'name'})) { 33 | next if $name eq ''; 34 | $name =~ s/\.\.//g; 35 | $name = &simplify_path($name); 36 | if(!$name || system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 37 | push @errors, "$name - $text{'error_chmod'}: $?"; 38 | } 39 | if($name && -d "$cwd/$name") { 40 | if(system_logged("find ".quotemeta("$cwd/$name")." -maxdepth 1 -type f -exec chmod ".quotemeta($permissions)." {} \\;") != 0) { 41 | push @errors, "$name - $text{'error_chmod'}: $?"; 42 | } 43 | } 44 | } 45 | } 46 | 47 | # All (recursive) 48 | if($in{'applyto'} eq '3') { 49 | foreach $name (split(/\0/, $in{'name'})) { 50 | next if $name eq ''; 51 | $name =~ s/\.\.//g; 52 | $name = &simplify_path($name); 53 | if(!$name || system_logged("chmod -R ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 54 | push @errors, "$name - $text{'error_chmod'}: $?"; 55 | } 56 | } 57 | } 58 | 59 | # Selected files and files under selected directories and subdirectories 60 | if($in{'applyto'} eq '4') { 61 | foreach $name (split(/\0/, $in{'name'})) { 62 | next if $name eq ''; 63 | $name =~ s/\.\.//g; 64 | $name = &simplify_path($name); 65 | if($name && -f "$cwd/$name") { 66 | if(system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 67 | push @errors, "$name - $text{'error_chmod'}: $?"; 68 | } 69 | } else { 70 | if(!$name || system_logged("find ".quotemeta("$cwd/$name")." -type f -exec chmod ".quotemeta($permissions)." {} \\;") != 0) { 71 | push @errors, "$name - $text{'error_chmod'}: $?"; 72 | } 73 | } 74 | } 75 | } 76 | 77 | # Selected directories and subdirectories 78 | if($in{'applyto'} eq '5') { 79 | foreach $name (split(/\0/, $in{'name'})) { 80 | next if $name eq ''; 81 | $name =~ s/\.\.//g; 82 | $name = &simplify_path($name); 83 | if($name && -d "$cwd/$name") { 84 | if(system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 85 | push @errors, "$name - $text{'error_chmod'}: $?"; 86 | } 87 | if(system_logged("find ".quotemeta("$cwd/$name")." -type d -exec chmod ".quotemeta($permissions)." {} \\;") != 0) { 88 | push @errors, "$name - $text{'error_chmod'}: $?"; 89 | } 90 | } 91 | } 92 | } 93 | 94 | if (scalar(@errors) > 0) { 95 | print status('error', \@errors); 96 | } else { 97 | print status('success', 1); 98 | } 99 | -------------------------------------------------------------------------------- /images/icons/mime/font.xpm: -------------------------------------------------------------------------------- 1 | /* XPM */ 2 | static char *font[] = { 3 | /* columns rows colors chars-per-pixel */ 4 | "22 22 116 2", 5 | " c #000000", 6 | ". c #2D4978", 7 | "X c #2E4A79", 8 | "o c #304C7B", 9 | "O c #334F7E", 10 | "+ c #585858", 11 | "@ c #365281", 12 | "# c #395584", 13 | "$ c #3C5887", 14 | "% c #3F5B8A", 15 | "& c #435D88", 16 | "* c #435D8A", 17 | "= c #445E8A", 18 | "- c #425E8D", 19 | "; c #48618C", 20 | ": c #51678B", 21 | "> c #456190", 22 | ", c #4B6590", 23 | "< c #486493", 24 | "1 c #4B6694", 25 | "2 c #4B6796", 26 | "3 c #4F6892", 27 | "4 c #4E6894", 28 | "5 c #4E6A99", 29 | "6 c #556F9B", 30 | "7 c #516D9C", 31 | "8 c #526E9D", 32 | "9 c #54709F", 33 | "0 c #5C7298", 34 | "q c #5C7399", 35 | "w c #5C759E", 36 | "e c #687C9D", 37 | "r c #647BA1", 38 | "t c #677EA5", 39 | "y c #6F85AB", 40 | "u c #7183A2", 41 | "i c #7587A5", 42 | "p c #7387A8", 43 | "a c #758BAF", 44 | "s c #768BAF", 45 | "d c #7B8EAD", 46 | "f c #7B8EAE", 47 | "g c #8393AD", 48 | "h c #8395B2", 49 | "j c #8897B0", 50 | "k c #8899B5", 51 | "l c #94A2BB", 52 | "z c #97A4BA", 53 | "x c #97A5BE", 54 | "c c #9BA9C0", 55 | "v c #98A8C2", 56 | "b c #A3AFC4", 57 | "n c #A5B0C3", 58 | "m c #A6B1C2", 59 | "M c #BAC3D0", 60 | "N c #B9C3D3", 61 | "B c #BAC3D2", 62 | "V c #BCC4D1", 63 | "C c #C7C7C7", 64 | "Z c #C5C7CA", 65 | "A c #C3C7CF", 66 | "S c #C8C8C8", 67 | "D c #CBCBCB", 68 | "F c #C4CAD5", 69 | "G c #C4CBD6", 70 | "H c #C4CBD8", 71 | "J c #CDD3DE", 72 | "K c #D0D0D0", 73 | "L c #D1D1D1", 74 | "P c #D2D2D2", 75 | "I c #D3D3D3", 76 | "U c #D4D4D4", 77 | "Y c #D5D5D5", 78 | "T c #D6D6D6", 79 | "R c #D7D7D7", 80 | "E c #D8D9DB", 81 | "W c #DBDBDB", 82 | "Q c #DDDDDD", 83 | "! c #DEDEDE", 84 | "~ c #D5DAE3", 85 | "^ c #DADDE4", 86 | "/ c #DADEE4", 87 | "( c #DCDFE4", 88 | ") c #DCE0E5", 89 | "_ c #E1E1E1", 90 | "` c #E3E3E3", 91 | "' c #E0E2E6", 92 | "] c #E2E4E6", 93 | "[ c #E5E5E5", 94 | "{ c #E6E6E6", 95 | "} c #E7E7E7", 96 | "| c #E4E6E8", 97 | " . c #E8E8E8", 98 | ".. c #E9E9E9", 99 | "X. c #EAEAEA", 100 | "o. c #EBEBEB", 101 | "O. c #EBECEE", 102 | "+. c #ECECEC", 103 | "@. c #EDEDED", 104 | "#. c #ECEDEE", 105 | "$. c #EDEDEE", 106 | "%. c #EEEEEE", 107 | "&. c #EFEFEF", 108 | "*. c #F0F0F0", 109 | "=. c #F1F1F1", 110 | "-. c #F1F1F2", 111 | ";. c #F2F2F2", 112 | ":. c #F3F3F3", 113 | ">. c #F4F4F4", 114 | ",. c #F5F5F5", 115 | "<. c #F6F6F6", 116 | "1. c #F7F7F7", 117 | "2. c #F8F8F8", 118 | "3. c #F9F9F9", 119 | "4. c #FBFBFB", 120 | "5. c None", 121 | /* pixels */ 122 | "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", 123 | "5.5.<.4.4.4.4.4.4.4.4.4.4.4.4.4.4.2.4.<.5.5.", 124 | "5.:.<.<.:.:.<.<.<.<.:.<.:.<.<.<.>.&.>.<.:.5.", 125 | "5.4.:.:.<.:.:.:.:.<.:.<.:.<.:.:.>.} >.:.4.5.", 126 | "5.4.:.:.:.:.:.:.*.} Q T k 8 m E T S } &.4.5.", 127 | "5.<.:.:.:.:.:.:.>.>.>.~ 8 8 v :.:.E >.:.<.5.", 128 | "5.<.:.:.:.:.:.:.:.:.:.s y 5 s :.:.T :.:.<.5.", 129 | "5.<.:.&.:.:.:.:.:.:.N t J 1 6 :.:.T &.:.<.5.", 130 | "5.>.&.&.+.:.&.:.*.O.w H O.< < / :.I :.:.:.5.", 131 | "5.>.&.:.} &.:.&.:.x d *.:.r > N &.T &.&.:.5.", 132 | "5.:.&.&.E &.&.:.) 3 / :.:.h - x &.T &.&.:.5.", 133 | "5.&.&.&.I &.:.&.d l *.*.&.b % i &.I &.&.&.5.", 134 | "5.&.&.&.I &.&.G ; ) ] } | M % 3 &.I &.o.&.5.", 135 | "5.&.o.&.I &.&.q > = * * * * # # ) T &.&.&.5.", 136 | "5.o.o.&.K &.m 0 &.&.&.+.&.&.; @ V K &.o.o.5.", 137 | "5.o.o.o.K ] & F +.+.&.+.o.O.e O z K o.o.o.5.", 138 | "5.o.o.o.D g i &.&.&.o.&.&.o.g O u I o.o.o.5.", 139 | "5.} ` A X X . : K D D K Z . . . . X R ` } 5.", 140 | "5.o.} } T o.o.o.o.o.o.o.o.o.o.o.o.Q o.o.o.5.", 141 | "5.C } o.Q } } } } } } } } } } } } ` } } C 5.", 142 | "5.+ C o.} &.o.&.&.&.&.&.&.&.o.&.o.o.o.S + 5.", 143 | "5.5.5. 5.5.5." 144 | }; 145 | -------------------------------------------------------------------------------- /upload.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use Cwd 'abs_path'; 5 | use lib './lib'; 6 | 7 | &ReadParse(\%in, "GET"); 8 | get_paths(); 9 | 10 | my @errors; 11 | $line = ""; 12 | 13 | print_ajax_header(); 14 | 15 | # Get multipart form boundary 16 | $ENV{'CONTENT_TYPE'} =~ /boundary=(.*)$/ || push @rrors, $text{'readparse_enc'}; 17 | $boundary = $1; 18 | 19 | # Comment right now 20 | #if ($ENV{'CONTENT_LENGTH'} && $max && $ENV{'CONTENT_LENGTH'} > $max) { 21 | # &error($err); 22 | #} 23 | 24 | #Read the data 25 | while(index($line,"$boundary--") == -1) { 26 | #reset vars on each loop 27 | $file = undef; 28 | $rest = undef; 29 | $prevline = undef; 30 | $header = undef; 31 | $line = ; 32 | $got += length($line); 33 | if ($upload_max && $got > $upload_max) { 34 | push @errors, &text('error_upload_emax', &nice_size($upload_max)); 35 | last; 36 | } 37 | if ($line =~ /(\S+):\s*form-data(.*)$/) { 38 | $rest = $2; # We found form data definition, let`s check it 39 | } else { 40 | next; 41 | } 42 | # Check if current form data part is file 43 | while ($rest =~ /([a-zA-Z]*)=\"([^\"]*)\"(.*)/) { 44 | if ($1 eq 'filename') { 45 | $file = $2; 46 | } 47 | $rest = $3; 48 | } 49 | 50 | if(defined($file)){ 51 | # OK, we have a file, let`s save it 52 | if (-e "$cwd/$file" and !$in{'overwrite'}) { # Just in case 53 | push @errors, "$path/$file $text{'error_exists'}"; 54 | last; 55 | } else { 56 | if (!open(OUTFILE, '>', "$cwd/$file")) { 57 | push @errors, "$text{'error_opening_file_for_writing'} $path/$file - $!"; 58 | last; # Something went wrong, abort! 59 | } else { 60 | binmode(OUTFILE); 61 | # Skip "content-type" as we work in binmode anyway and skip empty line 62 | ; ; 63 | # Read all lines until next boundary or form data end 64 | while(1) { 65 | $line = ; 66 | if(!length($line)) { # Connection lost or file upload was cancelled, abort! 67 | close(OUTFILE); 68 | # &rename_file("$cwd/$file", "$cwd/$file~"); 69 | &unlink_file("$cwd/$file"); 70 | die; 71 | }; 72 | # Calculate data got 73 | $got += length($line); 74 | # Some brainf###ing to deal with last CRLF 75 | if(index($line,"$boundary") != -1 || index($line,"$boundary--") != -1) { 76 | chop($prevline); 77 | chop($prevline); 78 | if (!print OUTFILE $prevline) { 79 | push @errors, "text{'error_writing_file'} $path/$file"; 80 | last; 81 | } 82 | last; 83 | } else { 84 | if (!print OUTFILE $prevline) { 85 | push @errors, "text{'error_writing_file'} $path/$file"; 86 | last; 87 | } 88 | $prevline = $line; 89 | } 90 | } 91 | # File saved, let`s go further 92 | close(OUTFILE); 93 | } 94 | } 95 | } else { 96 | # Just skip everything until next boundary or form data end 97 | while(index($line,"$boundary") == -1 or index($line,"$boundary--") == -1) { 98 | $line = ; 99 | } 100 | } 101 | } 102 | 103 | if (scalar(@errors) > 0) { 104 | print status('error', \@errors); 105 | } else { 106 | print status('success', 1); 107 | } 108 | -------------------------------------------------------------------------------- /lang/zh_CN.UTF-8: -------------------------------------------------------------------------------- 1 | about_to_delete=您即将删除以下项目: 2 | acl_allowed_for_edit=Mimetypes 允许内置编辑器编辑 3 | acl_allowed_paths=允许访问目录 4 | acl_allowed_paths2=(对于非 root 用户) 5 | acl_bytes=bytes 6 | acl_epath=目录 $1不存在 7 | acl_euser=选定的 Unix 用户不存在! 8 | acl_max=上传文件的最大大小 9 | acl_root=Root(谨慎授予不受信任的用户!) 10 | acl_same=与 Webmin 登录相同 11 | acl_unlimited=不限 12 | acl_user=指定 Unix 用户 13 | acl_work_as=以 Unix 用户身份访问文件 14 | actions=动作 15 | archive_name=归档名 16 | are_you_sure=您确定吗? 17 | attr_label=要应用的属性 18 | attr_label_error=必须指定属性 19 | attr_label_error_proc=无法更改属性 20 | attributes=属性 21 | bookmark_folder=为当前目录添加书签 22 | browse_for_upload=浏览上传 23 | chattr_selected=Chattr 已选中 24 | chcon_selected=Chcon 已选中 25 | chmod_additional=额外 26 | chmod_all=全部(递归) 27 | chmod_apply_to=应用到 28 | chmod_dir_and_its_files=所选目录中的目录以及文件 29 | chmod_dir_and_subs=选定的目录和子目录 30 | chmod_dir_files_and_subs_files=选定目录和子目录下的选定文件和文件 31 | chmod_dir_only=仅选定目录和文件 32 | chmod_execute=执行 33 | chmod_group=组 34 | chmod_others=其它 35 | chmod_owner=所有者 36 | chmod_read=读 37 | chmod_selected=Chmod 已选中 38 | chmod_setgid=Setgid 39 | chmod_sticky=Sticky 位 40 | chmod_write=写 41 | chown_selected=Chown 已选中 42 | compress_selected=压缩已选中 43 | config_bookmarks=书签 44 | config_columns_to_display=显示的列 45 | config_disable_pagination=禁用分页(仅限 Authentic 主题用户) 46 | config_per_page=每页显示的项目(仅适用于旧主题) 47 | config_toolbar_style=将工具栏样式设置为类似菜单的视图,带下拉菜单...和cookie(仅限 Authentic 主题用户) 48 | context_label=要应用的上下文 49 | context_label_error=安全上下文不能为空 50 | context_label_error_proc=无法更改安全上下文 51 | copy_selected=复制选中 52 | count_uploads=选择上传的文件 53 | create=创建 54 | create_file=创建文件 55 | create_folder=创建目录 56 | cut_selected=剪切选中 57 | delete=删除 58 | dialog_cancel=取消 59 | dialog_change=更改 60 | dialog_compress=压缩 61 | dialog_download=下载 62 | dialog_file_url=下载文件的 URL 63 | dialog_ok=确认 64 | dialog_recursive=递归 65 | dialog_user_name=远程服务器用户名(若需要) 66 | dialog_user_pass=远程服务器密码(若需要) 67 | edit=编辑 68 | edit_file=编辑文件 69 | error_archive_type_not_supported=归档类型不支持 70 | error_chmod=更改权限失败 71 | error_chown=更改所有者失败 72 | error_copy=复制失败,错误: 73 | error_create=创建失败: 74 | error_creating_conf=创建配置目录错误 75 | error_cut=移动失败,错误: 76 | error_delete=无法删除 77 | error_exists=已存在,跳过 78 | error_group_not_found=该系统上不存在组 79 | error_invalid_uri=错误:没有提供有效的 URL! 80 | error_load_template=加载模板文件时出错 81 | error_numeric=必须是数字! 82 | error_opendir=打开目录时出错 83 | error_opening_file_for_writing=无法打开文件写入: 84 | error_pasting_nonsence=粘贴到同一目录是没有意义的 85 | error_rename=无法重命名 86 | error_saving_file=保存文件时出错 87 | error_title=错误! 88 | error_upload_emax=上传的文件大于 $1 的限制 89 | error_user_not_found=在此系统上找不到用户 90 | error_writing_file=写文件时出错: 91 | errors_occured=执行操作时发生以下错误 92 | extract_archive=提取档案 93 | extract_etype=不支持的存档文件类型 94 | file_already_exists=已存在于 95 | files_ready_for_upload=查看所选文件 96 | get_from_url=从 URL 获取 97 | goto_folder=转到包含的目录 98 | group_name=组名称 99 | hint_chmod=更改所选文件和目录的权限 100 | hint_chown=更改所选文件和目录的所有者 101 | hint_compress=将选定的文件和目录压缩到 tar.gz 存档 102 | hint_copy=将选定的文件和目录复制到缓冲区 103 | hint_create_file=在当前目录中创建新文件 104 | hint_create_folder=在当前路径中创建新目录 105 | hint_cut=将选定的文件和目录剪切为缓冲区 106 | hint_from_url=从远程 URL 获取文件 107 | hint_paste=粘贴缓冲区中的文件和目录 108 | hint_remove=删除选定的文件和目录 109 | hint_upload=将文件上传到当前目录 110 | http_done=下载 $1到 $2。 111 | http_downloading=正在下载 112 | index=索引 113 | info_total1=总计:$1 个文件和 $2 目录 114 | info_total2=总计:$1 个文件和 $2 目录 115 | info_total3=总计:$1 个文件和 $2 目录 116 | info_total4=总计:$1 个文件和 $2 目录 117 | invert_selection=反选 118 | last_mod_time=最后修改时间 119 | menu_bookmarks=书签 120 | menu_edit=编辑 121 | menu_file=文件 122 | menu_tools=工具 123 | module_config=模块配置 124 | name=名称 125 | new_file_name=新文件名 126 | new_folder_name=新目录名 127 | new_name=新名称 128 | no_bookmarks=还没有书签 129 | notallowed=您不能访问 $1。允许的目录是:$2 130 | nothing_selected=没有选择 131 | owner_group=所有者组 132 | owner_user=所有者用户 133 | ownership=所有者 134 | paste=粘贴 135 | permissions=权限 136 | previous_page=上一页 137 | provide_file_name=提供文件名 138 | provide_folder_name=提供目录名 139 | provide_group_name=提供组名 140 | provide_new_file_name=提供新文件名 141 | provide_search_query=提供搜索查询 142 | provide_url=提供远程文件的 URL 143 | provide_user_name=提供用户名 144 | refresh=刷新 145 | remove_selected=删除选定 146 | rename=重命名 147 | save=保存 148 | save_close=保存并关闭 149 | save_file=保存文件 150 | search=搜索 151 | search_go=查找 152 | search_insensitive=不区分大小写搜索 153 | search_label=搜索查询 154 | search_results=搜索查询为 155 | select_all=全选 156 | selinux=安全上下文 157 | size=大小 158 | type=类型 159 | upload_files=上传文件 160 | uploading=正在上传,请稍候... 161 | user_name=用户名 162 | warning_title=警告! 163 | -------------------------------------------------------------------------------- /unauthenticated/templates/context_menu.html: -------------------------------------------------------------------------------- 1 | 98 | -------------------------------------------------------------------------------- /list.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | # File manager written in perl 3 | 4 | require './filemin-lib.pl'; 5 | use lib './lib'; 6 | use File::MimeInfo; 7 | use Mojo::JSON; 8 | 9 | &ReadParse(); 10 | get_paths(); 11 | 12 | print_ajax_header(); 13 | 14 | my @errors; 15 | 16 | # SELinux context 17 | my $selinux = &is_selinux_enabled(); 18 | my %context = (); 19 | 20 | # To search 21 | if($in{'query'}) { 22 | if($in{'caseins'}) { 23 | $criteria = '-iname'; 24 | } else { 25 | $criteria = '-name' 26 | } 27 | @list = split('\n', &backquote_logged( 28 | "find ".quotemeta($cwd)." $criteria ".quotemeta("*$in{'query'}*"))); 29 | 30 | # Get SELinux context 31 | if(selinux) { 32 | $command = "ls -dZ ".join(' ', map { qq /"$_"/ } @list); 33 | $result = `$command`; 34 | @searray = map { [split(/ /, $_, 5)] } split(/\n/, $result); 35 | %context = map { $_->[4] => $_->[3] } @searray; 36 | } 37 | 38 | @list = map { [ $_, lstat($_), mimetype($_), -d, -l $_, $context{$_} ] } @list; 39 | # Or not to search 40 | } else { 41 | unless (opendir ( DIR, $cwd )) { 42 | $path=""; 43 | push @errors, "$text{'error_opendir'} $cwd $!"; 44 | } else { 45 | # Push file names with full paths to array, filtering out "." and ".." 46 | @list = map { &simplify_path("$cwd/$_") } grep { $_ ne '.' && $_ ne '..' } readdir(DIR); 47 | closedir(DIR); 48 | 49 | # Filter out not allowed entries 50 | if($remote_user_info[0] ne 'root' && $allowed_paths[0] ne '$ROOT') { 51 | # Leave only allowed 52 | for $path (@allowed_paths) { 53 | my $slashed = $path; 54 | $slashed .= "/" if ($slashed !~ /\/$/); 55 | push @tmp_list, grep { $slashed =~ /^\Q$_\/\E/ || 56 | $_ =~ /\Q$slashed\E/ } @list; 57 | } 58 | # Remove duplicates 59 | my %hash = map { $_, 1 } @tmp_list; 60 | @list = keys %hash; 61 | } 62 | 63 | # Get SELinux context 64 | if(selinux) { 65 | $command = "ls -dZ ".join(' ', map { qq /"$_"/ } @list); 66 | $result = `$command`; 67 | @searray = map { [split(/ /, $_, 5)] } split(/\n/, $result); 68 | %context = map { $_->[4] => $_->[3] } @searray; 69 | } 70 | 71 | # Get info about directory entries 72 | @info = map { [ $_, lstat($_), mimetype($_), -d, -l $_, $context{$_} ] } @list; 73 | 74 | # Filter out folders 75 | @folders = map {$_} grep {$_->[15] == 1 } @info; 76 | 77 | # Filter out files 78 | @files = map {$_} grep {$_->[15] != 1 } @info; 79 | 80 | # Sort stuff by name 81 | @folders = sort { $a->[0] cmp $b->[0] } @folders; 82 | @files = sort { $a->[0] cmp $b->[0] } @files; 83 | 84 | # Recreate list 85 | undef(@list); 86 | push @list, @folders, @files; 87 | } 88 | } 89 | 90 | # Push everything to JSON 91 | @result = (); 92 | 93 | # That is the answer 94 | foreach(@list) { 95 | my $user = getpwuid($_->[5]) ? getpwuid($_->[5]) : $_->[5]; 96 | my $group = getgrgid($_->[6]) ? getgrgid($_->[6]) : $_->[6]; 97 | my $permissions = sprintf("%04o", $_->[3] & 07777); 98 | my $type = $_->[14]; 99 | my $link_target = ""; 100 | my $link_target_mime = ""; 101 | my $size; 102 | 103 | my $link = $_->[0]; 104 | 105 | if($in{'sizes'} & $_->[15]) { 106 | $size = &recursive_disk_usage($link); 107 | } else { 108 | $size = $_->[8]; 109 | } 110 | 111 | if($_->[16]) { 112 | $link_target = readlink($link); 113 | $link_target_mime = mimetype($link_target); 114 | unless(-e &resolve_links($link)) { 115 | $_->[16] = 'broken' 116 | } 117 | } 118 | 119 | $link =~ s/\Q$cwd\E\///; 120 | $link =~ s/^\///g; 121 | $link = decode('UTF-8', $link, Encode::FB_CROAK); 122 | 123 | my %entry = ( 124 | 'name' => $link, 125 | 'type' => $type, 126 | 'size' => $size, 127 | 'user' => $user, 128 | 'group' => $group, 129 | 'permissions' => $permissions, 130 | 'directory' => $_->[15], 131 | 'symlink' => $_->[16], 132 | 'atime' => $_->[9], 133 | 'mtime' => $_->[10], 134 | 'archive' => (index($type, "zip") != -1 or index($type, "compressed") != -1), 135 | 'link_target' => $link_target, 136 | 'link_target_mime' => $link_target_mime, 137 | 'selinux_context' => $_->[17] 138 | ); 139 | 140 | push @result, \%entry; 141 | } 142 | if (scalar(@errors) > 0) { 143 | $result = ''; 144 | foreach $error(@errors) { 145 | $result.= "$error\\n"; 146 | } 147 | print '{"error": "'.$result.'"}'; 148 | } else { 149 | print Mojo::JSON::to_json(\@result); 150 | } 151 | -------------------------------------------------------------------------------- /unauthenticated/templates/main_menu.html: -------------------------------------------------------------------------------- 1 | 99 | -------------------------------------------------------------------------------- /lang/de.UTF-8: -------------------------------------------------------------------------------- 1 | index=Index 2 | error_opendir=Fehler beim Öffnen des Verzeichnisses 3 | error_creating_conf=Fehler beim Erstellen des Konfigurationsverzeichnisses 4 | select_all=Alle auswählen 5 | invert_selection=Auswahl umkehren 6 | copy_selected=Ausgewählte Objekte kopieren 7 | cut_selected=Ausgewählte Objekte ausschneiden 8 | paste=Einfügen 9 | create_folder=Ordner erstellen 10 | create_file=Datei erstellen 11 | compress_selected=Komprimiere gewählte Objekte 12 | chmod_selected=Chmod gewählte Objekte 13 | chown_selected=Chown gewählte Objekte 14 | remove_selected=Lösche gewählte Objekte 15 | browse_for_upload=Durchsuchen zum Hochladen 16 | upload_files=Dateien hochladen 17 | get_from_url=Herunterladen von URL 18 | bookmark_folder=Setze Lesezeichen für aktuellen Ordner 19 | name=Name 20 | type=Typ 21 | actions=Aktionen 22 | size=Größe 23 | owner_user=Benutzer 24 | owner_group=Gruppe 25 | permissions=Rechte 26 | last_mod_time=Letzte Änderung 27 | rename=Umbenennen 28 | edit=Bearbeiten 29 | extract_archive=Extrahiere Archiv 30 | edit_file=Bearbeite Datei 31 | save=Speichern 32 | save_close=Speichern und schließen 33 | delete=Löschen 34 | save_file=Datei speichern 35 | previous_page=vorherigen Seite 36 | count_uploads=Datei(en) ausgewählt zum Hochladen 37 | error_title=Fehler!!! 38 | warning_title=Warnung!!! 39 | nothing_selected=Nichts ausgewählt 40 | error_load_template=Fehler beim Laden der Template-Datei 41 | create=Erstelle 42 | new_folder_name=Neuer Ordnername 43 | new_file_name=Neuer Dateiname 44 | new_name=Neuer Name 45 | dialog_ok=OK 46 | dialog_cancel=Abbrechen 47 | archive_name=Archivname 48 | dialog_compress=Komprimieren 49 | about_to_delete=Sie sind dabei, folgendes zu löschen: 50 | are_you_sure=Sind Sie sicher? 51 | user_name=Benutzername 52 | group_name=Gruppenname 53 | dialog_change=Ändere 54 | chmod_owner=Benutzer 55 | chmod_group=Gruppe 56 | chmod_others=Andere 57 | chmod_read=Lesen 58 | chmod_write=Schreiben 59 | chmod_execute=Ausführen 60 | chmod_sticky=Sticky bit 61 | chmod_setgid=Setgid 62 | chmod_additional=Zusätzlich 63 | chmod_apply_to=Anwenden auf 64 | chmod_dir_only=Nur ausgewählte Verzeichnisse und Dateien 65 | chmod_dir_and_its_files=Ausgewählte Dateien und Verzeichnisse und Dateien in ausgewählten Verzeichnissen 66 | chmod_all=Alle (rekursiv) 67 | chmod_dir_files_and_subs_files=Ausgewählte Dateien und Dateien in ausgewählten Verzeichnissen und Unterverzeichnissen 68 | chmod_dir_and_subs=Ausgewählte Verzeichnisse und Unterverzeichnisse 69 | dialog_file_url=URL der Datei zum Herunterladen 70 | dialog_user_name=Benutzername für entfernten Server (falls erforderlich) 71 | dialog_user_pass=Passwort für entfernten Server (falls erforderlich) 72 | dialog_download=Herunterladen 73 | error_invalid_uri=Fehler: Keine gültige URL angegeben!!! 74 | file_already_exists=existiert schon in 75 | files_ready_for_upload=Ausgewählte Dateien: 76 | errors_occured=Folgende Fehler sind beim Ausführen der Operation aufgetreten 77 | error_pasting_nonsence=Kopieren in das selbe Verzeichnis macht keinen Sinn 78 | error_exists=existiert bereits, abgebrochen 79 | error_copy=kopieren fehlgeschlagen mit Fehler: 80 | error_cut=verschieben fehlgeschlagen mit Fehler: 81 | error_create=gescheitert zu erstellen: 82 | error_rename=gescheitert umzubenennen 83 | error_chmod=Rechteänderung gescheitert 84 | error_chown=Gescheitert den Benutzer zu ändern 85 | error_delete=löschen nicht möglich 86 | error_user_not_found=Benutzer nicht gefunden in diesen System 87 | error_group_not_found=Gruppe existiert nicht in diesen System 88 | error_archive_type_not_supported= Archivtyp noch nicht unterstützt 89 | error_opening_file_for_writing=Konnte Datei nicht öffnen zum Schreiben: 90 | error_writing_file=Fehler beim Schreiben der Datei: 91 | error_numeric=muss nummerisch sein! 92 | error_saving_file=Fehler beim Speichern der Datei 93 | hint_copy=Ausgewählte Dateien und Ordner in den Puffer kopieren 94 | hint_cut=Ausgewählte Dateien und Ordner in den Puffer ausschneiden 95 | hint_paste=Füge Dateien und Ordner aus dem Puffer in das aktuelle Verzeichnis ein 96 | hint_create_folder=Erstelle neuen Ordner im aktuellen Verzeichnis 97 | hint_create_file=Erstelle neue Datei im aktuellen Verzeichnis 98 | hint_compress=Komprimiere ausgewählte Dateien und Ordner zu einem tar.gz Archiv 99 | hint_chmod=Ändere die Rechte für die ausgewählten Dateien und Ordner 100 | hint_chown=Ändere den Benutzer für die ausgewählten Dateien und Ordner 101 | hint_remove=Lösche ausgewählte Dateien und Ordner 102 | hint_upload=Dateien hochladen in das aktuelle Verzeichnis 103 | hint_from_url=Datei herunterladen von entfernter URL 104 | provide_folder_name=Ordnernamen angeben 105 | provide_file_name=Dateinamen angeben 106 | provide_user_name=Benutzernamen angeben 107 | provide_group_name=Gruppennamen angeben 108 | provide_url=URL der entfernten Datei angeben 109 | provide_new_file_name=Neuen Dateinamen angeben 110 | provide_search_query=Suchanfrage angeben 111 | dialog_recursive=Rekursiv 112 | refresh=Neu laden 113 | http_downloading=Es wird heruntergeladen 114 | uploading=Hochladen, bitte warten ... 115 | acl_allowed_paths=Erlaube Zugang zu Verzeichnissen 116 | acl_work_as=Zugriff auf Dateien als Unix-Benutzer 117 | acl_root=Root (nicht vertrauenswürdigen Benutzern mit Vorsicht zu gewähren!) 118 | acl_same=Wie bei Webmin-Login 119 | acl_user=Spezifischer Unix-Benutzer 120 | acl_euser=Ausgewählter Unix-Benutzer existiert nicht! 121 | acl_epath=Pfad $1 existiert nicht 122 | search=Suche 123 | search_label=Suchanfrage 124 | search_go=Shake it, baby! 125 | search_results=Suchergebnisse für 126 | goto_folder=Gehe zum enthaltenden Ordner 127 | module_config=Modul-Konfiguration 128 | config_columns_to_display=Spalten zum Anzeigen 129 | config_per_page=Einträge zum Anzeigen pro Seite (nur für alte Themes) 130 | config_disable_pagination=Seitennummerierung deaktivieren (nur für Authentic Theme-Benutzer) 131 | config_toolbar_style=Setze 'toolbar style' für Menü,
mit Dropdowns ... und Cookies (nur für Authentic Theme-Benutzer) 132 | config_bookmarks=Lesezeichen 133 | no_bookmarks=Noch keine Lesezeichen 134 | menu_file=Datei 135 | menu_edit=Bearbeite 136 | menu_tools=Werkzeuge 137 | menu_bookmarks=Lesezeichen 138 | notallowed=Sie haben keine Erlaubnis, auf $1 zuzugreifen. Die erlaubten Verzeichnisse sind: $2 -------------------------------------------------------------------------------- /unauthenticated/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Filemin - File Manager 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
51 | $main_menu 52 | 57 | 59 |
60 |
61 |
62 | 63 | 64 | 65 | 66 |
67 |
68 |
69 |
70 |
71 |
72 | 76 | 79 | 82 |
83 |
84 |
85 |
86 |
87 | $context_menu 88 | $context_menu_search 89 | 90 | $dialogs 91 | 92 | 93 | -------------------------------------------------------------------------------- /unauthenticated/css/filemin.css: -------------------------------------------------------------------------------- 1 | /* Trick to disable browser scrollbar */ 2 | body { 3 | overflow: hidden; 4 | height: 100vh; 5 | } 6 | 7 | a:focus { 8 | outline: none; 9 | outline-offset: unset; 10 | } 11 | 12 | #bottom-panel { 13 | clear: both; 14 | margin-top: 10px; 15 | margin-bottom: 10px; 16 | } 17 | 18 | #bottom-panel .panel-body { 19 | padding: 5px 10px; 20 | } 21 | 22 | #bottom-stats { 23 | margin-left: 10px; 24 | line-height: 22px; 25 | } 26 | 27 | pre.well { 28 | overflow: auto; 29 | } 30 | 31 | .tooltip { 32 | font-size: 14px; 33 | } 34 | 35 | .tooltip-inner { 36 | max-width: 100%; 37 | } 38 | 39 | ul.fancytree-container { 40 | border: none; 41 | } 42 | 43 | #filemin-tree { 44 | padding-right: 10px; 45 | margin-right: 10px; 46 | margin-top: 10px; 47 | margin-bottom: 10px; 48 | border-right: solid 2px #ddd; 49 | } 50 | 51 | #filemin-tree .input-group { 52 | margin-top: 10px; 53 | } 54 | 55 | .filemin-tab .filemin-table { 56 | width: 100%; 57 | } 58 | 59 | .filemin-tab > form > .btn { 60 | margin-right: 10px; 61 | } 62 | 63 | #tabs-plus { 64 | float: left; 65 | display: block; 66 | border: none; 67 | } 68 | 69 | #tabs-control.nav > li.tab { 70 | min-width: 140px; 71 | } 72 | 73 | #tabs-control.nav > li > a { 74 | background: #f5f5f5; 75 | color: #777; 76 | border-bottom-color: #ddd; 77 | cursor: pointer; 78 | } 79 | 80 | #tabs-control.nav > li > a:focus, 81 | #tabs-control.nav > li > a:hover, 82 | #tabs-control.nav > li.active > a { 83 | background: #fff; 84 | color: #333; 85 | border-bottom-color: transparent; 86 | } 87 | 88 | .navbar-default .navbar-nav > li > a { 89 | color: #000; 90 | } 91 | 92 | #tabs-control .btn-xs { 93 | border: none; 94 | padding: 0 5px; 95 | margin-left: 6px; 96 | margin-top: 1px; 97 | } 98 | 99 | #tabs-control.nav > li > a, 100 | #tabs-plus.nav > li > a { 101 | padding: 5px 15px; 102 | transition: background-color 0.3s ease; 103 | } 104 | 105 | #tabs-control.nav > li > a.closable { 106 | padding-right: 6px; 107 | } 108 | 109 | #tabs-container { 110 | position: relative; 111 | margin-bottom: 10px; 112 | } 113 | 114 | .path-edit { 115 | position: absolute; 116 | top: 10px; 117 | z-index: 100; 118 | } 119 | 120 | #navigator .popover { 121 | width: 300px; 122 | max-width: 400px; 123 | } 124 | /* 125 | nav.navbar { 126 | min-height: 49px; 127 | height: 49px; 128 | } 129 | /* 130 | .navbar-nav > li > a { 131 | padding-top: 11px !important; 132 | padding-bottom: 12px !important; 133 | line-height: 25px !important; 134 | font-size: 16px; 135 | transition: ease background 0.3s; 136 | } 137 | */ 138 | .navbar { 139 | margin-top: 3px; 140 | margin-bottom: 15px; 141 | } 142 | 143 | .navbar-brand { 144 | /*height: 48px;*/ 145 | padding: 1px; 146 | } 147 | 148 | .navbar-default .navbar-nav > .open > a, 149 | .navbar-default .navbar-nav > .open > a:focus, 150 | .navbar-default .navbar-nav > .open > a:hover { 151 | color: #333; 152 | } 153 | 154 | .breadcrumb { 155 | line-height: 1.42857; 156 | margin-bottom: 0; 157 | margin-left: 50px; 158 | } 159 | 160 | #new-tab { 161 | cursor: pointer; 162 | } 163 | 164 | .breadcrumb a { 165 | text-decoration: none; 166 | cursor: pointer; 167 | padding: 4px; 168 | border-radius: 4px; 169 | transition: ease background 0.3s; 170 | color: inherit; 171 | } 172 | 173 | .breadcrumb a:hover { 174 | text-decoration: none; 175 | cursor: pointer; 176 | background: #ddd; 177 | color: inherit; 178 | } 179 | 180 | .breadcrumb > li + li::before { 181 | color: #aaa; 182 | padding: 0; 183 | } 184 | 185 | #context-menu > li > a, 186 | .navbar ul > li > a, 187 | .dropdown-menu > li > a { 188 | cursor: pointer; 189 | } 190 | 191 | .progress { 192 | text-align:center; 193 | } 194 | 195 | #fileupload { 196 | visibility: hidden; 197 | } 198 | 199 | .bootstrap-table .dropdown-menu { 200 | min-width: 180px; 201 | } 202 | 203 | #bookmarks [data-item="goto"]:before { 204 | font-family: FontAwesome; 205 | content: ''; 206 | padding-right: 5px; 207 | } 208 | 209 | #bookmarks [data-item="goto"] { 210 | max-width: 340px; 211 | overflow: hidden; 212 | text-overflow: ellipsis; 213 | } 214 | /* 215 | .column-field-name { 216 | cursor: pointer; 217 | } 218 | 219 | td.column-field-name:hover { 220 | background-color: #dff0d8; 221 | } 222 | */ 223 | .modal-400 > .modal-dialog { 224 | width: 450px; 225 | } 226 | 227 | .modal-500 > .modal-dialog { 228 | width: 500px; 229 | } 230 | 231 | .bootbox .modal-footer .pull-right { 232 | margin-left: 5px; 233 | } 234 | 235 | .bootbox-body .img-responsive { 236 | margin: 0 auto; 237 | } 238 | 239 | .table > tbody > tr.selected > td, 240 | .table > tbody > tr.selected > th, 241 | .table > tbody > tr > td.selected, 242 | .table > tbody > tr > th.selected, 243 | .table > tfoot > tr.selected > td, 244 | .table > tfoot > tr.selected > th, 245 | .table > tfoot > tr > td.selected, 246 | .table > tfoot > tr > th.selected, 247 | .table > thead > tr.selected > td, 248 | .table > thead > tr.selected > th, 249 | .table > thead > tr > td.selected, 250 | .table > thead > tr > th.selected { 251 | /*background-color: #dff0d8;*/ 252 | background-color: #cff0c8; 253 | } 254 | 255 | tr, td { 256 | transition: ease background 0.3s; 257 | } 258 | 259 | span.name-column-link { 260 | background: #eee; 261 | border-radius: 4px; 262 | display: block; 263 | height: 22px; 264 | margin-left: 27px; 265 | padding-left: 10px; 266 | padding-right: 10px; 267 | vertical-align: middle; 268 | transition: ease background 0.3s; 269 | } 270 | 271 | tr.selected span.name-column-link { 272 | background: #eff7f7; 273 | } 274 | 275 | span.name-column-link:hover { 276 | background: #fff; 277 | cursor: pointer; 278 | } 279 | 280 | tr.selected span.name-column-link:hover { 281 | background: #fff; 282 | } 283 | 284 | ui-pnotify.stack-bottomright{ 285 | right:auto; 286 | top:auto; 287 | left:auto; 288 | bottom:auto; 289 | } 290 | 291 | .dropdown-menu { 292 | animation-name: slidenavAnimation; 293 | animation-duration:.3s; 294 | animation-iteration-count: 1; 295 | animation-timing-function: ease; 296 | animation-fill-mode: forwards; 297 | } 298 | 299 | @keyframes slidenavAnimation { 300 | from { 301 | opacity: 0; 302 | } 303 | to { 304 | opacity: 1; 305 | } 306 | } 307 | 308 | @-webkit-keyframes slidenavAnimation { 309 | from { 310 | opacity: 0; 311 | } 312 | to { 313 | opacity: 1; 314 | } 315 | } 316 | 317 | /* -- Another modals animation-- */ 318 | .modal.fade .modal-dialog { 319 | transform: unset; 320 | opacity: 0; 321 | transition: opacity 0.3s; 322 | } 323 | 324 | .modal.fade.in .modal-dialog { 325 | opacity: 1; 326 | transition: opacity 0.3s; 327 | } 328 | /* -- -- */ 329 | 330 | form[name="properties"] div { 331 | line-height: 22px; 332 | } 333 | 334 | form[name="properties"] .btn-xs { 335 | padding: 0 5px; 336 | } 337 | -------------------------------------------------------------------------------- /unauthenticated/css/filemin.min.css: -------------------------------------------------------------------------------- 1 | /* Trick to disable browser scrollbar */ 2 | body { 3 | overflow: hidden; 4 | height: 100vh; 5 | } 6 | 7 | a:focus { 8 | outline: none; 9 | outline-offset: unset; 10 | } 11 | 12 | #bottom-panel { 13 | clear: both; 14 | margin-top: 10px; 15 | margin-bottom: 10px; 16 | } 17 | 18 | #bottom-panel .panel-body { 19 | padding: 5px 10px; 20 | } 21 | 22 | #bottom-stats { 23 | margin-left: 10px; 24 | line-height: 22px; 25 | } 26 | 27 | pre.well { 28 | overflow: auto; 29 | } 30 | 31 | .tooltip { 32 | font-size: 14px; 33 | } 34 | 35 | .tooltip-inner { 36 | max-width: 100%; 37 | } 38 | 39 | ul.fancytree-container { 40 | border: none; 41 | } 42 | 43 | #filemin-tree { 44 | padding-right: 10px; 45 | margin-right: 10px; 46 | margin-top: 10px; 47 | margin-bottom: 10px; 48 | border-right: solid 2px #ddd; 49 | } 50 | 51 | #filemin-tree .input-group { 52 | margin-top: 10px; 53 | } 54 | 55 | .filemin-tab .filemin-table { 56 | width: 100%; 57 | } 58 | 59 | .filemin-tab > form > .btn { 60 | margin-right: 10px; 61 | } 62 | 63 | #tabs-plus { 64 | float: left; 65 | display: block; 66 | border: none; 67 | } 68 | 69 | #tabs-control.nav > li.tab { 70 | min-width: 140px; 71 | } 72 | 73 | #tabs-control.nav > li > a { 74 | background: #f5f5f5; 75 | color: #777; 76 | border-bottom-color: #ddd; 77 | cursor: pointer; 78 | } 79 | 80 | #tabs-control.nav > li > a:focus, 81 | #tabs-control.nav > li > a:hover, 82 | #tabs-control.nav > li.active > a { 83 | background: #fff; 84 | color: #333; 85 | border-bottom-color: transparent; 86 | } 87 | 88 | .navbar-default .navbar-nav > li > a { 89 | color: #000; 90 | } 91 | 92 | #tabs-control .btn-xs { 93 | border: none; 94 | padding: 0 5px; 95 | margin-left: 6px; 96 | margin-top: 1px; 97 | } 98 | 99 | #tabs-control.nav > li > a, 100 | #tabs-plus.nav > li > a { 101 | padding: 5px 15px; 102 | transition: background-color 0.3s ease; 103 | } 104 | 105 | #tabs-control.nav > li > a.closable { 106 | padding-right: 6px; 107 | } 108 | 109 | #tabs-container { 110 | position: relative; 111 | margin-bottom: 10px; 112 | } 113 | 114 | .path-edit { 115 | position: absolute; 116 | top: 10px; 117 | z-index: 100; 118 | } 119 | 120 | #navigator .popover { 121 | width: 300px; 122 | max-width: 400px; 123 | } 124 | /* 125 | nav.navbar { 126 | min-height: 49px; 127 | height: 49px; 128 | } 129 | /* 130 | .navbar-nav > li > a { 131 | padding-top: 11px !important; 132 | padding-bottom: 12px !important; 133 | line-height: 25px !important; 134 | font-size: 16px; 135 | transition: ease background 0.3s; 136 | } 137 | */ 138 | .navbar { 139 | margin-top: 3px; 140 | margin-bottom: 15px; 141 | } 142 | 143 | .navbar-brand { 144 | /*height: 48px;*/ 145 | padding: 1px; 146 | } 147 | 148 | .navbar-default .navbar-nav > .open > a, 149 | .navbar-default .navbar-nav > .open > a:focus, 150 | .navbar-default .navbar-nav > .open > a:hover { 151 | color: #333; 152 | } 153 | 154 | .breadcrumb { 155 | line-height: 1.42857; 156 | margin-bottom: 0; 157 | margin-left: 50px; 158 | } 159 | 160 | #new-tab { 161 | cursor: pointer; 162 | } 163 | 164 | .breadcrumb a { 165 | text-decoration: none; 166 | cursor: pointer; 167 | padding: 4px; 168 | border-radius: 4px; 169 | transition: ease background 0.3s; 170 | color: inherit; 171 | } 172 | 173 | .breadcrumb a:hover { 174 | text-decoration: none; 175 | cursor: pointer; 176 | background: #ddd; 177 | color: inherit; 178 | } 179 | 180 | .breadcrumb > li + li::before { 181 | color: #aaa; 182 | padding: 0; 183 | } 184 | 185 | #context-menu > li > a, 186 | .navbar ul > li > a, 187 | .dropdown-menu > li > a { 188 | cursor: pointer; 189 | } 190 | 191 | .progress { 192 | text-align:center; 193 | } 194 | 195 | #fileupload { 196 | visibility: hidden; 197 | } 198 | 199 | .bootstrap-table .dropdown-menu { 200 | min-width: 180px; 201 | } 202 | 203 | #bookmarks [data-item="goto"]:before { 204 | font-family: FontAwesome; 205 | content: ''; 206 | padding-right: 5px; 207 | } 208 | 209 | #bookmarks [data-item="goto"] { 210 | max-width: 340px; 211 | overflow: hidden; 212 | text-overflow: ellipsis; 213 | } 214 | /* 215 | .column-field-name { 216 | cursor: pointer; 217 | } 218 | 219 | td.column-field-name:hover { 220 | background-color: #dff0d8; 221 | } 222 | */ 223 | .modal-400 > .modal-dialog { 224 | width: 450px; 225 | } 226 | 227 | .modal-500 > .modal-dialog { 228 | width: 500px; 229 | } 230 | 231 | .bootbox .modal-footer .pull-right { 232 | margin-left: 5px; 233 | } 234 | 235 | .bootbox-body .img-responsive { 236 | margin: 0 auto; 237 | } 238 | 239 | .table > tbody > tr.selected > td, 240 | .table > tbody > tr.selected > th, 241 | .table > tbody > tr > td.selected, 242 | .table > tbody > tr > th.selected, 243 | .table > tfoot > tr.selected > td, 244 | .table > tfoot > tr.selected > th, 245 | .table > tfoot > tr > td.selected, 246 | .table > tfoot > tr > th.selected, 247 | .table > thead > tr.selected > td, 248 | .table > thead > tr.selected > th, 249 | .table > thead > tr > td.selected, 250 | .table > thead > tr > th.selected { 251 | /*background-color: #dff0d8;*/ 252 | background-color: #cff0c8; 253 | } 254 | 255 | tr, td { 256 | transition: ease background 0.3s; 257 | } 258 | 259 | span.name-column-link { 260 | background: #eee; 261 | border-radius: 4px; 262 | display: block; 263 | height: 22px; 264 | margin-left: 27px; 265 | padding-left: 10px; 266 | padding-right: 10px; 267 | vertical-align: middle; 268 | transition: ease background 0.3s; 269 | } 270 | 271 | tr.selected span.name-column-link { 272 | background: #eff7f7; 273 | } 274 | 275 | span.name-column-link:hover { 276 | background: #fff; 277 | cursor: pointer; 278 | } 279 | 280 | tr.selected span.name-column-link:hover { 281 | background: #fff; 282 | } 283 | 284 | ui-pnotify.stack-bottomright{ 285 | right:auto; 286 | top:auto; 287 | left:auto; 288 | bottom:auto; 289 | } 290 | 291 | .dropdown-menu { 292 | animation-name: slidenavAnimation; 293 | animation-duration:.3s; 294 | animation-iteration-count: 1; 295 | animation-timing-function: ease; 296 | animation-fill-mode: forwards; 297 | } 298 | 299 | @keyframes slidenavAnimation { 300 | from { 301 | opacity: 0; 302 | } 303 | to { 304 | opacity: 1; 305 | } 306 | } 307 | 308 | @-webkit-keyframes slidenavAnimation { 309 | from { 310 | opacity: 0; 311 | } 312 | to { 313 | opacity: 1; 314 | } 315 | } 316 | 317 | /* -- Another modals animation-- */ 318 | .modal.fade .modal-dialog { 319 | transform: unset; 320 | opacity: 0; 321 | transition: opacity 0.3s; 322 | } 323 | 324 | .modal.fade.in .modal-dialog { 325 | opacity: 1; 326 | transition: opacity 0.3s; 327 | } 328 | /* -- -- */ 329 | 330 | form[name="properties"] div { 331 | line-height: 22px; 332 | } 333 | 334 | form[name="properties"] .btn-xs { 335 | padding: 0 5px; 336 | } 337 | -------------------------------------------------------------------------------- /lib/Mojo/Base.pm: -------------------------------------------------------------------------------- 1 | package Mojo::Base; 2 | 3 | use strict; 4 | use warnings; 5 | use utf8; 6 | use feature (); 7 | 8 | # No imports because we get subclassed, a lot! 9 | use Carp (); 10 | 11 | # Only Perl 5.14+ requires it on demand 12 | use IO::Handle (); 13 | 14 | # Supported on Perl 5.22+ 15 | my $NAME 16 | = eval { require Sub::Util; Sub::Util->can('set_subname') } || sub { $_[1] }; 17 | 18 | # Protect subclasses using AUTOLOAD 19 | sub DESTROY { } 20 | 21 | # Declared here to avoid circular require problems in Mojo::Util 22 | sub _monkey_patch { 23 | my ($class, %patch) = @_; 24 | no strict 'refs'; 25 | no warnings 'redefine'; 26 | *{"${class}::$_"} = $NAME->("${class}::$_", $patch{$_}) for keys %patch; 27 | } 28 | 29 | sub attr { 30 | my ($self, $attrs, $value) = @_; 31 | return unless (my $class = ref $self || $self) && $attrs; 32 | 33 | Carp::croak 'Default has to be a code reference or constant value' 34 | if ref $value && ref $value ne 'CODE'; 35 | 36 | for my $attr (@{ref $attrs eq 'ARRAY' ? $attrs : [$attrs]}) { 37 | Carp::croak qq{Attribute "$attr" invalid} unless $attr =~ /^[a-zA-Z_]\w*$/; 38 | 39 | # Very performance-sensitive code with lots of micro-optimizations 40 | if (ref $value) { 41 | _monkey_patch $class, $attr, sub { 42 | return 43 | exists $_[0]{$attr} ? $_[0]{$attr} : ($_[0]{$attr} = $value->($_[0])) 44 | if @_ == 1; 45 | $_[0]{$attr} = $_[1]; 46 | $_[0]; 47 | }; 48 | } 49 | elsif (defined $value) { 50 | _monkey_patch $class, $attr, sub { 51 | return exists $_[0]{$attr} ? $_[0]{$attr} : ($_[0]{$attr} = $value) 52 | if @_ == 1; 53 | $_[0]{$attr} = $_[1]; 54 | $_[0]; 55 | }; 56 | } 57 | else { 58 | _monkey_patch $class, $attr, 59 | sub { return $_[0]{$attr} if @_ == 1; $_[0]{$attr} = $_[1]; $_[0] }; 60 | } 61 | } 62 | } 63 | 64 | sub import { 65 | my $class = shift; 66 | return unless my $flag = shift; 67 | 68 | # Base 69 | if ($flag eq '-base') { $flag = $class } 70 | 71 | # Strict 72 | elsif ($flag eq '-strict') { $flag = undef } 73 | 74 | # Module 75 | elsif ((my $file = $flag) && !$flag->can('new')) { 76 | $file =~ s!::|'!/!g; 77 | require "$file.pm"; 78 | } 79 | 80 | # ISA 81 | if ($flag) { 82 | my $caller = caller; 83 | no strict 'refs'; 84 | push @{"${caller}::ISA"}, $flag; 85 | _monkey_patch $caller, 'has', sub { attr($caller, @_) }; 86 | } 87 | 88 | # Mojo modules are strict! 89 | $_->import for qw(strict warnings utf8); 90 | feature->import(':5.10'); 91 | } 92 | 93 | sub new { 94 | my $class = shift; 95 | bless @_ ? @_ > 1 ? {@_} : {%{$_[0]}} : {}, ref $class || $class; 96 | } 97 | 98 | sub tap { 99 | my ($self, $cb) = (shift, shift); 100 | $_->$cb(@_) for $self; 101 | return $self; 102 | } 103 | 104 | 1; 105 | 106 | =encoding utf8 107 | 108 | =head1 NAME 109 | 110 | Mojo::Base - Minimal base class for Mojo projects 111 | 112 | =head1 SYNOPSIS 113 | 114 | package Cat; 115 | use Mojo::Base -base; 116 | 117 | has name => 'Nyan'; 118 | has ['age', 'weight'] => 4; 119 | 120 | package Tiger; 121 | use Mojo::Base 'Cat'; 122 | 123 | has friend => sub { Cat->new }; 124 | has stripes => 42; 125 | 126 | package main; 127 | use Mojo::Base -strict; 128 | 129 | my $mew = Cat->new(name => 'Longcat'); 130 | say $mew->age; 131 | say $mew->age(3)->weight(5)->age; 132 | 133 | my $rawr = Tiger->new(stripes => 38, weight => 250); 134 | say $rawr->tap(sub { $_->friend->name('Tacgnol') })->weight; 135 | 136 | =head1 DESCRIPTION 137 | 138 | L is a simple base class for L projects with fluent 139 | interfaces. 140 | 141 | # Automatically enables "strict", "warnings", "utf8" and Perl 5.10 features 142 | use Mojo::Base -strict; 143 | use Mojo::Base -base; 144 | use Mojo::Base 'SomeBaseClass'; 145 | 146 | All three forms save a lot of typing. 147 | 148 | # use Mojo::Base -strict; 149 | use strict; 150 | use warnings; 151 | use utf8; 152 | use feature ':5.10'; 153 | use IO::Handle (); 154 | 155 | # use Mojo::Base -base; 156 | use strict; 157 | use warnings; 158 | use utf8; 159 | use feature ':5.10'; 160 | use IO::Handle (); 161 | use Mojo::Base; 162 | push @ISA, 'Mojo::Base'; 163 | sub has { Mojo::Base::attr(__PACKAGE__, @_) } 164 | 165 | # use Mojo::Base 'SomeBaseClass'; 166 | use strict; 167 | use warnings; 168 | use utf8; 169 | use feature ':5.10'; 170 | use IO::Handle (); 171 | require SomeBaseClass; 172 | push @ISA, 'SomeBaseClass'; 173 | use Mojo::Base; 174 | sub has { Mojo::Base::attr(__PACKAGE__, @_) } 175 | 176 | =head1 FUNCTIONS 177 | 178 | L implements the following functions, which can be imported with 179 | the C<-base> flag or by setting a base class. 180 | 181 | =head2 has 182 | 183 | has 'name'; 184 | has ['name1', 'name2', 'name3']; 185 | has name => 'foo'; 186 | has name => sub {...}; 187 | has ['name1', 'name2', 'name3'] => 'foo'; 188 | has ['name1', 'name2', 'name3'] => sub {...}; 189 | 190 | Create attributes for hash-based objects, just like the L method. 191 | 192 | =head1 METHODS 193 | 194 | L implements the following methods. 195 | 196 | =head2 attr 197 | 198 | $object->attr('name'); 199 | SubClass->attr('name'); 200 | SubClass->attr(['name1', 'name2', 'name3']); 201 | SubClass->attr(name => 'foo'); 202 | SubClass->attr(name => sub {...}); 203 | SubClass->attr(['name1', 'name2', 'name3'] => 'foo'); 204 | SubClass->attr(['name1', 'name2', 'name3'] => sub {...}); 205 | 206 | Create attribute accessors for hash-based objects, an array reference can be 207 | used to create more than one at a time. Pass an optional second argument to set 208 | a default value, it should be a constant or a callback. The callback will be 209 | executed at accessor read time if there's no set value. Accessors can be 210 | chained, that means they return their invocant when they are called with an 211 | argument. 212 | 213 | =head2 new 214 | 215 | my $object = SubClass->new; 216 | my $object = SubClass->new(name => 'value'); 217 | my $object = SubClass->new({name => 'value'}); 218 | 219 | This base class provides a basic constructor for hash-based objects. You can 220 | pass it either a hash or a hash reference with attribute values. 221 | 222 | =head2 tap 223 | 224 | $object = $object->tap(sub {...}); 225 | $object = $object->tap('some_method'); 226 | $object = $object->tap('some_method', @args); 227 | 228 | Tap into a method chain to perform operations on an object within the chain 229 | (also known as a K combinator or Kestrel). The object will be the first argument 230 | passed to the callback, and is also available as C<$_>. The callback's return 231 | value will be ignored; instead, the object (the callback's first argument) will 232 | be the return value. In this way, arbitrary code can be used within (i.e., 233 | spliced or tapped into) a chained set of object method calls. 234 | 235 | # Longer version 236 | $object = $object->tap(sub { $_->some_method(@args) }); 237 | 238 | # Inject side effects into a method chain 239 | $object->foo('A')->tap(sub { say $_->foo })->foo('B'); 240 | 241 | =head1 SEE ALSO 242 | 243 | L, L, L. 244 | 245 | =cut 246 | -------------------------------------------------------------------------------- /change_properties.cgi: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl 2 | 3 | require './filemin-lib.pl'; 4 | use lib './lib'; 5 | 6 | &ReadParse(); 7 | get_paths(); 8 | 9 | print_ajax_header(); 10 | 11 | my @errors; 12 | my $permissions = $in{'permissions'}; 13 | 14 | # Fix chmod setuid/setgid to 0 for directories 15 | my $permissions = oct_to_symbolic($permissions); 16 | 17 | if(defined $in{'chmod'}) { 18 | # Selected directories and files only 19 | if($in{'applyto'} eq '1') { 20 | foreach $name (split(/\0/, $in{'name'})) { 21 | next if $name eq ''; 22 | $name =~ s/\.\.//g; 23 | $name = &simplify_path($name); 24 | if (system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 25 | push @errors, "$name - $text{'error_chmod'}: $?"; 26 | } 27 | } 28 | } 29 | 30 | # Selected files and directories and files in selected directories 31 | if($in{'applyto'} eq '2') { 32 | foreach $name (split(/\0/, $in{'name'})) { 33 | next if $name eq ''; 34 | $name =~ s/\.\.//g; 35 | $name = &simplify_path($name); 36 | if(system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 37 | push @errors, "$name - $text{'error_chmod'}: $?"; 38 | } 39 | if(-d "$cwd/$name") { 40 | if(system_logged("find ".quotemeta("$cwd/$name")." -maxdepth 1 -type f -exec chmod ".quotemeta($permissions)." {} \\;") != 0) { 41 | push @errors, "$name - $text{'error_chmod'}: $?"; 42 | } 43 | } 44 | } 45 | } 46 | 47 | # All (recursive) 48 | if($in{'applyto'} eq '3') { 49 | foreach $name (split(/\0/, $in{'name'})) { 50 | next if $name eq ''; 51 | $name =~ s/\.\.//g; 52 | $name = &simplify_path($name); 53 | if(system_logged("chmod -R ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 54 | push @errors, "$name - $text{'error_chmod'}: $?"; 55 | } 56 | } 57 | } 58 | 59 | # Selected files and files under selected directories and subdirectories 60 | if($in{'applyto'} eq '4') { 61 | foreach $name (split(/\0/, $in{'name'})) { 62 | next if $name eq ''; 63 | $name =~ s/\.\.//g; 64 | $name = &simplify_path($name); 65 | if(-f "$cwd/$name") { 66 | if(system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 67 | push @errors, "$name - $text{'error_chmod'}: $?"; 68 | } 69 | } else { 70 | if(system_logged("find ".quotemeta("$cwd/$name")." -type f -exec chmod ".quotemeta($permissions)." {} \\;") != 0) { 71 | push @errors, "$name - $text{'error_chmod'}: $?"; 72 | } 73 | } 74 | } 75 | } 76 | 77 | # Selected directories and subdirectories 78 | if($in{'applyto'} eq '5') { 79 | foreach $name (split(/\0/, $in{'name'})) { 80 | next if $name eq ''; 81 | $name =~ s/\.\.//g; 82 | $name = &simplify_path($name); 83 | if(-d "$cwd/$name") { 84 | if(system_logged("chmod ".quotemeta($permissions)." ".quotemeta("$cwd/$name")) != 0) { 85 | push @errors, "$name - $text{'error_chmod'}: $?"; 86 | } 87 | if(system_logged("find ".quotemeta("$cwd/$name")." -type d -exec chmod ".quotemeta($permissions)." {} \\;") != 0) { 88 | push @errors, "$name - $text{'error_chmod'}: $?"; 89 | } 90 | } 91 | } 92 | } 93 | } 94 | if(defined $in{'chown'}) { 95 | if (!$in{'owner'} or !$in{'group'}) { 96 | &redirect("index.cgi?path=$path"); 97 | } 98 | 99 | (my $login, my $pass, my $uid, my $gid) = getpwnam($in{'owner'}); 100 | my $grid = getgrnam($in{'group'}); 101 | 102 | if(!defined $login) { 103 | push @errors, "$in{'owner'} $text{'error_user_not_found'}"; 104 | } 105 | 106 | if(!defined $grid) { 107 | push @errors, "$in{'group'} $text{'error_group_not_found'}"; 108 | } 109 | 110 | if (scalar(@errors) == 0) { 111 | # Selected directories and files only 112 | if($in{'applyto'} eq '1') { 113 | foreach $name (split(/\0/, $in{'name'})) { 114 | next if $name eq ''; 115 | $name =~ s/\.\.//g; 116 | $name = &simplify_path($name); 117 | if(system_logged("chown $uid:$grid ".quotemeta("$cwd/$name")) != 0) { 118 | push @errors, "$name - $text{'error_chown'}: $?"; 119 | } 120 | } 121 | } 122 | 123 | # Selected files and directories and files in selected directories 124 | if($in{'applyto'} eq '2') { 125 | foreach $name (split(/\0/, $in{'name'})) { 126 | next if $name eq ''; 127 | $name =~ s/\.\.//g; 128 | $name = &simplify_path($name); 129 | if(system_logged("chown $uid:$grid ".quotemeta("$cwd/$name")) != 0) { 130 | push @errors, "$name - $text{'error_chown'}: $?"; 131 | } 132 | if(-d "$cwd/$name") { 133 | if(system_logged("find ".quotemeta("$cwd/$name")." -maxdepth 1 -type f -exec chown $uid:$grid {} \\;") != 0) { 134 | push @errors, "$name - $text{'error_chown'}: $?"; 135 | } 136 | } 137 | } 138 | } 139 | 140 | # All (recursive) 141 | if($in{'applyto'} eq '3') { 142 | foreach $name (split(/\0/, $in{'name'})) { 143 | next if $name eq ''; 144 | $name =~ s/\.\.//g; 145 | $name = &simplify_path($name); 146 | if(system_logged("chown -R $uid:$grid ".quotemeta("$cwd/$name")) != 0) { 147 | push @errors, "$name - $text{'error_chown'}: $?"; 148 | } 149 | } 150 | } 151 | 152 | # Selected files and files under selected directories and subdirectories 153 | if($in{'applyto'} eq '4') { 154 | foreach $name (split(/\0/, $in{'name'})) { 155 | next if $name eq ''; 156 | $name =~ s/\.\.//g; 157 | $name = &simplify_path($name); 158 | if(-f "$cwd/$name") { 159 | if(system_logged("chown $uid:$grid ".quotemeta("$cwd/$name")) != 0) { 160 | push @errors, "$name - $text{'error_chown'}: $?"; 161 | } 162 | } else { 163 | if(system_logged("find ".quotemeta("$cwd/$name")." -type f -exec chown $uid:$grid {} \\;") != 0) { 164 | push @errors, "$name - $text{'error_chown'}: $?"; 165 | } 166 | } 167 | } 168 | } 169 | 170 | # Selected directories and subdirectories 171 | if($in{'applyto'} eq '5') { 172 | foreach $name (split(/\0/, $in{'name'})) { 173 | next if $name eq ''; 174 | $name =~ s/\.\.//g; 175 | $name = &simplify_path($name); 176 | if(-d "$cwd/$name") { 177 | if(system_logged("chown $uid:$grid ".quotemeta("$cwd/$name")) != 0) { 178 | push @errors, "$name - $text{'error_chown'}: $?"; 179 | } 180 | if(system_logged("find ".quotemeta("$cwd/$name")." -type d -exec chown $uid:$grid {} \\;") != 0) { 181 | push @errors, "$name - $text{'error_chown'}: $?"; 182 | } 183 | } 184 | } 185 | } 186 | } 187 | } 188 | 189 | if (scalar(@errors) > 0) { 190 | print status('error', \@errors); 191 | } else { 192 | print status('success', 1); 193 | } 194 | -------------------------------------------------------------------------------- /lang/en: -------------------------------------------------------------------------------- 1 | index=Index 2 | error_opendir=Error opening directory 3 | error_creating_conf=Error creating configuration directory 4 | select_all=Select All 5 | invert_selection=Invert Selection 6 | select_none=Select None 7 | copy_selected=Copy Selected 8 | cut_selected=Cut Selected 9 | paste=Paste 10 | paste_overwriting=Paste overwriting 11 | paste_symlink=Paste symlink 12 | create_folder=Create Folder 13 | create_file=Create File 14 | compress_selected=Compress Selected 15 | chmod_selected=Chmod Selected 16 | chown_selected=Chown Selected 17 | remove_selected=Remove Selected 18 | browse_for_upload=Browse for Upload 19 | upload_files=Upload Files 20 | get_from_url=Get from URL 21 | bookmark_folder=Bookmark current folder 22 | bookmark_exists=This folder is already bookmarked 23 | bookmark_added=Folder bookmarked 24 | name=Name 25 | type=Type 26 | actions=Actions 27 | size=Size 28 | owner_user=Owner User 29 | owner_group=Owner Group 30 | permissions=Permissions 31 | last_mod_time=Modification Time 32 | rename=Rename 33 | edit=Edit 34 | extract_archive=Extract Archive 35 | edit_file=Edit file 36 | save=Save 37 | save_close=Save and close 38 | delete=Delete 39 | save_file=Save file 40 | previous_page=previous page 41 | count_uploads=file(s) selected for upload 42 | error_title=Error!!! 43 | warning_title=Warning! 44 | nothing_selected=Nothing selected 45 | error_load_template=Error loading template file 46 | create=Create 47 | new_folder_name=New folder name 48 | new_file_name=New file name 49 | new_name=New name 50 | dialog_ok=OK 51 | dialog_cancel=Cancel 52 | archive_name=Archive name 53 | dialog_compress=Compress 54 | about_to_delete=You`re about to delete following items: 55 | are_you_sure=Are you sure? 56 | user_name=User name 57 | group_name=Group name 58 | dialog_change=Change 59 | chmod_owner=Owner 60 | chmod_group=Group 61 | chmod_others=Others 62 | chmod_read=Read 63 | chmod_write=Write 64 | chmod_execute=Execute 65 | chmod_sticky=Sticky bit 66 | chmod_setgid=Setgid 67 | chmod_setuid=Setuid 68 | chmod_octal=Octal 69 | chmod_additional=Additional 70 | chmod_apply_to=Apply to 71 | chmod_dir_only=Selected directories and files only 72 | chmod_dir_and_its_files=Selected files and directories and files in selected directories 73 | chmod_all=All (recursive) 74 | chmod_dir_files_and_subs_files=Selected files and files under selected directories and subdirectories 75 | chmod_dir_and_subs=Selected directories and subdirectories 76 | dialog_file_url=URL of file to download 77 | dialog_user_name=Remote server username(if any required) 78 | dialog_user_pass=Remote server password(if any required) 79 | dialog_download=Download 80 | dialog_superuser=Superuser 81 | error_invalid_uri=No valid URL supllied!!! 82 | file_already_exists=already exists in 83 | files_ready_for_upload=View selected files 84 | errors_occured=Following errors occured while performing operation 85 | error_pasting_nonsence=Moving or overwriting in the same directory makes no sense, go have some coffee 86 | error_exists=already exists, skipping 87 | error_copy=copying failed with error: 88 | error_cut=moving failed with error: 89 | error_create=Failed to create 90 | error_rename=Failed to rename 91 | error_chmod=Failed to change permissions 92 | error_chown=Failed to change owner 93 | error_delete=unable to delete 94 | error_user_not_found=user not found on this system 95 | error_group_not_found=group does not exist on this system 96 | error_archive_type_not_supported= archive type not supported yet 97 | error_opening_file_for_writing=Could not open file for writing: 98 | error_writing_file=Error writing file: 99 | error_numeric=must be numeric! 100 | error_saving_file=Error saving file 101 | error_symlink=Error creating symlink 102 | error_exists_and_dir=exists and is a directory, skipping 103 | error_compress=Error while compressing 104 | error_saving_bookmarks=Error occured while saving bookmarks 105 | error_extract=Error extracting archive 106 | hint_copy=Copy selected files and folders to buffer 107 | hint_cut=Cut selected files and folders to buffer 108 | hint_paste=Paste files and folders from buffer to current directory 109 | hint_create_folder=Create new folder in the current directory 110 | hint_create_file=Create new file in the current directory 111 | hint_compress=Compress selected files and folders to tar.gz archive 112 | hint_chmod=Change permissions for selected files and folders 113 | hint_chown=Change owner of selected files and folders 114 | hint_remove=Remove selected files and folders 115 | hint_upload=Upload files to the current directory 116 | hint_from_url=Get file from remote URL 117 | provide_folder_name=Provide folder name 118 | provide_file_name=Provide file name 119 | provide_user_name=Provide user name 120 | provide_group_name=Provide group name 121 | provide_url=Provide URL of remote file 122 | provide_new_file_name=Provide new file name 123 | provide_search_query=Provide search query 124 | provide_correct_parameters=Provide correct parameters 125 | dialog_recursive=Recursive 126 | refresh=Refresh 127 | http_downloading=Downloading 128 | uploading=Uploading, please wait... 129 | acl_allowed_paths=Allow access to directories 130 | acl_allowed_for_edit=Mimetypes allowed for edit by builtin editor 131 | acl_work_as=Access files as Unix user 132 | acl_root=Root (grant with care to un-trusted users!) 133 | acl_same=Same as Webmin login 134 | acl_user=Specific Unix user 135 | acl_euser=Selected Unix user does not exist! 136 | acl_epath=Path $1 does not exist 137 | acl_max=Maximum size for uploaded files 138 | acl_unlimited=Unlimited 139 | acl_bytes=bytes 140 | search=Search 141 | search_label=Search query 142 | search_go=Find 143 | search_results=Search results for 144 | search_insensitive=Case insensitive search 145 | open_containing_folder=Open containing folder 146 | module_config=Module configuration 147 | config_columns_to_display=Columns to display 148 | config_per_page=Items to display per page(for old themes only) 149 | config_disable_pagination=Disable pagination (for Authentic Theme users only) 150 | config_toolbar_style=Set toolbar style to menu-like view,
with dropdowns ... and cookies (for Authentic Theme users only) 151 | config_bookmarks=Bookmarks 152 | no_bookmarks=No bookmarks yet 153 | menu_file=File 154 | menu_edit=Edit 155 | menu_tools=Tools 156 | menu_bookmarks=Bookmarks 157 | menu_select=Select 158 | menu_view=View 159 | menu_buffer=Buffer 160 | menu_open_folder=Open folder 161 | notallowed=You are not allowed to access $1. The allowed directories are : $2 162 | error_upload_emax=Uploaded file is larger than the limit of $1 163 | info_total=Total: $1 files and $2 folders 164 | properties=Properties 165 | properties_of=Properties of 166 | properties_path=Path 167 | properties_type=Type 168 | properties_size=Size 169 | properties_mtime=Modificaton time 170 | properties_atime=Last access time 171 | properties_stats=Stats 172 | change_permissions=Change permissions 173 | change_owner=Change owner 174 | copied_to_buffer= item(s) copied to buffer 175 | cut_to_buffer= item(s) cut to buffer 176 | upload_progress=Upload Progress 177 | upload_tip=Drag and drop files anywhere in browser window, any time you want 178 | upload_success=Successfully uploaded 179 | get_size=Get size 180 | not_a_directory=Not a directory 181 | dialog_overwrite=Overwrite? 182 | dialog_exists_overwrite=$1 already exists in $2.

Overwrite?

183 | filter=Filter 184 | table_LoadingMessage=Loading, please wait... 185 | table_RecordsPerPage=%s records per page 186 | table_ShowingRows=Showing %s to %s of %s rows 187 | table_DetailPagination=Showing %s rows 188 | table_Search=Filter 189 | table_NoMatches=Folder is empty 190 | table_search_NoMatches=Nothing found 191 | table_Refresh=Refresh 192 | table_Toggle=Toggle 193 | table_Columns=Columns 194 | table_AllRows=All 195 | http_download_complete=Download complete 196 | manage_bookmarks=Manage bookmarks 197 | dialog_save=Save 198 | saved_successfully=Saved successfully 199 | filter_clear=Clear 200 | navigator=Navigator 201 | editor=Editor 202 | close_tab=Close tab 203 | failed_to_read_file=Failed to read file 204 | preparing_download=Preparing download 205 | will_open=Filemin will open in 206 | new_tab=new tab 207 | extraction_started=Extraction started 208 | extraction_complete=Extraction complete 209 | broken_symlink=Symlink is broken 210 | edit_symlink=Edit symlink 211 | invalid_symlink_target=Symlink target does not exist 212 | session_loaded=Session loaded 213 | no_session_found=No session data found, starting new 214 | file_not_saved=File not saved 215 | really_close=Do you really want to close tab? 216 | newer_version_available=Newer version of Filemin is available 217 | click_to_update=Click to update 218 | module_updated=Updated module $1 ($2 kB) 219 | notice_success=Success 220 | notice_wait=Please, wait 221 | notice_saving=Saving 222 | get_sizes=Get folders sizes 223 | notice_take_while=This may take a while, keep calm 224 | toolbar_total=Total 225 | toolbar_files=Files 226 | toolbar_folders=Folders 227 | checking_for_update=Checking for update... 228 | module_up_to_date=module is up to date 229 | copy_complete=Copying finished 230 | move_complete=Moving finished 231 | upload_cancelled=Upload cancelled 232 | reload=Reload 233 | chcon_selected=Chcon Selected 234 | dialog_selinux_user=SELinux User 235 | dialog_selinux_role=SELinux Role 236 | dialog_selinux_type=SELinux Type 237 | dialog_selinux_level=SELinux Level 238 | error_chcon=Failed to change context 239 | -------------------------------------------------------------------------------- /lang/ru.UTF-8: -------------------------------------------------------------------------------- 1 | about_to_delete=Вы выбрали следующие элементы для удаления 2 | acl_allowed_for_edit=Типы файлов резрешённе для редактирования 3 | acl_allowed_paths=Разрешенные пути 4 | acl_bytes=байт 5 | acl_epath=Путь $1 не существует 6 | acl_euser=Выбранный пользователь UNIX не существует! 7 | acl_max=Максимальный размер загрузок 8 | acl_root=Root (не выдавайте не доверенным пользователям!) 9 | acl_same=Такой же как и логин Webmin 10 | acl_unlimited=Неограничено 11 | acl_user=Указанный UNIX пользователь 12 | acl_work_as=Доступ к файлам как пользователь UNIX 13 | actions=Действия 14 | archive_name=Название архива 15 | are_you_sure=Вы уверены? 16 | bookmark_added=Папка внесена в закладки 17 | bookmark_exists=Эта папка уже есть в закладках 18 | bookmark_folder=Добавить текущую папку в закладки 19 | broken_symlink=Симлинк не верен 20 | browse_for_upload=Выбрать файлы для загрузки 21 | change_owner=Сменить владельца 22 | change_permissions=Сменить права 23 | checking_for_update=Проверка обновления... 24 | chmod_additional=Дополнительно 25 | chmod_all=Все (рекурсивно) 26 | chmod_apply_to=Применить к 27 | chmod_dir_and_its_files=Выбранные файлы и папки и файлы в выбранных папках 28 | chmod_dir_and_subs=Выбранные папки и под-папки 29 | chmod_dir_files_and_subs_files=Выбранные файлы, а так же файлы в выбранных папках и под-папках 30 | chmod_dir_only=Только выбранные файлы и папки 31 | chmod_execute=Выполнение 32 | chmod_group=Группа 33 | chmod_octal=Восьмеричное 34 | chmod_others=Остальные 35 | chmod_owner=Владелец 36 | chmod_read=Чтение 37 | chmod_selected=Сменить разрешения 38 | chmod_setgid=Setgid 39 | chmod_setuid=Setuid 40 | chmod_sticky=Sticky bit 41 | chmod_write=Запись 42 | chown_selected=Сменить владельца 43 | click_to_update=Нажмите чтобы обновить 44 | close_tab=Закрыть вкладку 45 | compress_selected=Сжать выбранное 46 | config_bookmarks=Закладки 47 | config_columns_to_display=Показывать столбцы 48 | config_disable_pagination=Отключить разбиение на страницы (только для Authentic Theme) 49 | config_per_page=Количество записей на странице (только для старых тем) 50 | config_toolbar_style=Изменить стиль тулбара на меню 51 | copied_to_buffer=скопировано в буфер 52 | copy_selected=Копировать выбранное 53 | count_uploads=файл(ов) выбрано для загрузки 54 | create=Создать 55 | create_file=Создать файл 56 | create_folder=Создать папку 57 | cut_selected=Вырезать в буфер обмена 58 | cut_to_buffer=вырезано в буфер 59 | delete=Удалить 60 | dialog_cancel=Отменить 61 | dialog_change=Изменить 62 | dialog_compress=Сжать 63 | dialog_download=Загрузить 64 | dialog_exists_overwrite=$1 уже есть в $2.

Перезаписать?

65 | dialog_file_url=Ссылка на файл 66 | dialog_ok=ОК 67 | dialog_overwrite=Перезаписать? 68 | dialog_recursive=Рекурсивно 69 | dialog_save=Сохранить 70 | dialog_superuser=Superuser 71 | dialog_user_name=Имя пользователя на удалённом сервере 72 | dialog_user_pass=Пароль пользователя на удалённом сервере 73 | edit=Редактировать 74 | edit_file=Редактирование файла 75 | edit_symlink=Редактировать симлинк 76 | editor=Редактор 77 | error_archive_type_not_supported=тип архива не поддерживается 78 | error_chmod=Не удалось сменить разрешения 79 | error_chown=Не удалось сменить пользователя 80 | error_compress=Ошибки при сжатии 81 | error_copy=копирование завершилось ошибкой: 82 | error_create=не удалось создать: 83 | error_creating_conf=Ошибка при создании папки с настройками 84 | error_cut=перемещение завершилось ошибкой: 85 | error_delete=не удалось удалить 86 | error_exists=уже существует, пропущено 87 | error_exists_and_dir=существует и является папкой, пропускаем 88 | error_extract=Ошибка распаковки архива 89 | error_group_not_found=группа не существует в системе 90 | error_invalid_uri=Ошибка: Указанная ссылка не верна!!! 91 | error_load_template=Ошибка загрузки шаблона 92 | error_numeric=не является числом! 93 | error_opendir=Ошибка открытия папки 94 | error_opening_file_for_writing=Не удалось открыть файл для записи: 95 | error_pasting_nonsence=Перемещение или перезапись в той же папке не имеет смысла, сходите, выпейте кофе 96 | error_rename=Не удалось переименовать 97 | error_saving_bookmarks=Ошибка сохранения закладок 98 | error_saving_file=Ошибка сохранения файла 99 | error_symlink=Ошибка создания симлинка 100 | error_title=Ошибка!!! 101 | error_upload_emax=Загружаемый файл превышает лимит в $1 102 | error_user_not_found=пользователь не найден в системе 103 | error_writing_file=Ошибка записи файла: 104 | errors_occured=Следующие ошибки произошли во время выполнения операции 105 | extract_archive=Распаковать архив 106 | extraction_complete=Распаковка завершена 107 | extraction_started=Начата распаковка 108 | failed_to_read_file=Ошибка чтения файла 109 | file_already_exists=уже существует в 110 | file_not_saved=Файл не сохранен 111 | files_ready_for_upload=Просмотр выбранных файлов 112 | filter=Фильтр 113 | filter_clear=Очистить 114 | get_from_url=Загрузить с удалённого сервера 115 | get_size=Получить размер 116 | get_sizes=Взвесить папки 117 | group_name=Имя группы 118 | hint_chmod=Сменить разрешения для выбранных файлов и папок 119 | hint_chown=Сменить владельца выбранных файлов и папок 120 | hint_compress=Сжать выбранные файлы и папки в архив tar.gz 121 | hint_copy=Скопировать выделенные файлы и папки в буфер обмена 122 | hint_create_file=Создать новый файл в текущей директории 123 | hint_create_folder=Создать новую папку в текущей директории 124 | hint_cut=Вырезать выбранные файлы и папки в буфер обмена 125 | hint_from_url=Скачать файл с URL 126 | hint_paste=Вставить файлы и папки из буфера обмена в текущую директорию 127 | hint_remove=Удалить выбранные файлы и папки 128 | hint_upload=Закачать файлы в текущую директорию 129 | http_download_complete=Загрузка завершена 130 | http_downloading=Загрузка 131 | index=начало 132 | info_total=Всего: $1 файлов и $2 папок 133 | invalid_symlink_target=Цель симлинка не существует 134 | invert_selection=Инвертировать выделение 135 | last_mod_time=Время последней модификации 136 | manage_bookmarks=Управление закладками 137 | menu_bookmarks=Закладки 138 | menu_buffer=Буфер 139 | menu_edit=Правка 140 | menu_file=Файл 141 | menu_open_folder=Открыть папку 142 | menu_select=Выбрать 143 | menu_tools=Инструменты 144 | menu_view=Просмотр 145 | module_config=Настройки модуля 146 | module_up_to_date=модуль последней версии 147 | module_updated=Модуль $1 обновлен ($2 kB) 148 | name=Имя 149 | navigator=Навигатор 150 | new_file_name=Имя нового файла 151 | new_folder_name=Имя новой папки 152 | new_name=Новое имя 153 | new_tab=новой вкладке 154 | newer_version_available=Доступно обновление модуля 155 | no_bookmarks=Закладок нет 156 | no_session_found=Данных сессии не найдено, инициализация новой 157 | not_a_directory=Не папка 158 | notallowed=У Вас нет доступа к $1. Доступные папки : $2 159 | nothing_selected=Ничего не выбрано 160 | notice_saving=Сохраняется 161 | notice_success=Всё пучком 162 | notice_take_while=На это надо время, сохраняйте спокойствие 163 | notice_wait=Пожалуйста, ожидайте 164 | open_containing_folder=Открыть родительскую папку 165 | owner_group=Группа владельца 166 | owner_user=Владелец 167 | paste=Вставить из буфера обмена 168 | paste_overwriting=Вставить с заменой 169 | paste_symlink=Вставить симлинк 170 | permissions=Разрешения 171 | preparing_download=Подготовка загрузки 172 | previous_page=предыдущей странице 173 | properties=Свойства 174 | properties_atime=Время доступа 175 | properties_mtime=Время изменения 176 | properties_of=Свойства 177 | properties_path=Путь 178 | properties_size=Размер 179 | properties_stats=Статистика 180 | properties_type=Тип 181 | provide_correct_parameters=Введите корректные параметры 182 | provide_file_name=Укажите имя файла 183 | provide_folder_name=Укажите имя папки 184 | provide_group_name=Укажите имя группы 185 | provide_new_file_name=Укажите новое имя файла 186 | provide_search_query=Введите поисковый запрос 187 | provide_url=Укажите URL файла для загрузки 188 | provide_user_name=Укажите имя пользователя 189 | really_close=Вы правда хотите закрыть вкладку? 190 | refresh=Обновить 191 | remove_selected=Удалить выбранное 192 | rename=Переименовать 193 | save=Сохранить 194 | save_close=Сохранить и закрыть 195 | save_file=Сохранить файл 196 | saved_successfully=Успешно сохранено 197 | search=Поиск 198 | search_go=Поехали! 199 | search_insensitive=Регистронезависимый поиск 200 | search_label=Поисковый запрос 201 | search_results=Результаты поиска по запросу 202 | select_all=Выделить все 203 | select_none=Снять выделение 204 | session_loaded=Сессия загружена 205 | size=Размер 206 | table_AllRows=Все 207 | table_Columns=Колонки 208 | table_DetailPagination=Показано %s строк 209 | table_LoadingMessage=Загрузка, пожалуйста, ожидайте... 210 | table_NoMatches=Папка пуста 211 | table_RecordsPerPage=%s записей на странице 212 | table_Refresh=Обновить 213 | table_Search=Фильтр 214 | table_ShowingRows=Показаны строки с %s по %s из %s 215 | table_Toggle=Переключить 216 | table_search_NoMatches=Ничего не найдено 217 | toolbar_files=Файлы 218 | toolbar_folders=Папки 219 | toolbar_total=Всего 220 | type=Тип 221 | upload_files=Зазгузить файлы 222 | upload_progress=Прогресс загрузки 223 | upload_success=Успешно загружено 224 | upload_tip=Хватай и тащи файлы прям сюда, будет прикольно 225 | uploading=Загрузка, пожалуйста подождите... 226 | user_name=Имя пользователя 227 | warning_title=Внимание!!! 228 | will_open=Модуль запустится в 229 | copy_complete=Копирование завершено 230 | move_complete=Перемещение завершено 231 | upload_cancelled=Загрузка отменена 232 | reload=Перезагрузить 233 | --------------------------------------------------------------------------------