mirror of
https://github.com/house-of-vanity/OutFleet.git
synced 2025-07-07 01:24:06 +00:00
it works
This commit is contained in:
3
.idea/OutlineFleet.iml
generated
3
.idea/OutlineFleet.iml
generated
@ -7,4 +7,7 @@
|
|||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="PackageRequirementsSettings">
|
||||||
|
<option name="versionSpecifier" value="Strong equality (==x.y.z)" />
|
||||||
|
</component>
|
||||||
</module>
|
</module>
|
13
Dockerfile_amd64
Normal file
13
Dockerfile_amd64
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
FROM arm64v8/python:3-alpine
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
COPY static static
|
||||||
|
COPY templates templates
|
||||||
|
COPY main.py .
|
||||||
|
COPY lib.py .
|
||||||
|
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
CMD ["python", "main.py"]
|
36
main.py
36
main.py
@ -5,7 +5,7 @@ import random
|
|||||||
import string
|
import string
|
||||||
|
|
||||||
from flask import Flask, render_template, request, url_for, redirect
|
from flask import Flask, render_template, request, url_for, redirect
|
||||||
|
from flask_cors import CORS
|
||||||
from lib import Server
|
from lib import Server
|
||||||
|
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
@ -16,9 +16,10 @@ logging.basicConfig(
|
|||||||
log = logging.getLogger('OutFleet')
|
log = logging.getLogger('OutFleet')
|
||||||
|
|
||||||
SERVERS = list()
|
SERVERS = list()
|
||||||
CLIENTS = list()
|
CLIENTS = dict()
|
||||||
|
HOSTNAME = 'test.local:5000'
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
CORS(app)
|
||||||
|
|
||||||
def format_timestamp(ts):
|
def format_timestamp(ts):
|
||||||
return datetime.fromtimestamp(ts // 1000).strftime('%Y-%m-%d %H:%M:%S')
|
return datetime.fromtimestamp(ts // 1000).strftime('%Y-%m-%d %H:%M:%S')
|
||||||
@ -34,7 +35,7 @@ def update_state():
|
|||||||
global SERVERS
|
global SERVERS
|
||||||
global CLIENTS
|
global CLIENTS
|
||||||
SERVERS = list()
|
SERVERS = list()
|
||||||
CLIENTS = list()
|
CLIENTS = dict()
|
||||||
config = dict()
|
config = dict()
|
||||||
try:
|
try:
|
||||||
with open("config.yaml", "r") as file:
|
with open("config.yaml", "r") as file:
|
||||||
@ -85,7 +86,9 @@ def clients():
|
|||||||
nl=request.args.get('nl'),
|
nl=request.args.get('nl'),
|
||||||
selected_client=request.args.get('selected_client'),
|
selected_client=request.args.get('selected_client'),
|
||||||
add_client=request.args.get('add_client', None),
|
add_client=request.args.get('add_client', None),
|
||||||
format_timestamp=format_timestamp)
|
format_timestamp=format_timestamp,
|
||||||
|
dynamic_hostname=HOSTNAME,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
server = request.form['server_id']
|
server = request.form['server_id']
|
||||||
server = next((item for item in SERVERS if item.info()["server_id"] == server), None)
|
server = next((item for item in SERVERS if item.info()["server_id"] == server), None)
|
||||||
@ -178,6 +181,29 @@ def del_client():
|
|||||||
return redirect(url_for('clients', nt="User has been deleted"))
|
return redirect(url_for('clients', nt="User has been deleted"))
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/dynamic/<server_name>/<client_id>', methods=['GET'])
|
||||||
|
def dynamic(server_name, client_id):
|
||||||
|
client = next((keys for client, keys in CLIENTS.items() if client == client_id), None)
|
||||||
|
server = next((item for item in SERVERS if item.info()["name"] == server_name), None)
|
||||||
|
key = next((item for item in server.data["keys"] if item.name == client["name"]), None)
|
||||||
|
if server and client and key:
|
||||||
|
if server.data["server_id"] in client["servers"]:
|
||||||
|
log.info("Dynamic config for %s requested by '%s'", server.data["name"], client["name"])
|
||||||
|
|
||||||
|
return {
|
||||||
|
"server": server.data["hostname_for_access_keys"],
|
||||||
|
"server_port": key.port,
|
||||||
|
"password": key.password,
|
||||||
|
"method": key.method
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("CLIENT: %s", client)
|
||||||
|
log.info("SERVER: %s", server.data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return f"{server_name}, {client_id}"
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
update_state()
|
update_state()
|
||||||
app.run(host='0.0.0.0')
|
app.run(host='0.0.0.0')
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
outline-vpn-api
|
outline-vpn-api
|
||||||
PyYAML
|
PyYAML>=6.0.1
|
||||||
Flask
|
Flask>=2.3.3
|
||||||
|
flask-cors
|
@ -138,7 +138,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>{{ server.info()['name'] }}</td>
|
<td>{{ server.info()['name'] }}</td>
|
||||||
<td>
|
<td>
|
||||||
<pre style="font-size: 10pt">{% for key in server.data["keys"] %}{% if key.name == client['name'] %}{{ key.access_url }}{% endif %}{% endfor %}</pre>
|
<pre style="font-size: 10pt">{% for key in server.data["keys"] %}{% if key.name == client['name'] %}ssconf://{{ dynamic_hostname }}/dynamic/{{server.info()['name']}}/{{selected_client}}{% endif %}{% endfor %}</pre>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
Reference in New Issue
Block a user