mirror of
https://github.com/Encryptshell/Pritunl-API-crack.git
synced 2025-11-29 08:33:10 +00:00
Merge pull request #24 from amirhmoradi/patch-1
Add nginx and docker (with optional traefik proxy) for running the API
This commit is contained in:
14
README.md
14
README.md
@@ -25,12 +25,24 @@ Make sure to support the developers by buying the choosen subscription for your
|
|||||||
## How to setup (api) (optional) ##
|
## How to setup (api) (optional) ##
|
||||||
This is _optional_. You can simply use the default instance of this API (host is noted inside the `setup.py` script) and profit from "automatic" updates.
|
This is _optional_. You can simply use the default instance of this API (host is noted inside the `setup.py` script) and profit from "automatic" updates.
|
||||||
|
|
||||||
|
## API Only: Using Apache
|
||||||
Just transfer the `www` files inside a public accessible root-folder on your _dedicated_ Apache webserver (really everthing with PHP support works). Also make sure your instance has a valid SSL-certificate (Let's encrypt is enough), otherwise it may won't work.
|
Just transfer the `www` files inside a public accessible root-folder on your _dedicated_ Apache webserver (really everthing with PHP support works). Also make sure your instance has a valid SSL-certificate (Let's encrypt is enough), otherwise it may won't work.
|
||||||
An example Apache install process can be found [here](docs/apache/install.md). If you want to test your instance, just open the public accessible URI in your browser and append `/healthz` to it - if you see some JSON with the text, then everything worked!
|
An example Apache install process can be found [here](docs/apache/install.md). If you want to test your instance, just open the public accessible URI in your browser and append `/healthz` to it - if you see some JSON with the text, then everything worked!
|
||||||
|
|
||||||
|
### API Only: Using Nginx
|
||||||
|
Just transfer the `www` files inside a public accessible root-folder on your _dedicated_ Nginx webserver (really everthing with PHP support works). Also make sure your instance has a valid SSL-certificate (Let's encrypt is enough), otherwise it may won't work.
|
||||||
|
See the documentation in [Nginx Install](docs/nginx/install.md).
|
||||||
|
|
||||||
|
### API Only: Using Docker
|
||||||
|
See the documentation in [Docker Install](docs/docker/api-only-install.md).
|
||||||
|
|
||||||
|
### Fully Patched Pritunl: Using Docker
|
||||||
|
This api has also its own docker image. Take a look into the `docker` folder and enjoy!
|
||||||
|
|
||||||
|
See the documentation in [Patched Pritunl Docker Install](docs/docker/pritunl-patched-install.md).
|
||||||
|
|
||||||
### Nett2Know ###
|
### Nett2Know ###
|
||||||
* This modification will also block any communication to the Pritunl servers - so no calling home :)
|
* This modification will also block any communication to the Pritunl servers - so no calling home :)
|
||||||
* SSO will not work with this api version! As Pritunls own authentication servers handle the whole SSO stuff, track instance ids and verify users, I won't implement this part for privacy concerns (and also this would need to be securly implemented and a database).
|
* SSO will not work with this api version! As Pritunls own authentication servers handle the whole SSO stuff, track instance ids and verify users, I won't implement this part for privacy concerns (and also this would need to be securly implemented and a database).
|
||||||
* This api has also its own docker image. Take a look into the `docker` folder and enjoy!
|
|
||||||
|
|
||||||
Have fun with your new premium/enterprise/ultimate Pritunl instance!
|
Have fun with your new premium/enterprise/ultimate Pritunl instance!
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
FROM goofball222/pritunl:latest
|
FROM goofball222/pritunl:latest
|
||||||
|
|
||||||
|
ARG API_SERVER_DOMAIN
|
||||||
|
ENV API_SERVER_DOMAIN $API_SERVER_DOMAIN
|
||||||
|
|
||||||
# Yes, you will need to copy it over into the build context...
|
# Yes, you will need to copy it over into the build context...
|
||||||
COPY setup.py .
|
COPY setup.py .
|
||||||
|
|
||||||
RUN chmod +x setup.py; python3 -u setup.py --install; rm setup.py
|
RUN chmod +x setup.py; python3 -u setup.py --install --api-server ${API_SERVER_DOMAIN:-}; rm setup.py
|
||||||
40
docker/api-only/conf.d/pritunl-fake-api.conf
Normal file
40
docker/api-only/conf.d/pritunl-fake-api.conf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# Pritunl Fake API Server definition
|
||||||
|
server {
|
||||||
|
listen [::]:80 default_server;
|
||||||
|
listen 80 default_server;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
sendfile off;
|
||||||
|
tcp_nodelay on;
|
||||||
|
absolute_redirect off;
|
||||||
|
|
||||||
|
root /var/www/html;
|
||||||
|
index index.php index.html;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
# First attempt to serve request as file, then
|
||||||
|
# as directory, then fall back to index.php
|
||||||
|
try_files $uri $uri/ /index.php?path=$uri&$args;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pass the PHP scripts to PHP-FPM listening on php-fpm.sock
|
||||||
|
location ~ \.php$ {
|
||||||
|
try_files $uri =404;
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
fastcgi_pass unix:/run/php-fpm.sock;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
include fastcgi_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
|
||||||
|
expires 5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deny access to . files, for security
|
||||||
|
location ~ /\. {
|
||||||
|
log_not_found off;
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
98
docker/api-only/docker-compose.yml
Normal file
98
docker/api-only/docker-compose.yml
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# Runs this API, either on port 80 or behind Traefik, either on docker swarm or single daemon.
|
||||||
|
# Choose the right configuration for you and comment out the other.
|
||||||
|
# Read the comments carefully.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# In case you run behind Traefik, you need to setup the traefik router HOST
|
||||||
|
# You need correctly setup traefik and docker network (here called proxy_external)
|
||||||
|
#
|
||||||
|
# /!\ /!\ Make sure the mount volumes match correctly. /!\ /!\
|
||||||
|
#
|
||||||
|
# The first volume is the path to the www folder from the root of this repo.
|
||||||
|
# The path shall be a full path, or be next to this docker-compose.yml file.
|
||||||
|
# No parent folder navigation like `../../../` is allowed by docker.
|
||||||
|
#
|
||||||
|
# -> Easy solution:
|
||||||
|
# Once you have cloned this repo, you shall move this docker-compose.yml file to the root of the repo.
|
||||||
|
#
|
||||||
|
# The second volume is the path to the nginx server config file.
|
||||||
|
# This needs the commited nginx server config (or your own adapted version) to work properly.
|
||||||
|
# See the file `<repo_root>/docker/api-only/conf.d/pritunl-fake-api.conf` for more details.
|
||||||
|
|
||||||
|
version: '3.7'
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: trafex/php-nginx
|
||||||
|
volumes:
|
||||||
|
- "./www:/var/www/html:ro"
|
||||||
|
- "./docker/api-only/conf.d/pritunl-fake-api.conf:/etc/nginx/conf.d/pritunl-fake-api.conf"
|
||||||
|
#################################################################
|
||||||
|
### If you run behind Traefik COMMENT OUT the following lines ###
|
||||||
|
### BEGIN TRAEFIK_BLOCK ###
|
||||||
|
ports:
|
||||||
|
- "80:8080"
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
#################################################################
|
||||||
|
|
||||||
|
### BEGIN SINGLE_DAEMON_BLOCK ###
|
||||||
|
|
||||||
|
### If you run behind on Docker Single Daemon (NOT Swarm) uncomment the following lines ###
|
||||||
|
# networks:
|
||||||
|
# - default
|
||||||
|
# - proxy_external
|
||||||
|
# labels:
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# - "traefik.docker.network=proxy_external"
|
||||||
|
# - "traefik.tags=proxy_external"
|
||||||
|
# ### Services
|
||||||
|
# ## API
|
||||||
|
# - "traefik.http.services.pritunl-api.loadbalancer.server.port=8080"
|
||||||
|
# ### Routers
|
||||||
|
# - "traefik.http.routers.pritunl-api.entrypoints=https"
|
||||||
|
# - "traefik.http.routers.pritunl-api.rule=Host(`mypritunlfakeapi.example.com`)"
|
||||||
|
# - "traefik.http.routers.pritunl-api.service=pritunl-api"
|
||||||
|
# - "traefik.http.routers.pritunl-api.tls=true"
|
||||||
|
# - "traefik.http.routers.pritunl-api.tls.certresolver=http"
|
||||||
|
# networks:
|
||||||
|
# proxy_external:
|
||||||
|
# external: true
|
||||||
|
# name: proxy_external
|
||||||
|
|
||||||
|
### END SINGLE_DAEMON_BLOCK ###
|
||||||
|
|
||||||
|
|
||||||
|
### BEGIN SWARM_BLOCK ###
|
||||||
|
|
||||||
|
### If you run on Docker Swarm uncomment the following lines ###
|
||||||
|
# networks:
|
||||||
|
# - default
|
||||||
|
# - proxy_external
|
||||||
|
# labels:
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# deploy:
|
||||||
|
# labels:
|
||||||
|
# - "traefik.enable=true"
|
||||||
|
# - "traefik.docker.network=proxy_external"
|
||||||
|
# - "traefik.tags=proxy_external"
|
||||||
|
# ### Services
|
||||||
|
# ## API
|
||||||
|
# - "traefik.http.services.pritunl-api.loadbalancer.server.port=8080"
|
||||||
|
# ### Routers
|
||||||
|
# - "traefik.http.routers.pritunl-api.entrypoints=https"
|
||||||
|
# - "traefik.http.routers.pritunl-api.rule=Host(`mypritunlfakeapi.example.com`)"
|
||||||
|
# - "traefik.http.routers.pritunl-api.service=pritunl-api"
|
||||||
|
# - "traefik.http.routers.pritunl-api.tls=true"
|
||||||
|
# - "traefik.http.routers.pritunl-api.tls.certresolver=http"
|
||||||
|
# networks:
|
||||||
|
# proxy_external:
|
||||||
|
# external: true
|
||||||
|
# name: proxy_external
|
||||||
|
|
||||||
|
### END SWARM_BLOCK ###
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### END TRAEFIK BLOCK ###
|
||||||
|
#################################################################
|
||||||
|
|
||||||
@@ -11,6 +11,8 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: ../server
|
context: ../server
|
||||||
dockerfile: ../docker/Dockerfile
|
dockerfile: ../docker/Dockerfile
|
||||||
|
args:
|
||||||
|
- API_SERVER_DOMAIN=${API_SERVER_DOMAIN:-}
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- mongodb
|
- mongodb
|
||||||
|
|||||||
36
docs/docker/api-only-install.md
Normal file
36
docs/docker/api-only-install.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# API Only: Docker
|
||||||
|
|
||||||
|
## Only installs the API (webserver) and not the Pritunl VPN itself.
|
||||||
|
This approach runs this API, either on port 80 or behind Traefik, either on docker swarm or single daemon.
|
||||||
|
|
||||||
|
You need to have docker up and running on your server.
|
||||||
|
|
||||||
|
- In your server, clone this repo, then `cd` to the cloned folder.
|
||||||
|
- Copy the docker-compose file provided in `<repo_root>/docker/api-only/docker-compose.yml` to
|
||||||
|
the root of the cloned folder.
|
||||||
|
|
||||||
|
You shall now have: `<repo_root>/docker-compose.yml`
|
||||||
|
- Modify the `<repo_root>/docker-compose.yml` to fit your needs and config
|
||||||
|
|
||||||
|
_Watch for volumes, docker swarm or single daemon, behind Traefik or not and the HOST value if behind traefik:_
|
||||||
|
|
||||||
|
In case you run behind Traefik, you need to setup the traefik router HOST
|
||||||
|
|
||||||
|
You need correctly setup traefik and docker network (here called proxy_external)
|
||||||
|
|
||||||
|
**(!) Make sure the mount volumes match correctly.**
|
||||||
|
|
||||||
|
* The first volume is the path to the www folder from the root of this repo.
|
||||||
|
|
||||||
|
The path shall be a full path, or be next to this docker-compose.yml file.
|
||||||
|
|
||||||
|
No parent folder navigation like `../../../` is allowed by docker.
|
||||||
|
|
||||||
|
* The second volume is the path to the nginx server config file.
|
||||||
|
|
||||||
|
This needs the commited nginx server config (or your own adapted version) to work properly.
|
||||||
|
|
||||||
|
See the file `<repo_root>/docker/api-only/conf.d/pritunl-fake-api.conf` for more details.
|
||||||
|
- Run the updated `docker-compose.yml` file in daemon mode with:
|
||||||
|
|
||||||
|
`docker-compose up -d`
|
||||||
28
docs/docker/pritunl-patched-install.md
Normal file
28
docs/docker/pritunl-patched-install.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Fully Patched Pritunl: Using Docker
|
||||||
|
|
||||||
|
## Only installs the API (webserver) and not the Pritunl VPN itself.
|
||||||
|
You need to have docker up and running on your server.
|
||||||
|
|
||||||
|
This uses the docker image for Pritunl by `goofball222/pritunl` and installs the fake api hooks directly into it.
|
||||||
|
|
||||||
|
|
||||||
|
Step:
|
||||||
|
|
||||||
|
- In your server, clone this repo, then `cd` to the cloned folder.
|
||||||
|
- Go to the `docker` folder of the repo.
|
||||||
|
- Read the `<repo_root>/docker/docker-compose.yml` file carefully and edit to fit your needs (ports, volumes, network, server domain...)
|
||||||
|
- Run the `docker-compose.yml` file in daemon mode with:
|
||||||
|
|
||||||
|
`docker-compose up -d`
|
||||||
|
|
||||||
|
- This will `docker build` the patched pritunl container and run it on the following ports:
|
||||||
|
- Under this port the Pritunl web interface will be exposed (for reverse proxies)
|
||||||
|
|
||||||
|
*9700:9700*
|
||||||
|
|
||||||
|
- The following are the two default ports for the tcp+udp servers (you may edit these as needed!)
|
||||||
|
|
||||||
|
*1194:1194*
|
||||||
|
|
||||||
|
*1194:1194/udp*
|
||||||
|
|
||||||
44
docs/nginx/hard_nginx.conf
Normal file
44
docs/nginx/hard_nginx.conf
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
worker_processes auto;
|
||||||
|
error_log stderr warn;
|
||||||
|
pid /run/nginx.pid;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
# Define custom log format to include reponse times
|
||||||
|
log_format main_timed '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for" '
|
||||||
|
'$request_time $upstream_response_time $pipe $upstream_cache_status';
|
||||||
|
|
||||||
|
access_log /dev/stdout main_timed;
|
||||||
|
error_log /dev/stderr notice;
|
||||||
|
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
# Write temporary files to /tmp so they can be created as a non-privileged user
|
||||||
|
client_body_temp_path /tmp/client_temp;
|
||||||
|
proxy_temp_path /tmp/proxy_temp_path;
|
||||||
|
fastcgi_temp_path /tmp/fastcgi_temp;
|
||||||
|
uwsgi_temp_path /tmp/uwsgi_temp;
|
||||||
|
scgi_temp_path /tmp/scgi_temp;
|
||||||
|
|
||||||
|
# Hardening
|
||||||
|
proxy_hide_header X-Powered-By;
|
||||||
|
fastcgi_hide_header X-Powered-By;
|
||||||
|
server_tokens off;
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_disable "msie6";
|
||||||
|
|
||||||
|
# Include other server configs
|
||||||
|
include /etc/nginx/conf.d/*.conf;
|
||||||
|
}
|
||||||
105
docs/nginx/install.md
Normal file
105
docs/nginx/install.md
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
# HowTo install the selfhost api variant on Nginx
|
||||||
|
|
||||||
|
## Easy way:
|
||||||
|
Use docker and docker-compose files provided in `docker/api-only` folder.
|
||||||
|
|
||||||
|
See documentation [Docker Install](docs/docker/api-only-install.md).
|
||||||
|
|
||||||
|
The docker compose file has a detailed help in its top too. Read and Roll :)
|
||||||
|
|
||||||
|
|
||||||
|
## Hard way:
|
||||||
|
First, you need to install Nginx.
|
||||||
|
```bash
|
||||||
|
sudo apt-get install nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
After that, install all of the relevant PHP modules:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get -y install php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-intl php-pear php-imagick php7.4-imap php-memcache
|
||||||
|
```
|
||||||
|
|
||||||
|
Then install certbot for free SSL certs:
|
||||||
|
```bash
|
||||||
|
sudo apt-get install -y certbot python3-certbot-nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
After this, create a basic site config for the fake api server. Do this by creating a file under /etc/nginx/sites-available/ and create a symbolic link to /etc/nginx/sites-enabled.
|
||||||
|
You can refer to the provided Nginx server block available in:
|
||||||
|
`<repo_root>/docker/api-only/conf.d/pritunl-fake-api.conf`
|
||||||
|
|
||||||
|
Then generate an SSL certificate for the website with certbot.
|
||||||
|
```bash
|
||||||
|
sudo certbot --nginx -d [PUBLIC_ACCESSIBLE_API_DOMAIN]
|
||||||
|
```
|
||||||
|
|
||||||
|
Once this is done, you should check if you have all the required loaded PHP modules for this server. You can check this by running php -m, and the output should list your PHP modules.
|
||||||
|
|
||||||
|
the output should look be something like:
|
||||||
|
```bash
|
||||||
|
#...
|
||||||
|
core_module (static)
|
||||||
|
so_module (static)
|
||||||
|
watchdog_module (static)
|
||||||
|
http_module (static)
|
||||||
|
log_config_module (static)
|
||||||
|
logio_module (static)
|
||||||
|
version_module (static)
|
||||||
|
unixd_module (static)
|
||||||
|
access_compat_module (shared)
|
||||||
|
alias_module (shared)
|
||||||
|
auth_basic_module (shared)
|
||||||
|
authn_core_module (shared)
|
||||||
|
authn_file_module (shared)
|
||||||
|
authz_core_module (shared)
|
||||||
|
authz_host_module (shared)
|
||||||
|
authz_user_module (shared)
|
||||||
|
autoindex_module (shared)
|
||||||
|
deflate_module (shared)
|
||||||
|
dir_module (shared)
|
||||||
|
env_module (shared)
|
||||||
|
filter_module (shared)
|
||||||
|
http2_module (shared)
|
||||||
|
mime_module (shared)
|
||||||
|
mpm_prefork_module (shared)
|
||||||
|
negotiation_module (shared)
|
||||||
|
php7_module (shared)
|
||||||
|
proxy_module (shared)
|
||||||
|
proxy_fcgi_module (shared)
|
||||||
|
reqtimeout_module (shared)
|
||||||
|
rewrite_module (shared)
|
||||||
|
setenvif_module (shared)
|
||||||
|
socache_shmcb_module (shared)
|
||||||
|
ssl_module (shared)
|
||||||
|
status_module (shared)
|
||||||
|
#...
|
||||||
|
```
|
||||||
|
|
||||||
|
Then clone this repository if you haven't done this already and cd into the root of the project:
|
||||||
|
```bash
|
||||||
|
git clone https://gitlab.simonmicro.de/simonmicro/pritunl-fake-api.git
|
||||||
|
cd ./pritunl-fake-api
|
||||||
|
```
|
||||||
|
|
||||||
|
After this is done, copy over the API server files to the server and set permissions.
|
||||||
|
```bash
|
||||||
|
sudo cp -R ./www/* /var/www/html/
|
||||||
|
sudo chown www-data:www-data -R /var/www/html
|
||||||
|
sudo chmod -R 774 /var/www/html/
|
||||||
|
```
|
||||||
|
|
||||||
|
For your convenience, a hardened Nginx configuration is provided to help you secure and improve your server,
|
||||||
|
Read it carefully before use and make sure you understand what it does.
|
||||||
|
|
||||||
|
See: `<repo_root>/docs/nginx/hard_nginx.conf`
|
||||||
|
|
||||||
|
|
||||||
|
Then restart Nginx to make sure all of the configuration is loaded.
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Once this is done, you should get a response when you visit
|
||||||
|
|
||||||
|
`https://[PUBLIC_ACCESSIBLE_API_DOMAIN]/notification`!
|
||||||
@@ -7,7 +7,7 @@ import argparse
|
|||||||
|
|
||||||
originalApiServer = 'app.pritunl.com'
|
originalApiServer = 'app.pritunl.com'
|
||||||
originalAuthServer = 'auth.pritunl.com'
|
originalAuthServer = 'auth.pritunl.com'
|
||||||
newApiServer = 'pritunl-api.simonmicro.de'
|
defaultApiServer = 'pritunl-api.simonmicro.de'
|
||||||
searchIn = [*glob.glob('/usr/lib/python3*'), '/usr/lib/pritunl/', '/usr/share/pritunl/www/', '/usr/lib/pritunl/', '/usr/share/pritunl/www/']
|
searchIn = [*glob.glob('/usr/lib/python3*'), '/usr/lib/pritunl/', '/usr/share/pritunl/www/', '/usr/lib/pritunl/', '/usr/share/pritunl/www/']
|
||||||
|
|
||||||
print(" ____ _ _ _ _____ _ _ ____ ___ ")
|
print(" ____ _ _ _ _____ _ _ ____ ___ ")
|
||||||
@@ -22,8 +22,10 @@ interactive = True
|
|||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('--install', type=str, default='DEFAULT', nargs='?', help='Do not ask and install new API endpoint.')
|
parser.add_argument('--install', type=str, default='DEFAULT', nargs='?', help='Do not ask and install new API endpoint.')
|
||||||
parser.add_argument('--reset', type=str, default='DEFAULT', nargs='?', help='Do not ask and remove new API endpoint.')
|
parser.add_argument('--reset', type=str, default='DEFAULT', nargs='?', help='Do not ask and remove new API endpoint.')
|
||||||
|
parser.add_argument('--api-server', type=str, default=defaultApiServer, help='Set new API server.')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
newApiServer = args.api_server if args.api_server.strip() != '' else defaultApiServer
|
||||||
if args.install != 'DEFAULT':
|
if args.install != 'DEFAULT':
|
||||||
interactive = False
|
interactive = False
|
||||||
newApiServer = args.install if args.install is not None else newApiServer
|
newApiServer = args.install if args.install is not None else newApiServer
|
||||||
|
|||||||
Reference in New Issue
Block a user