Browse Source

Merge pull request #55 from perara/dev

Dev
pull/59/head
Per-Arne Andersen 4 years ago
committed by GitHub
parent
commit
9386c4bcba
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      wg_dashboard_backend/const.py
  2. 21
      wg_dashboard_backend/migrations/versions/008_create_allowed_ips.py
  3. 21
      wg_dashboard_backend/migrations/versions/009_create_keep_alive.py
  4. 3
      wg_dashboard_backend/models.py
  5. 2
      wg_dashboard_backend/requirements.txt
  6. 4
      wg_dashboard_backend/routers/v1/peer.py
  7. 3
      wg_dashboard_backend/schemas.py
  8. 5
      wg_dashboard_backend/templates/peer.j2
  9. 1
      wg_dashboard_frontend/src/app/interfaces/peer.ts
  10. 19
      wg_dashboard_frontend/src/app/page/dashboard/add-server/add-server.component.html
  11. 11
      wg_dashboard_frontend/src/app/page/dashboard/add-server/add-server.component.ts
  12. 7
      wg_dashboard_frontend/src/app/page/dashboard/peer/peer.component.html

2
wg_dashboard_backend/const.py

@ -43,8 +43,6 @@ else:
DEFAULT_CONFIG_DIR = "/config" DEFAULT_CONFIG_DIR = "/config"
os.makedirs(DEFAULT_CONFIG_DIR, exist_ok=True) os.makedirs(DEFAULT_CONFIG_DIR, exist_ok=True)
PEER_DEFAULT_ALLOWED_IPS = ["0.0.0.0/0", "::/0"]
ENV_CONFIG_DIR = os.getenv("ENV_CONFIG_DIR", DEFAULT_CONFIG_DIR) ENV_CONFIG_DIR = os.getenv("ENV_CONFIG_DIR", DEFAULT_CONFIG_DIR)
os.makedirs(ENV_CONFIG_DIR, exist_ok=True) os.makedirs(ENV_CONFIG_DIR, exist_ok=True)

21
wg_dashboard_backend/migrations/versions/008_create_allowed_ips.py

@ -0,0 +1,21 @@
from sqlalchemy import *
from migrate import *
def upgrade(migrate_engine):
try:
meta = MetaData(bind=migrate_engine)
server = Table('server', meta, autoload=True)
allowed_ips = Column('allowed_ips', Text)
allowed_ips.create(server)
except:
pass
def downgrade(migrate_engine):
try:
meta = MetaData(bind=migrate_engine)
server = Table('server', meta, autoload=True)
server.c.allowed_ips.drop()
except:
pass

21
wg_dashboard_backend/migrations/versions/009_create_keep_alive.py

@ -0,0 +1,21 @@
from sqlalchemy import *
from migrate import *
def upgrade(migrate_engine):
try:
meta = MetaData(bind=migrate_engine)
server = Table('server', meta, autoload=True)
keep_alive = Column('keep_alive', Integer)
keep_alive.create(server)
except:
pass
def downgrade(migrate_engine):
try:
meta = MetaData(bind=migrate_engine)
server = Table('server', meta, autoload=True)
server.c.keep_alive.drop()
except:
pass

3
wg_dashboard_backend/models.py

@ -41,6 +41,8 @@ class WGServer(Base):
public_key = Column(sqlalchemy.String) public_key = Column(sqlalchemy.String)
endpoint = Column(sqlalchemy.String) endpoint = Column(sqlalchemy.String)
dns = Column(sqlalchemy.String) dns = Column(sqlalchemy.String)
allowed_ips = Column(sqlalchemy.String)
keep_alive = Column(sqlalchemy.Integer, default=0)
read_only = Column(sqlalchemy.Integer, default=0) read_only = Column(sqlalchemy.Integer, default=0)
post_up = Column(sqlalchemy.String) post_up = Column(sqlalchemy.String)
@ -63,6 +65,7 @@ class WGPeer(Base):
shared_key = Column(sqlalchemy.Text) shared_key = Column(sqlalchemy.Text)
dns = Column(sqlalchemy.Text) dns = Column(sqlalchemy.Text)
allowed_ips = Column(sqlalchemy.String) allowed_ips = Column(sqlalchemy.String)
keep_alive = Column(sqlalchemy.Integer, default=0)
read_only = Column(sqlalchemy.Integer, default=0) read_only = Column(sqlalchemy.Integer, default=0)
server_id = Column(Integer, sqlalchemy.ForeignKey('server.id', ondelete="CASCADE", onupdate="CASCADE")) server_id = Column(Integer, sqlalchemy.ForeignKey('server.id', ondelete="CASCADE", onupdate="CASCADE"))

2
wg_dashboard_backend/requirements.txt

@ -13,4 +13,6 @@ sqlalchemy_utils
sqlalchemy-migrate sqlalchemy-migrate
requests requests
uvicorn uvicorn
uvloop
httptools
qrcode[pil] qrcode[pil]

4
wg_dashboard_backend/routers/v1/peer.py

@ -64,8 +64,8 @@ def add_peer(
peer.private_key = keys["private_key"] peer.private_key = keys["private_key"]
peer.public_key = keys["public_key"] peer.public_key = keys["public_key"]
# Set 0.0.0.0/0, ::/0 as default allowed ips peer.allowed_ips = server.allowed_ips
peer.allowed_ips = ', '.join(const.PEER_DEFAULT_ALLOWED_IPS) peer.keep_alive = server.keep_alive
# Set unnamed # Set unnamed
peer.name = "Unnamed" if not peer_add.name else peer_add.name peer.name = "Unnamed" if not peer_add.name else peer_add.name

3
wg_dashboard_backend/schemas.py

@ -132,6 +132,7 @@ class WGPeer(GenericModel):
server_id: str server_id: str
dns: str = None dns: str = None
allowed_ips: str = None allowed_ips: str = None
keep_alive: int = None
configuration: str = None configuration: str = None
class Meta: class Meta:
@ -169,6 +170,8 @@ class WGServer(GenericModel):
post_up: str = None post_up: str = None
post_down: str = None post_down: str = None
dns: str = None dns: str = None
allowed_ips: str = None
keep_alive: int = None
read_only: int = None read_only: int = None
peers: pydantic.typing.List['WGPeer'] = [] peers: pydantic.typing.List['WGPeer'] = []

5
wg_dashboard_backend/templates/peer.j2

@ -9,6 +9,5 @@ DNS = {{ data.peer.dns }}
PublicKey = {{ data.server.public_key }} PublicKey = {{ data.server.public_key }}
AllowedIPs = {{ data.peer.allowed_ips }} AllowedIPs = {{ data.peer.allowed_ips }}
Endpoint = {{ data.server.endpoint }}:{{ data.server.listen_port }} Endpoint = {{ data.server.endpoint }}:{{ data.server.listen_port }}
{% if data.peer.shared_key %} {% if data.peer.shared_key %}PresharedKey = {{ data.peer.shared_key }}{% endif %}
PresharedKey = {{ data.peer.shared_key }} {% if data.peer.keep_alive %}PersistentKeepalive = {{data.peer.keep_alive}}{% endif %}
{% endif %}

1
wg_dashboard_frontend/src/app/interfaces/peer.ts

@ -7,6 +7,7 @@ export interface Peer {
shared_key: string; shared_key: string;
dns: string; dns: string;
allowed_ips: string; allowed_ips: string;
keep_alive: number;
name: string; name: string;
configuration: string; configuration: string;
stats: { stats: {

19
wg_dashboard_frontend/src/app/page/dashboard/add-server/add-server.component.html

@ -107,7 +107,24 @@
<input formControlName="dns" matInput [placeholder]="defaultIPv4Address"> <input formControlName="dns" matInput [placeholder]="defaultIPv4Address">
</mat-form-field> </mat-form-field>
</td> </td>
</tr></table> </tr>
<tr>
<td>
<mat-form-field class="add-server-full-width">
<mat-label>Default allowed IPs</mat-label>
<input formControlName="allowed_ips" matInput [placeholder]="defaultAllowedIPs">
</mat-form-field>
</td>
</tr>
<tr>
<td>
<mat-form-field class="add-server-full-width">
<mat-label>Default PersistentKeepalive interval</mat-label>
<input formControlName="keep_alive" matInput [placeholder]="defaultPersistentKeepalive">
</mat-form-field>
</td>
</tr>
</table>
<p><b>Keys</b></p> <p><b>Keys</b></p>
<p> <p>

11
wg_dashboard_frontend/src/app/page/dashboard/add-server/add-server.component.ts

@ -44,6 +44,8 @@ export class AddServerComponent implements OnInit {
defaultIPv4Address = "10.0.200.1" defaultIPv4Address = "10.0.200.1"
defaultDNS = this.defaultIPv4Address + ",8.8.8.8" defaultDNS = this.defaultIPv4Address + ",8.8.8.8"
defaultIPv6Address = "fd42:42:42::1" defaultIPv6Address = "fd42:42:42::1"
defaultAllowedIPs = "0.0.0.0/0, ::/0"
defaultPersistentKeepalive = 0;
serverForm: FormGroup = null; serverForm: FormGroup = null;
@ -60,11 +62,13 @@ export class AddServerComponent implements OnInit {
listen_port: new FormControl(this.defaultListenPort, [Validators.required, NumberValidator.stringIsNumber]), listen_port: new FormControl(this.defaultListenPort, [Validators.required, NumberValidator.stringIsNumber]),
endpoint: new FormControl('', Validators.required), endpoint: new FormControl('', Validators.required),
dns: new FormControl(this.defaultDNS), dns: new FormControl(this.defaultDNS),
allowed_ips: new FormControl(this.defaultAllowedIPs),
keep_alive: new FormControl(this.defaultPersistentKeepalive),
private_key: new FormControl('' ), private_key: new FormControl('' ),
public_key: new FormControl('' ), public_key: new FormControl('' ),
post_up: new FormControl(''), post_up: new FormControl(''),
post_down: new FormControl(''), post_down: new FormControl(''),
read_only: new FormControl(''), read_only: new FormControl(0),
// Unused on backend // Unused on backend
configuration: new FormControl(''), configuration: new FormControl(''),
@ -224,18 +228,17 @@ export class AddServerComponent implements OnInit {
const idx = this.servers.indexOf(this.editServer); const idx = this.servers.indexOf(this.editServer);
this.serverAPI.editServer(this.editServer, form).subscribe((server: Server) => { this.serverAPI.editServer(this.editServer, form).subscribe((server: Server) => {
this.servers[idx] = server; this.servers[idx] = server;
this.resetForm();
}); });
} else { } else {
this.serverAPI.addServer(form).subscribe((server: Server) => { this.serverAPI.addServer(form).subscribe((server: Server) => {
this.servers.push(server); this.servers.push(server);
this.resetForm();
}); });
} }
this.resetForm();
} }
getKeyPair() { getKeyPair() {

7
wg_dashboard_frontend/src/app/page/dashboard/peer/peer.component.html

@ -40,6 +40,13 @@
</mat-form-field> </mat-form-field>
</p> </p>
<p>
<mat-form-field class="full-width">
<mat-label>PersistentKeepalive interval</mat-label>
<input [disabled]="!peer._edit" name="keep_alive" [(ngModel)]="peer.keep_alive" matInput>
</mat-form-field>
</p>
<p>Keys</p> <p>Keys</p>
<p> <p>

Loading…
Cancel
Save