This packet is web file explorer with google drive like User Interface. With built in video player and image viewer and a terminal to execute command on a remote host.
1. file explorer

2. Terminal

3. Image and video viewer

library and frameworks used
1. flask
2. Jquery
3. Jhinjha 2
4. subprocess
server can be started by simply running server.py file with python3
from flask import Flask,send_file
import os
# this lib will reload custom functions after every change
# hence no need to restart server after every change
import importlib
# custom functions
import functions
# flask root object
app=Flask(__name__)
# handles requests for index page
@app.route('/')
def index():
importlib.reload(functions)
return functions.index()
# when change directory (cd) is required
@app.route('/change_page',methods=['POST'])
def change_page():
importlib.reload(functions)
return functions.change_page()
# to handle terminal commands
@app.route('/execute_command',methods=['POST'])
def execute_command():
importlib.reload(functions)
return functions.execute_command()
# to serve files other than index page
@app.route('/',methods=['GET'])
def requested_files(filename):
importlib.reload(functions)
# to edit any file in text editor
if filename == "file.html":
return functions.files()
# favion icon
elif filename == "favicon.ico":
return "" # not required so just returning an empty string
# terminal UI page
elif filename == "terminal.html":
return functions.terminal_page()
# other files from directory like png,mp4 etc
else:
return send_file(filename)
if __name__=="__main__":
# uncomment only for development debbuging
# app.config['DEBUG']=True
# runs server @ localhost
app.run(host="127.0.0.1",port=5000)
#runs server at wlan network can be accesible with other devices
# app.run(host="192.168.137.1",port=5000)
Module named functions contains helper functions
# return list of files and folder in directory
def serve_items():
# python list of names
title=os.getcwd()
# we will items in group of 5 to arrange in a row
dir_items = [[]]
for x in os.listdir():
# y will store absolute path of item
y=os.path.join(title,x)
# ext will store ext of item
ext = x.lower().split(".",1)[-1]
# if group is filled start new group of five items
if len(dir_items[-1])==5:
dir_items.append([])
# if item is directory
if os.path.isdir(x):
dir_items[-1].append({'a':y,'n':x,'type':'folder'})
# if item is a image
elif ext in ["png","jpg"]:
dir_items[-1].append({'a':y,'n':x,'type':'graphic',"ext":ext})
# if item is a video
elif ext in ["mp4","mkv","3gp"]:
dir_items[-1].append({'a':y,'n':x,'type':'video',"ext":ext})
# other files
else:
dir_items[-1].append({'a':y,'n':x,'type':'file'})
return dir_items
def index():
# return app.html page
return render_template("explorer.html",title="file explorer",dir_items=serve_items())
def terminal_page():
# return terminal UI page
return render_template("terminal.html")
def change_page():
# returns content of changed directory after cd
cd = request.values.get("cd")
os.chdir(cd)
return render_template("serve_items.html",dir_items=serve_items())
def files():
# return file editor page
return render_template("file.html")
def execute_command():
# return result of command
cmd = request.values.get("cmd")
return getoutput(cmd).replace("\n","
")
Submitted by Narender Bhadu (nandubhadu001)
Download packets of source code on Coders Packet
Comments