Compare commits
20 Commits
2b45eea937
...
46b534d447
Author | SHA1 | Date | |
---|---|---|---|
46b534d447 | |||
aba9020f34 | |||
8a4a8eaa32 | |||
67ce19ca44 | |||
fefee3c3ea | |||
9bc2752fab | |||
d17e9cf880 | |||
8dd1a9f612 | |||
7775cdc6a2 | |||
d7b8c2f974 | |||
b742a0ef61 | |||
3112e15b82 | |||
ccb055c766 | |||
5f978ac438 | |||
b5dc2e1d01 | |||
af343a1dd1 | |||
9c855ffd3b | |||
7b21f92287 | |||
e2bbae5b99 | |||
f99cf5d304 |
@ -2,6 +2,7 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import enum
|
import enum
|
||||||
import threading
|
import threading
|
||||||
|
import shutil
|
||||||
import collections
|
import collections
|
||||||
import datetime
|
import datetime
|
||||||
import functools
|
import functools
|
||||||
@ -22,6 +23,9 @@ import time
|
|||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def custom_notify(
|
def custom_notify(
|
||||||
title=None,
|
title=None,
|
||||||
msg=None,
|
msg=None,
|
||||||
@ -1056,12 +1060,37 @@ def http_server(argv):
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
default=False,
|
default=False,
|
||||||
)
|
)
|
||||||
|
parser.add_option(
|
||||||
|
'--force',
|
||||||
|
dest='force',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
)
|
||||||
|
parser.add_option(
|
||||||
|
'--token',
|
||||||
|
dest='token',
|
||||||
|
type=str,
|
||||||
|
default=None,
|
||||||
|
)
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'--port',
|
'--port',
|
||||||
dest='port',
|
dest='port',
|
||||||
type='int',
|
type='int',
|
||||||
default=80,
|
default=80,
|
||||||
)
|
)
|
||||||
|
parser.add_option(
|
||||||
|
'--no_docker',
|
||||||
|
dest='docker',
|
||||||
|
action='store_false',
|
||||||
|
default=None,
|
||||||
|
)
|
||||||
|
parser.add_option(
|
||||||
|
'-H', '--header',
|
||||||
|
dest='response_headers',
|
||||||
|
type='str',
|
||||||
|
action='append',
|
||||||
|
default=[],
|
||||||
|
)
|
||||||
parser.add_option(
|
parser.add_option(
|
||||||
'--host',
|
'--host',
|
||||||
dest='host',
|
dest='host',
|
||||||
@ -1088,46 +1117,185 @@ def http_server(argv):
|
|||||||
raise RuntimeError('invalid ip address %s' % options.host)
|
raise RuntimeError('invalid ip address %s' % options.host)
|
||||||
|
|
||||||
|
|
||||||
|
if options.docker is None:
|
||||||
|
options.docker = True
|
||||||
|
|
||||||
index_section = 'autoindex on;'
|
index_section = 'autoindex on;'
|
||||||
|
|
||||||
if options.public:
|
if options.public:
|
||||||
|
options.token = 'public'
|
||||||
|
|
||||||
location_section = 'location / {%s}' % index_section
|
location_section = 'location / {%s}' % index_section
|
||||||
else:
|
else:
|
||||||
token = os.urandom(16).hex()
|
if options.token is None:
|
||||||
|
options.token = os.urandom(16).hex()
|
||||||
|
|
||||||
|
if options.docker:
|
||||||
|
DATA_DIR = '/usr/share/nginx'
|
||||||
|
APP_DIR = '/app'
|
||||||
|
CONF_DIR = '/etc/nginx'
|
||||||
|
else:
|
||||||
|
DATA_DIR = '/opt/nginx/%s/data/' % options.token
|
||||||
|
CONF_DIR = '/opt/nginx/%s/conf/' % options.token
|
||||||
|
APP_DIR = os.path.abspath(os.path.curdir)
|
||||||
|
|
||||||
|
if not options.public:
|
||||||
if not options.prefix is None:
|
if not options.prefix is None:
|
||||||
token = options.prefix + token
|
path = options.prefix + options.token
|
||||||
print(
|
else:
|
||||||
|
path = options.token
|
||||||
|
|
||||||
|
logger.info(
|
||||||
'access url is http://%s:%d/%s/' % (
|
'access url is http://%s:%d/%s/' % (
|
||||||
options.host,
|
options.host,
|
||||||
options.port,
|
options.port,
|
||||||
token,
|
path,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
assert all([
|
||||||
|
not re.compile(
|
||||||
|
r'^[A-Za-z-]+ [a-z0-9A-Z-\.]+$'
|
||||||
|
).match(o) is None
|
||||||
|
for o in options.response_headers
|
||||||
|
])
|
||||||
|
|
||||||
location_section = (
|
location_section = (
|
||||||
'location / {'
|
'location / {'
|
||||||
'deny all;'
|
'deny all;'
|
||||||
'}'
|
'}'
|
||||||
'location /%s/ {'
|
'location /%s/ {'
|
||||||
'alias /app/;'
|
'alias %s/;'
|
||||||
|
'%s'
|
||||||
'%s'
|
'%s'
|
||||||
'}'
|
'}'
|
||||||
) % (token, index_section)
|
) % (
|
||||||
|
path,
|
||||||
|
APP_DIR,
|
||||||
|
'\n'.join([
|
||||||
|
'add_header %s;' % o
|
||||||
|
for o in options.response_headers
|
||||||
|
]),
|
||||||
|
index_section
|
||||||
|
)
|
||||||
|
|
||||||
|
if options.docker:
|
||||||
subprocess.check_call(
|
subprocess.check_call(
|
||||||
r'''
|
r'''
|
||||||
sudo docker run \
|
sudo docker run \
|
||||||
-p %s:%d:80 \
|
-p %s:%d:80 \
|
||||||
-u root \
|
-u root \
|
||||||
-it --entrypoint=/bin/bash \
|
-it --entrypoint=/bin/bash \
|
||||||
-v $PWD:/app:ro \
|
-v $PWD:%s:ro \
|
||||||
--log-driver none \
|
--log-driver none \
|
||||||
nginx:latest \
|
nginx:latest \
|
||||||
-c 'echo "server{listen 80; charset UTF-8; root /app; %s}" > /etc/nginx/conf.d/default.conf; nginx -g "daemon off;"'
|
-c 'echo "server{listen 80; charset UTF-8; root /app; %s}" > /etc/nginx/conf.d/default.conf; nginx -g "daemon off;"'
|
||||||
''' % (
|
''' % (
|
||||||
options.host,
|
options.host,
|
||||||
options.port,
|
options.port,
|
||||||
|
APP_DIR,
|
||||||
location_section,
|
location_section,
|
||||||
),
|
),
|
||||||
shell=True)
|
shell=True
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if os.path.exists(CONF_DIR):
|
||||||
|
assert options.force
|
||||||
|
shutil.rmtree(CONF_DIR)
|
||||||
|
|
||||||
|
if os.path.exists(DATA_DIR):
|
||||||
|
assert options.force
|
||||||
|
shutil.rmtree(DATA_DIR)
|
||||||
|
|
||||||
|
os.makedirs(CONF_DIR, exist_ok=True)
|
||||||
|
os.makedirs(
|
||||||
|
os.path.join(
|
||||||
|
CONF_DIR,
|
||||||
|
'conf.d',
|
||||||
|
),
|
||||||
|
exist_ok=True
|
||||||
|
)
|
||||||
|
os.makedirs(DATA_DIR, exist_ok=True)
|
||||||
|
|
||||||
|
with io.open(
|
||||||
|
os.path.join(CONF_DIR, 'nginx.conf'),
|
||||||
|
'w'
|
||||||
|
) as f:
|
||||||
|
f.write(r'''
|
||||||
|
|
||||||
|
events {
|
||||||
|
multi_accept on;
|
||||||
|
worker_connections 32;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
expires off;
|
||||||
|
open_file_cache off;
|
||||||
|
|
||||||
|
log_format main
|
||||||
|
'[$time_local][$remote_addr, $http_x_forwarded_for, $t1, $server_name]'
|
||||||
|
'[$request_length,$bytes_sent,$request_time]'
|
||||||
|
'[$status][$request]'
|
||||||
|
'[$http_user_agent][$http_referer]';
|
||||||
|
|
||||||
|
access_log /dev/null combined;
|
||||||
|
access_log /dev/stderr main;
|
||||||
|
|
||||||
|
include %s/conf.d/*.conf;
|
||||||
|
|
||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
''' % CONF_DIR)
|
||||||
|
|
||||||
|
with io.open(
|
||||||
|
os.path.join(
|
||||||
|
CONF_DIR,
|
||||||
|
'conf.d',
|
||||||
|
'default.conf',
|
||||||
|
),
|
||||||
|
'w',
|
||||||
|
) as f:
|
||||||
|
f.write(r'''
|
||||||
|
server {
|
||||||
|
server_name %s;
|
||||||
|
listen %d;
|
||||||
|
charset UTF-8;
|
||||||
|
client_max_body_size 2K;
|
||||||
|
|
||||||
|
set $t1 $remote_addr;
|
||||||
|
if ($http_x_forwarded_for)
|
||||||
|
{
|
||||||
|
set $t1 $http_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
|
root %s;
|
||||||
|
%s
|
||||||
|
}
|
||||||
|
''' % (
|
||||||
|
options.host,
|
||||||
|
options.port,
|
||||||
|
DATA_DIR,
|
||||||
|
location_section,
|
||||||
|
))
|
||||||
|
|
||||||
|
sys.stderr.flush()
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
os.execv(
|
||||||
|
'/usr/sbin/nginx',
|
||||||
|
[
|
||||||
|
'/usr/sbin/nginx',
|
||||||
|
'-c',
|
||||||
|
os.path.join(CONF_DIR, 'nginx.conf'),
|
||||||
|
'-p', DATA_DIR,
|
||||||
|
'-g', 'daemon off;',
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
def pass_ssh_osx(argv):
|
def pass_ssh_osx(argv):
|
||||||
assert isinstance(argv, list) and all([isinstance(o, str) for o in argv])
|
assert isinstance(argv, list) and all([isinstance(o, str) for o in argv])
|
||||||
@ -3196,6 +3364,7 @@ def media_keys(argv):
|
|||||||
|
|
||||||
def commands_cli():
|
def commands_cli():
|
||||||
logging.getLogger().setLevel(logging.INFO)
|
logging.getLogger().setLevel(logging.INFO)
|
||||||
|
logger.setLevel(logging.INFO)
|
||||||
|
|
||||||
msg = None
|
msg = None
|
||||||
|
|
||||||
|
@ -33,10 +33,50 @@ def f5_1(pattern, flags, info):
|
|||||||
#print([pattern, flags, info])
|
#print([pattern, flags, info])
|
||||||
completed_process = None
|
completed_process = None
|
||||||
|
|
||||||
|
options = dict(
|
||||||
|
recursive=False,
|
||||||
|
ext=[],
|
||||||
|
)
|
||||||
|
|
||||||
|
#print('fuck')
|
||||||
|
if b'r' in flags:
|
||||||
|
while True:
|
||||||
|
ext_m = re.compile('^.([^\,]+),(.*)$').match(pattern)
|
||||||
|
|
||||||
|
if pattern[:3] in [r'\r,']:
|
||||||
|
options['recursive'] = True
|
||||||
|
pattern = pattern[3:]
|
||||||
|
elif not ext_m is None:
|
||||||
|
options['ext'].append(
|
||||||
|
ext_m[1]
|
||||||
|
)
|
||||||
|
pattern = ext_m[2]
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
print([flags, pattern, options,])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
completed_process = subprocess.run([
|
git_cmd = [
|
||||||
'git', 'grep', '-n', '-P', pattern,
|
'git', 'grep',
|
||||||
], capture_output=True,)
|
'-n',
|
||||||
|
]
|
||||||
|
|
||||||
|
if options['recursive']:
|
||||||
|
git_cmd.append('--recurse-submodules')
|
||||||
|
|
||||||
|
git_cmd.extend(['-P', pattern])
|
||||||
|
|
||||||
|
if len(options['ext']) > 0:
|
||||||
|
git_cmd.extend(['--', *[
|
||||||
|
'**/*%s' % o
|
||||||
|
for o in options['ext']
|
||||||
|
]])
|
||||||
|
|
||||||
|
completed_process = subprocess.run(
|
||||||
|
git_cmd,
|
||||||
|
capture_output=True,
|
||||||
|
)
|
||||||
assert (
|
assert (
|
||||||
completed_process.returncode == 0 or
|
completed_process.returncode == 0 or
|
||||||
(
|
(
|
||||||
|
@ -19,6 +19,7 @@ set backspace=indent,eol,start
|
|||||||
|
|
||||||
set mouse=a
|
set mouse=a
|
||||||
au FileType netrw nmap <buffer> <LeftMouse> <LeftMouse> <CR>
|
au FileType netrw nmap <buffer> <LeftMouse> <LeftMouse> <CR>
|
||||||
|
au FocusLost * silent! wa
|
||||||
|
|
||||||
set term=xterm-256color
|
set term=xterm-256color
|
||||||
|
|
||||||
@ -28,12 +29,34 @@ set hls
|
|||||||
colorscheme morning
|
colorscheme morning
|
||||||
hi MatchParen guifg=white guibg=black gui=NONE ctermfg=1 ctermbg=0
|
hi MatchParen guifg=white guibg=black gui=NONE ctermfg=1 ctermbg=0
|
||||||
|
|
||||||
|
function! MakeSession()
|
||||||
|
let b:sessiondir = '.vim/'
|
||||||
|
if (filewritable(b:sessiondir) != 2)
|
||||||
|
exe 'silent !mkdir -p ' b:sessiondir
|
||||||
|
redraw!
|
||||||
|
endif
|
||||||
|
let b:filename = b:sessiondir . '/session.vim'
|
||||||
|
exe "mksession! " . b:filename
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! LoadSession()
|
||||||
|
let b:sessiondir = '.vim/'
|
||||||
|
let b:sessionfile = b:sessiondir . "/session.vim"
|
||||||
|
if (filereadable(b:sessionfile))
|
||||||
|
exe 'source ' b:sessionfile
|
||||||
|
else
|
||||||
|
echo "No session loaded."
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
map <Leader>w <C-w>
|
map <Leader>w <C-w>
|
||||||
map <Leader>wo :py3 print('fuck')<CR>
|
map <Leader>wo :py3 print('fuck')<CR>
|
||||||
map <Leader>z :wqa<CR>
|
map <Leader>z :wqa<CR>
|
||||||
map <Leader>m :py3 f1()<CR>
|
map <Leader>m :py3 f1()<CR>
|
||||||
map <Leader>r :redraw!<CR>
|
map <Leader>r :redraw!<CR>
|
||||||
|
map <Leader>s :call MakeSession()<CR>
|
||||||
|
map <Leader>l :call LoadSession()
|
||||||
map <Leader>cq :cq<CR>
|
map <Leader>cq :cq<CR>
|
||||||
map <Leader>f2 :py3 f2()<CR>
|
map <Leader>f2 :py3 f2()<CR>
|
||||||
map <Leader>f3 :source ~/.vimrc<CR>:echo 'reloaded'<CR>
|
map <Leader>f3 :source ~/.vimrc<CR>:echo 'reloaded'<CR>
|
||||||
|
Loading…
Reference in New Issue
Block a user