Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ on:
branches: ["master"]
paths:
- "**.go"
- "ui/**"
pull_request:
branches: ["master"]
paths:
- "**.go"
- "ui/**"
jobs:
build:
runs-on: ubuntu-latest
Expand All @@ -17,6 +19,7 @@ jobs:
- name: Check out code
uses: actions/checkout@v2


- name: Set up Go 1.x
uses: actions/setup-go@v2
with:
Expand Down
33 changes: 33 additions & 0 deletions .github/workflows/ui-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: UI Tests

on:
push:
branches: ["master"]
paths:
- "ui/**"
pull_request:
branches: ["master"]
paths:
- "ui/**"

jobs:
test-ui:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2

- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 18

- name: Install dependencies
run: |
cd ui
npm install

- name: Run Vitest
run: |
cd ui
npx vitest run
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,10 @@ This guide now specifically refers to the Gatesentry software and uses the `gate

### DNS Information

Gatesentry ships with a built in DNS server, which can be used to block domains. The server as of now forwards requests to Google DNS for resolution, this can be modified from inside the `application/dns/server/server.go` file.
Gatesentry ships with a built in DNS server which can be used to block domains.
The resolver used for forwarding requests can now be configured via the
application settings ("dns_resolver"). It defaults to Google DNS
(`8.8.8.8:53`).

## Local Development

Expand Down
7 changes: 7 additions & 0 deletions application/dns/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ var (
logger *gatesentryLogger.Log
)

func SetExternalResolver(resolver string) {
if resolver != "" {
externalResolver = resolver
}
}

var server *dns.Server
var serverRunning bool = false
var restartDnsSchedulerChan chan bool
Expand All @@ -54,6 +60,7 @@ func StartDNSServer(basePath string, ilogger *gatesentryLogger.Log, blockedLists

logger = ilogger
logsPath = basePath + logsPath
SetExternalResolver(settings.Get("dns_resolver"))
go gatesentryDnsHttpServer.StartHTTPServer()
// InitializeLogs()
// go gatesentryDnsFilter.InitializeBlockedDomains(&blockedDomains, &blockedLists)
Expand Down
1 change: 1 addition & 0 deletions application/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ func (R *GSRuntime) Init() {
R.GSSettings.SetDefault("timezone", "Europe/Oslo")
R.GSSettings.SetDefault("enable_https_filtering", "false")
R.GSSettings.SetDefault("enable_dns_server", "true")
R.GSSettings.SetDefault("dns_resolver", "8.8.8.8:53")
R.GSSettings.SetDefault("idemail", "")
R.GSSettings.SetDefault("enable_ai_image_filtering", "false")
R.GSSettings.SetDefault("ai_scanner_url", "")
Expand Down
17 changes: 11 additions & 6 deletions application/webserver/endpoints/handler_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"log"
"time"

gatesentryDnsServer "bitbucket.org/abdullah_irfan/gatesentryf/dns/server"
gatesentry2storage "bitbucket.org/abdullah_irfan/gatesentryf/storage"
gatesentryWebserverTypes "bitbucket.org/abdullah_irfan/gatesentryf/webserver/types"
"github.com/badoux/checkmail"
Expand All @@ -24,7 +25,7 @@ func GSApiSettingsGET(requestedId string, settings *gatesentry2storage.MapStore)
value = string(valueJson)
}
return struct{ Value string }{Value: value}
case "blocktimes", "strictness", "timezone", "idemail", "enable_https_filtering", "capem", "keypem", "enable_dns_server", "dns_custom_entries", "ai_scanner_url", "enable_ai_image_filtering", "EnableUsers":
case "blocktimes", "strictness", "timezone", "idemail", "enable_https_filtering", "capem", "keypem", "enable_dns_server", "dns_custom_entries", "ai_scanner_url", "enable_ai_image_filtering", "EnableUsers", "dns_resolver":
value := settings.Get(requestedId)
return struct {
Key string
Expand Down Expand Up @@ -81,12 +82,16 @@ func GSApiSettingsPOST(requestedId string, settings *gatesentry2storage.MapStore
requestedId == "enable_dns_server" ||
requestedId == "enable_https_filtering" ||
requestedId == "enable_ai_image_filtering" ||
requestedId == "ai_scanner_url" ||
requestedId == "EnableUsers" ||
requestedId == "strictness" ||
requestedId == "capem" ||
requestedId == "keypem" {
requestedId == "ai_scanner_url" ||
requestedId == "EnableUsers" ||
requestedId == "strictness" ||
requestedId == "capem" ||
requestedId == "keypem" ||
requestedId == "dns_resolver" {
settings.Update(requestedId, temp.Value)
if requestedId == "dns_resolver" {
gatesentryDnsServer.SetExternalResolver(temp.Value)
}
}

// fmt.Println( temp );
Expand Down
8 changes: 6 additions & 2 deletions ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,24 @@
"build": "vite build",
"preview": "vite preview",
"check": "svelte-check --tsconfig ./tsconfig.json",
"format": "npx prettier --write --plugin prettier-plugin-svelte src/*"
"format": "npx prettier --write --plugin prettier-plugin-svelte src/*",
"test": "vitest"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.4.2",
"@testing-library/svelte": "^5.2.8",
"@tsconfig/svelte": "^5.0.0",
"carbon-components-svelte": "^0.79.0",
"carbon-icons-svelte": "^12.1.0",
"jsdom": "^22.0.0",
"prettier": "^3.0.3",
"prettier-plugin-svelte": "^3.0.3",
"svelte": "^4.0.5",
"svelte-check": "^3.4.6",
"tslib": "^2.6.0",
"typescript": "^5.0.2",
"vite": "^4.5.3"
"vite": "^4.5.3",
"vitest": "^1.0.0"
},
"dependencies": {
"@carbon/charts": "^1.11.21",
Expand Down
11 changes: 11 additions & 0 deletions ui/src/components/__tests__/dns_ui.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { readFileSync } from 'fs';
import { compile } from 'svelte/compiler';
import { test, expect } from 'vitest';
import path from 'path';

test('dns page exposes resolver input', () => {
const file = path.resolve(__dirname, '../../routes/dns/dns.svelte');
const source = readFileSync(file, 'utf-8');
const { js } = compile(source, { generate: 'dom' });
expect(js.code).toMatch('dns_resolver');
});
3 changes: 2 additions & 1 deletion ui/src/language/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@
"Edit": "Edit",
"Blocked Keywords": "Blocked Keywords",
"Dashboard": "Dashboard",
"Logs": "Logs"
"Logs": "Logs",
"DNS Resolver": "DNS Resolver"
}
9 changes: 9 additions & 0 deletions ui/src/routes/dns/dns.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import { store } from "../../store/apistore";
import { set } from "lodash";
import { Restart } from "carbon-icons-svelte";
import ConnectedSettingInput from "../../components/connectedSettingInput.svelte";
let dnsInfo = null;

const loadDnsInfo = async () => {
Expand Down Expand Up @@ -75,6 +76,14 @@
</div>
{/if}
<br />
<ConnectedSettingInput
keyName="dns_resolver"
title={$_("DNS Resolver")}
labelText={$_("DNS Resolver")}
type="text"
helperText=""
/>
<br />
<DnsArecords on:updatednsinfo={onUpdateDnsInfo} />
</Column>
<Column sm={11} md={11} lg={11}>
Expand Down
9 changes: 9 additions & 0 deletions ui/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { defineConfig } from 'vitest/config';
import { svelte } from '@sveltejs/vite-plugin-svelte';

export default defineConfig({
plugins: [svelte()],
test: {
environment: 'jsdom'
}
});
Loading