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="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="PackageRequirementsSettings">
|
||||
<option name="versionSpecifier" value="Strong equality (==x.y.z)" />
|
||||
</component>
|
||||
</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
|
||||
|
||||
from flask import Flask, render_template, request, url_for, redirect
|
||||
|
||||
from flask_cors import CORS
|
||||
from lib import Server
|
||||
|
||||
logging.basicConfig(
|
||||
@ -16,9 +16,10 @@ logging.basicConfig(
|
||||
log = logging.getLogger('OutFleet')
|
||||
|
||||
SERVERS = list()
|
||||
CLIENTS = list()
|
||||
CLIENTS = dict()
|
||||
HOSTNAME = 'test.local:5000'
|
||||
app = Flask(__name__)
|
||||
|
||||
CORS(app)
|
||||
|
||||
def format_timestamp(ts):
|
||||
return datetime.fromtimestamp(ts // 1000).strftime('%Y-%m-%d %H:%M:%S')
|
||||
@ -34,7 +35,7 @@ def update_state():
|
||||
global SERVERS
|
||||
global CLIENTS
|
||||
SERVERS = list()
|
||||
CLIENTS = list()
|
||||
CLIENTS = dict()
|
||||
config = dict()
|
||||
try:
|
||||
with open("config.yaml", "r") as file:
|
||||
@ -85,7 +86,9 @@ def clients():
|
||||
nl=request.args.get('nl'),
|
||||
selected_client=request.args.get('selected_client'),
|
||||
add_client=request.args.get('add_client', None),
|
||||
format_timestamp=format_timestamp)
|
||||
format_timestamp=format_timestamp,
|
||||
dynamic_hostname=HOSTNAME,
|
||||
)
|
||||
else:
|
||||
server = request.form['server_id']
|
||||
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"))
|
||||
|
||||
|
||||
@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__':
|
||||
update_state()
|
||||
app.run(host='0.0.0.0')
|
||||
|
@ -1,3 +1,4 @@
|
||||
outline-vpn-api
|
||||
PyYAML
|
||||
Flask
|
||||
PyYAML>=6.0.1
|
||||
Flask>=2.3.3
|
||||
flask-cors
|
@ -138,7 +138,7 @@
|
||||
<tr>
|
||||
<td>{{ server.info()['name'] }}</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>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
Reference in New Issue
Block a user