From cce6a90a1503cf117080172493703680287bebd6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?=
Date: Mon, 6 Apr 2020 14:56:20 +0200
Subject: [PATCH 01/31] ts-lint fixes
---
client/src/components/context.vue | 32 +++++++++++++++----------------
client/src/locale/en-us.ts | 2 +-
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/client/src/components/context.vue b/client/src/components/context.vue
index 11cf348f..34e82301 100644
--- a/client/src/components/context.vue
+++ b/client/src/components/context.vue
@@ -165,12 +165,12 @@
kick(member: Member) {
this.$swal({
- title: this.$t('context.confirm.kick_title', { name: member.displayname }),
- text: this.$t('context.confirm.kick_text', { name: member.displayname }),
+ title: this.$t('context.confirm.kick_title', { name: member.displayname }) as string,
+ text: this.$t('context.confirm.kick_text', { name: member.displayname }) as string,
icon: 'warning',
showCancelButton: true,
- confirmButtonText: this.$t('context.confirm.button_yes'),
- cancelButtonText: this.$t('context.confirm.button_cancel'),
+ confirmButtonText: this.$t('context.confirm.button_yes') as string,
+ cancelButtonText: this.$t('context.confirm.button_cancel') as string,
}).then(({ value }) => {
if (value) {
this.$accessor.user.kick(member)
@@ -180,12 +180,12 @@
ban(member: Member) {
this.$swal({
- title: this.$t('context.confirm.ban_title', { name: member.displayname }),
- text: this.$t('context.confirm.ban_text', { name: member.displayname }),
+ title: this.$t('context.confirm.ban_title', { name: member.displayname }) as string,
+ text: this.$t('context.confirm.ban_text', { name: member.displayname }) as string,
icon: 'warning',
showCancelButton: true,
- confirmButtonText: this.$t('context.confirm.button_yes'),
- cancelButtonText: this.$t('context.confirm.button_cancel'),
+ confirmButtonText: this.$t('context.confirm.button_yes') as string,
+ cancelButtonText: this.$t('context.confirm.button_cancel') as string,
}).then(({ value }) => {
if (value) {
this.$accessor.user.ban(member)
@@ -195,12 +195,12 @@
mute(member: Member) {
this.$swal({
- title: this.$t('context.confirm.mute_title', { name: member.displayname }),
- text: this.$t('context.confirm.mute_text', { name: member.displayname }),
+ title: this.$t('context.confirm.mute_title', { name: member.displayname }) as string,
+ text: this.$t('context.confirm.mute_text', { name: member.displayname }) as string,
icon: 'warning',
showCancelButton: true,
- confirmButtonText: this.$t('context.confirm.button_yes'),
- cancelButtonText: this.$t('context.confirm.button_cancel'),
+ confirmButtonText: this.$t('context.confirm.button_yes') as string,
+ cancelButtonText: this.$t('context.confirm.button_cancel') as string,
}).then(({ value }) => {
if (value) {
this.$accessor.user.mute(member)
@@ -210,12 +210,12 @@
unmute(member: Member) {
this.$swal({
- title: this.$t('context.confirm.unmute_title', { name: member.displayname }),
- text: this.$t('context.confirm.unmute_text', { name: member.displayname }),
+ title: this.$t('context.confirm.unmute_title', { name: member.displayname }) as string,
+ text: this.$t('context.confirm.unmute_text', { name: member.displayname }) as string,
icon: 'warning',
showCancelButton: true,
- confirmButtonText: this.$t('context.confirm.button_yes'),
- cancelButtonText: this.$t('context.confirm.button_cancel'),
+ confirmButtonText: this.$t('context.confirm.button_yes') as string,
+ cancelButtonText: this.$t('context.confirm.button_cancel') as string,
}).then(({ value }) => {
if (value) {
this.$accessor.user.unmute(member)
diff --git a/client/src/locale/en-us.ts b/client/src/locale/en-us.ts
index 895ac208..62ff7df7 100644
--- a/client/src/locale/en-us.ts
+++ b/client/src/locale/en-us.ts
@@ -37,7 +37,7 @@ export const context = {
unmute_text: 'Are you sure you want to unmute {name}?',
button_yes: 'Yes',
button_cancel: 'Cancel',
- }
+ },
}
export const controls = {
From 85f2f41176025cb23c8206593486fd206f82a580 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?=
Date: Mon, 6 Apr 2020 15:29:53 +0200
Subject: [PATCH 02/31] i18n improved
---
client/src/components/side.vue | 4 ++--
client/src/locale/en-us.ts | 18 +++++++++++-------
client/src/neko/index.ts | 18 +++++++++---------
3 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/client/src/components/side.vue b/client/src/components/side.vue
index 033ac07e..db1ff814 100644
--- a/client/src/components/side.vue
+++ b/client/src/components/side.vue
@@ -4,11 +4,11 @@
-
- {{ $t('chat') }}
+ {{ $t('side.chat') }}
-
- {{ $t('settings') }}
+ {{ $t('side.settings') }}
diff --git a/client/src/locale/en-us.ts b/client/src/locale/en-us.ts
index 62ff7df7..1dfe6454 100644
--- a/client/src/locale/en-us.ts
+++ b/client/src/locale/en-us.ts
@@ -1,13 +1,13 @@
-export const chat = 'Chat'
-export const settings = 'Settings'
export const logout = 'logout'
export const unsupported = 'this browser does not support webrtc'
export const admin_loggedin = 'You are logged in as an admin'
export const you = 'You'
-export const ok = 'ok'
export const send_a_message = 'Send a message'
-export const connected = 'connected'
-export const disconnected = 'disconnected'
+
+export const side = {
+ chat: 'Chat',
+ settings: 'Settings',
+}
export const connect = {
title: 'Please Login',
@@ -63,11 +63,15 @@ export const setting = {
}
export const connection = {
- success: 'Successfully connected',
+ logged_out: 'You have been logged out!',
+ connected: 'Successfully connected',
+ disconnected: 'You have been disconnected',
+ button_confirm: 'Ok',
}
export const notifications = {
- logged_out: '{name} logged out!',
+ connected: '{name} connected',
+ disconnected: '{name} disconnected',
controls_taken: '{name} took the controls',
controls_taken_force: 'force took the controls',
controls_taken_steal: 'took the controls from {name}',
diff --git a/client/src/neko/index.ts b/client/src/neko/index.ts
index f2fca887..1db8fdd3 100644
--- a/client/src/neko/index.ts
+++ b/client/src/neko/index.ts
@@ -54,9 +54,9 @@ export class NekoClient extends BaseClient implements EventEmitter {
this.disconnect()
this.cleanup()
this.$vue.$swal({
- title: this.$vue.$t('notifications.logged_out', { name: this.$vue.$t('you') }),
+ title: this.$vue.$t('connection.logged_out', { name: this.$vue.$t('you') }),
icon: 'info',
- confirmButtonText: this.$vue.$t('ok') as string,
+ confirmButtonText: this.$vue.$t('connection.button_confirm') as string,
})
}
@@ -75,7 +75,7 @@ export class NekoClient extends BaseClient implements EventEmitter {
this.$vue.$notify({
group: 'neko',
type: 'success',
- title: this.$vue.$t('connection.success') as string,
+ title: this.$vue.$t('connection.connected') as string,
duration: 5000,
speed: 1000,
})
@@ -86,7 +86,7 @@ export class NekoClient extends BaseClient implements EventEmitter {
this.$vue.$notify({
group: 'neko',
type: 'error',
- title: this.$vue.$t('disconnected') as string,
+ title: this.$vue.$t('connection.disconnected') as string,
text: reason ? reason.message : undefined,
duration: 5000,
speed: 1000,
@@ -111,10 +111,10 @@ export class NekoClient extends BaseClient implements EventEmitter {
protected [EVENT.SYSTEM.DISCONNECT]({ message }: DisconnectPayload) {
this.onDisconnected(new Error(message))
this.$vue.$swal({
- title: this.$vue.$t('disconnected'),
+ title: this.$vue.$t('connection.disconnected'),
text: message,
icon: 'error',
- confirmButtonText: this.$vue.$t('ok') as string,
+ confirmButtonText: this.$vue.$t('connection.button_confirm') as string,
})
}
@@ -125,7 +125,7 @@ export class NekoClient extends BaseClient implements EventEmitter {
this.$accessor.user.setMembers(members)
this.$accessor.chat.newMessage({
id: this.id,
- content: this.$vue.$t('connected') as string,
+ content: this.$vue.$t('notifications.connected', { name: '' }) as string,
type: 'event',
created: new Date(),
})
@@ -137,7 +137,7 @@ export class NekoClient extends BaseClient implements EventEmitter {
if (member.id !== this.id) {
this.$accessor.chat.newMessage({
id: member.id,
- content: this.$vue.$t('connected') as string,
+ content: this.$vue.$t('notifications.connected', { name: '' }) as string,
type: 'event',
created: new Date(),
})
@@ -152,7 +152,7 @@ export class NekoClient extends BaseClient implements EventEmitter {
this.$accessor.chat.newMessage({
id: member.id,
- content: this.$vue.$t('disconnected') as string,
+ content: this.$vue.$t('notifications.disconnected', { name: '' }) as string,
type: 'event',
created: new Date(),
})
From 2fa5839b9982681eb4921cedcf735cb787710641 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?=
Date: Mon, 6 Apr 2020 15:32:06 +0200
Subject: [PATCH 03/31] connection.logged_out does not have 'you' anymore
---
client/src/neko/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/src/neko/index.ts b/client/src/neko/index.ts
index 1db8fdd3..880e7935 100644
--- a/client/src/neko/index.ts
+++ b/client/src/neko/index.ts
@@ -54,7 +54,7 @@ export class NekoClient extends BaseClient implements EventEmitter {
this.disconnect()
this.cleanup()
this.$vue.$swal({
- title: this.$vue.$t('connection.logged_out', { name: this.$vue.$t('you') }),
+ title: this.$vue.$t('connection.logged_out'),
icon: 'info',
confirmButtonText: this.$vue.$t('connection.button_confirm') as string,
})
From 080766481c49f9711e35af1374df7707aea9beb6 Mon Sep 17 00:00:00 2001
From: Ellen Marie Dash
Date: Mon, 6 Apr 2020 13:09:32 -0400
Subject: [PATCH 04/31] Fix _+: keys in Firefox
19466b5 fixes the keys without shift; this fixes them with shift.
Related: https://github.com/nurdism/neko/commit/19466b5625b6e6c2796faa7eeac0e3be1797f7f5
Context: https://github.com/nurdism/neko/issues/51#issuecomment-609877197
---
client/src/components/video.vue | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/client/src/components/video.vue b/client/src/components/video.vue
index 00dd11b7..b56add24 100644
--- a/client/src/components/video.vue
+++ b/client/src/components/video.vue
@@ -466,15 +466,15 @@
// frick you firefox
getCode(e: KeyboardEvent): number {
let key = e.keyCode
- if (key === 59 && e.key === ';') {
+ if (key === 59 && (e.key === ';' || e.key === ':')) {
key = 186
}
- if (key === 61 && e.key === '=') {
+ if (key === 61 && (e.key === '=' || e.key === '+')) {
key = 187
}
- if (key === 173 && e.key === '-') {
+ if (key === 173 && (e.key === '-' || e.key === '_')) {
key = 189
}
From 414b5a80151a697402d7c62e1cb5f779e601c01e Mon Sep 17 00:00:00 2001
From: Craig
Date: Mon, 6 Apr 2020 20:14:08 +0000
Subject: [PATCH 05/31] unlock room if no admins online
---
server/internal/session/manager.go | 21 ++++++++++++++++++---
server/internal/types/session.go | 3 ++-
server/internal/websocket/handler.go | 4 ++++
3 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/server/internal/session/manager.go b/server/internal/session/manager.go
index 15b2d4f1..8e51bc5a 100644
--- a/server/internal/session/manager.go
+++ b/server/internal/session/manager.go
@@ -88,6 +88,21 @@ func (manager *SessionManager) Get(id string) (types.Session, bool) {
return session, ok
}
+func (manager *SessionManager) Admins() []*types.Member {
+ members := []*types.Member{}
+ for _, session := range manager.members {
+ if !session.connected || !session.admin {
+ continue
+ }
+
+ member := session.Member()
+ if member != nil {
+ members = append(members, member)
+ }
+ }
+ return members
+}
+
func (manager *SessionManager) Members() []*types.Member {
members := []*types.Member{}
for _, session := range manager.members {
@@ -113,7 +128,7 @@ func (manager *SessionManager) Destroy(id string) error {
manager.remote.StopStream()
}
- manager.emmiter.Emit("destroyed", id)
+ manager.emmiter.Emit("destroyed", id, session)
return err
}
@@ -155,9 +170,9 @@ func (manager *SessionManager) OnHostCleared(listener func(id string)) {
})
}
-func (manager *SessionManager) OnDestroy(listener func(id string)) {
+func (manager *SessionManager) OnDestroy(listener func(id string, session types.Session)) {
manager.emmiter.On("destroyed", func(payload ...interface{}) {
- listener(payload[0].(string))
+ listener(payload[0].(string), payload[1].(*Session))
})
}
diff --git a/server/internal/types/session.go b/server/internal/types/session.go
index 1c8acabd..acdcac64 100644
--- a/server/internal/types/session.go
+++ b/server/internal/types/session.go
@@ -36,12 +36,13 @@ type SessionManager interface {
Has(id string) bool
Get(id string) (Session, bool)
Members() []*Member
+ Admins() []*Member
Destroy(id string) error
Clear() error
Broadcast(v interface{}, exclude interface{}) error
OnHost(listener func(id string))
OnHostCleared(listener func(id string))
- OnDestroy(listener func(id string))
+ OnDestroy(listener func(id string, session Session))
OnCreated(listener func(id string, session Session))
OnConnected(listener func(id string, session Session))
}
diff --git a/server/internal/websocket/handler.go b/server/internal/websocket/handler.go
index e350752d..fddd63fa 100644
--- a/server/internal/websocket/handler.go
+++ b/server/internal/websocket/handler.go
@@ -42,6 +42,10 @@ func (h *MessageHandler) Connected(id string, socket *WebSocket) (bool, string,
}
func (h *MessageHandler) Disconnected(id string) error {
+ if h.locked && len(h.sessions.Admins()) == 0 {
+ h.locked = false
+ }
+
return h.sessions.Destroy(id)
}
From 584513de9b2b883a2a759ec88f432a0325000664 Mon Sep 17 00:00:00 2001
From: Craig
Date: Mon, 6 Apr 2020 20:14:30 +0000
Subject: [PATCH 06/31] reverse proxy mode
---
server/internal/types/config/websocket.go | 7 +++++++
server/internal/websocket/websocket.go | 8 ++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/server/internal/types/config/websocket.go b/server/internal/types/config/websocket.go
index b93dc594..099f34bd 100644
--- a/server/internal/types/config/websocket.go
+++ b/server/internal/types/config/websocket.go
@@ -8,6 +8,7 @@ import (
type WebSocket struct {
Password string
AdminPassword string
+ Proxy bool
}
func (WebSocket) Init(cmd *cobra.Command) error {
@@ -21,10 +22,16 @@ func (WebSocket) Init(cmd *cobra.Command) error {
return err
}
+ cmd.PersistentFlags().Bool("proxy", false, "enable reverse proxy mode")
+ if err := viper.BindPFlag("proxy", cmd.PersistentFlags().Lookup("proxy")); err != nil {
+ return err
+ }
+
return nil
}
func (s *WebSocket) Set() {
s.Password = viper.GetString("password")
s.AdminPassword = viper.GetString("password_admin")
+ s.Proxy = viper.GetBool("proxy")
}
diff --git a/server/internal/websocket/websocket.go b/server/internal/websocket/websocket.go
index 1fe45986..fc6b4e35 100644
--- a/server/internal/websocket/websocket.go
+++ b/server/internal/websocket/websocket.go
@@ -70,7 +70,7 @@ func (ws *WebSocketHandler) Start() error {
}
})
- ws.sessions.OnDestroy(func(id string) {
+ ws.sessions.OnDestroy(func(id string, session types.Session) {
if err := ws.handler.SessionDestroyed(id); err != nil {
ws.logger.Warn().Str("id", id).Err(err).Msg("session destroyed with and error")
} else {
@@ -191,7 +191,11 @@ func (ws *WebSocketHandler) Upgrade(w http.ResponseWriter, r *http.Request) erro
}
func (ws *WebSocketHandler) authenticate(r *http.Request) (string, string, bool, error) {
- ip := utils.ReadUserIP(r)
+ ip := r.RemoteAddr
+
+ if ws.conf.Proxy {
+ ip = utils.ReadUserIP(r)
+ }
id, err := utils.NewUID(32)
if err != nil {
From 470bb2f659f49301aa84b0451b432347dfe621d3 Mon Sep 17 00:00:00 2001
From: Craig
Date: Mon, 6 Apr 2020 20:14:50 +0000
Subject: [PATCH 07/31] type error
---
server/internal/types/config/broadcast.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/internal/types/config/broadcast.go b/server/internal/types/config/broadcast.go
index f31888a3..35c35024 100644
--- a/server/internal/types/config/broadcast.go
+++ b/server/internal/types/config/broadcast.go
@@ -6,7 +6,7 @@ import (
)
type Broadcast struct {
- Enabled string
+ Enabled bool
Display string
Device string
AudioParams string
From 8cea01f1645995a13efae6e616baf0396f069256 Mon Sep 17 00:00:00 2001
From: Craig
Date: Mon, 6 Apr 2020 20:15:32 +0000
Subject: [PATCH 08/31] fix CreatePipeline func
---
server/internal/gst/gst.go | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/server/internal/gst/gst.go b/server/internal/gst/gst.go
index 80c07979..1c0eb90d 100644
--- a/server/internal/gst/gst.go
+++ b/server/internal/gst/gst.go
@@ -68,7 +68,7 @@ func init() {
func CreateRTMPPipeline(pipelineDevice string, pipelineDisplay string, pipelineRTMP string) (*Pipeline, error) {
video := fmt.Sprintf(videoSrc, pipelineDisplay)
audio := fmt.Sprintf(audioSrc, pipelineDevice)
- return CreatePipeline(fmt.Sprintf("%s ! x264enc ! flv. ! %s ! faac ! flv. ! flvmux name='flv' ! rtmpsink location='%s'", video, audio, pipelineRTMP))
+ return CreatePipeline(fmt.Sprintf("%s ! x264enc ! flv. ! %s ! faac ! flv. ! flvmux name='flv' ! rtmpsink location='%s'", video, audio, pipelineRTMP), "", 0)
}
// CreateAppPipeline creates a GStreamer Pipeline
@@ -199,11 +199,11 @@ func CreateAppPipeline(codecName string, pipelineDevice string, pipelineSrc stri
return nil, fmt.Errorf("unknown codec %s", codecName)
}
- return CreatePipeline(pipelineStr)
+ return CreatePipeline(pipelineStr, codecName, clockRate)
}
// CreatePipeline creates a GStreamer Pipeline
-func CreatePipeline(pipelineStr string) (*Pipeline, error) {
+func CreatePipeline(pipelineStr string, codecName string, clockRate float32) (*Pipeline, error) {
pipelineStrUnsafe := C.CString(pipelineStr)
defer C.free(unsafe.Pointer(pipelineStrUnsafe))
From 1e77a1afde8a8fc4f6b874f953eb1b008bd030b5 Mon Sep 17 00:00:00 2001
From: Craig
Date: Mon, 6 Apr 2020 20:22:17 +0000
Subject: [PATCH 09/31] hide kicak/ban from context if admin
---
client/src/components/context.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/src/components/context.vue b/client/src/components/context.vue
index 34e82301..db2de331 100644
--- a/client/src/components/context.vue
+++ b/client/src/components/context.vue
@@ -36,7 +36,7 @@
-
+
{{ $t('context.kick') }}
From 14caa1fba8e04435588432d348684c5fa0b47164 Mon Sep 17 00:00:00 2001
From: Craig
Date: Mon, 6 Apr 2020 20:26:16 +0000
Subject: [PATCH 10/31] let admin in if room locked
---
server/internal/websocket/handler.go | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/server/internal/websocket/handler.go b/server/internal/websocket/handler.go
index fddd63fa..f52a95f3 100644
--- a/server/internal/websocket/handler.go
+++ b/server/internal/websocket/handler.go
@@ -34,8 +34,11 @@ func (h *MessageHandler) Connected(id string, socket *WebSocket) (bool, string,
}
if h.locked {
- h.logger.Debug().Msg("server locked")
- return false, "Server is currently locked", nil
+ session, ok := h.sessions.Get(id)
+ if !ok || !session.Admin() {
+ h.logger.Debug().Msg("server locked")
+ return false, "Server is currently locked", nil
+ }
}
return true, "", nil
From 52ee7372765e272aad7cb52b9dceecf9d0145f55 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?=
Date: Sat, 11 Apr 2020 16:50:59 +0200
Subject: [PATCH 11/31] log active keys + onBlur
---
client/src/components/video.vue | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/client/src/components/video.vue b/client/src/components/video.vue
index b56add24..65a91bc5 100644
--- a/client/src/components/video.vue
+++ b/client/src/components/video.vue
@@ -161,6 +161,7 @@
private observer = new ResizeObserver(this.onResise.bind(this))
private focused = false
private fullscreen = false
+ private activeKeys: any = {}
get admin() {
return this.$accessor.user.admin
@@ -333,12 +334,14 @@
})
document.addEventListener('focusin', this.onFocus.bind(this))
+ document.addEventListener('focusout', this.onBlur.bind(this))
}
beforeDestroy() {
this.observer.disconnect()
this.$accessor.video.setPlayable(false)
document.removeEventListener('focusin', this.onFocus.bind(this))
+ document.removeEventListener('focusout', this.onBlur.bind(this))
}
play() {
@@ -401,6 +404,18 @@
}
}
+ onBlur() {
+ if (!this.focused || !this.hosting || this.locked) {
+ return
+ }
+
+ let keys = Object.keys(this.activeKeys)
+ for(let key of keys) {
+ this.$client.sendData('keyup', { key })
+ delete this.activeKeys[key]
+ }
+ }
+
onMousePos(e: MouseEvent) {
const { w, h } = this.$accessor.video.resolution
const rect = this._overlay.getBoundingClientRect()
@@ -486,7 +501,9 @@
return
}
- this.$client.sendData('keydown', { key: this.getCode(e) })
+ let key = this.getCode(e)
+ this.$client.sendData('keydown', { key })
+ this.activeKeys[key] = true
}
onKeyUp(e: KeyboardEvent) {
@@ -494,7 +511,9 @@
return
}
- this.$client.sendData('keyup', { key: this.getCode(e) })
+ let key = this.getCode(e)
+ this.$client.sendData('keyup', { key })
+ delete this.activeKeys[key]
}
onResise() {
From cf84eec999b2d86923cf3aba5f8b535b433b9b63 Mon Sep 17 00:00:00 2001
From: Erin Moon
Date: Wed, 15 Apr 2020 15:05:25 -0500
Subject: [PATCH 12/31] components/video.vue: fix keyup-on-blur code
the code authored in 52ee7372765e272aad7cb52b9dceecf9d0145f55 (probably)
worked in the browser due to string to numeric type autoconversion but
didn't typecheck during container build.
namely, Object.keys(this.activeKeys) will always return a string[];
however, we need number[] for the sendData() call to typecheck.
this replaces the untyped object holding active keys with a Set,
which is more expressive anyway.
---
client/src/components/video.vue | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/client/src/components/video.vue b/client/src/components/video.vue
index 65a91bc5..9bb8ba15 100644
--- a/client/src/components/video.vue
+++ b/client/src/components/video.vue
@@ -161,7 +161,7 @@
private observer = new ResizeObserver(this.onResise.bind(this))
private focused = false
private fullscreen = false
- private activeKeys: any = {}
+ private activeKeys: Set = new Set()
get admin() {
return this.$accessor.user.admin
@@ -409,10 +409,9 @@
return
}
- let keys = Object.keys(this.activeKeys)
- for(let key of keys) {
+ for (let key of this.activeKeys) {
this.$client.sendData('keyup', { key })
- delete this.activeKeys[key]
+ this.activeKeys.delete(key)
}
}
@@ -503,7 +502,7 @@
let key = this.getCode(e)
this.$client.sendData('keydown', { key })
- this.activeKeys[key] = true
+ this.activeKeys.add(key)
}
onKeyUp(e: KeyboardEvent) {
@@ -513,7 +512,7 @@
let key = this.getCode(e)
this.$client.sendData('keyup', { key })
- delete this.activeKeys[key]
+ this.activeKeys.delete(key)
}
onResise() {
From b6b530f8a61efb9753dbd6cf081abcc77f4f16f0 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 20:55:38 +0000
Subject: [PATCH 13/31] examples (wip)
---
.examples/README.md | 0
.examples/local/README.md | 0
.examples/local/docker-compose.yaml | 16 ++++++++++++++++
.examples/simple/README.md | 0
.examples/simple/docker-compose.yaml | 15 +++++++++++++++
5 files changed, 31 insertions(+)
create mode 100644 .examples/README.md
create mode 100644 .examples/local/README.md
create mode 100644 .examples/local/docker-compose.yaml
create mode 100644 .examples/simple/README.md
create mode 100644 .examples/simple/docker-compose.yaml
diff --git a/.examples/README.md b/.examples/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/.examples/local/README.md b/.examples/local/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/.examples/local/docker-compose.yaml b/.examples/local/docker-compose.yaml
new file mode 100644
index 00000000..d72955b3
--- /dev/null
+++ b/.examples/local/docker-compose.yaml
@@ -0,0 +1,16 @@
+version: "2.0"
+services:
+ neko:
+ image: nurdism/neko:firefox
+ restart: always
+ shm_size: "1gb"
+ ports:
+ - "80:8080"
+ - "59000-59100:59000-59100/udp"
+ environment:
+ DISPLAY: :99.0
+ NEKO_PASSWORD: neko
+ NEKO_PASSWORD_ADMIN: admin
+ NEKO_BIND: :8080
+ NEKO_EPR: 59000-59100
+ NEKO_NAT1TO1: 192.168.0.X
\ No newline at end of file
diff --git a/.examples/simple/README.md b/.examples/simple/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/.examples/simple/docker-compose.yaml b/.examples/simple/docker-compose.yaml
new file mode 100644
index 00000000..fe86e32f
--- /dev/null
+++ b/.examples/simple/docker-compose.yaml
@@ -0,0 +1,15 @@
+version: "2.0"
+services:
+ neko:
+ image: nurdism/neko:firefox
+ restart: always
+ shm_size: "1gb"
+ ports:
+ - "80:8080"
+ - "59000-59100:59000-59100/udp"
+ environment:
+ DISPLAY: :99.0
+ NEKO_PASSWORD: neko
+ NEKO_PASSWORD_ADMIN: admin
+ NEKO_BIND: :8080
+ NEKO_EPR: 59000-59100
\ No newline at end of file
From f24c511a0cee617c1cac3c9d1b7eaea31ea892c3 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 20:56:13 +0000
Subject: [PATCH 14/31] change to docker setup
---
.devcontainer/Dockerfile | 158 +-----------------
.docker/build | 25 ++-
.docker/files/base/Dockerfile | 13 ++
.docker/files/chromium/Dockerfile | 6 +-
Dockerfile => .docker/files/deps/Dockerfile | 12 --
.docker/files/dev/Dockerfile | 170 ++++++++++++++++++++
.docker/files/firefox/Dockerfile | 8 +-
docker-compose.yaml | 15 --
8 files changed, 210 insertions(+), 197 deletions(-)
create mode 100644 .docker/files/base/Dockerfile
rename Dockerfile => .docker/files/deps/Dockerfile (89%)
create mode 100644 .docker/files/dev/Dockerfile
delete mode 100644 docker-compose.yaml
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 57dd59dd..3bc2529b 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,160 +1,4 @@
-FROM debian:stretch-slim
-
-#
-# cluster fuck of packages for neko, node, go and gstreamer
-RUN set -eux; apt-get update; apt-get install -y --no-install-recommends \
- autoconf ca-certificates curl netbase wget \
- bzr git mercurial openssh-client subversion procps cmake automake bzip2 dpkg-dev file g++ gcc \
- libbz2-dev libc6-dev libcurl4-openssl-dev libdb-dev libevent-dev libffi-dev libgdbm-dev libglib2.0-dev libgmp-dev \
- libjpeg-dev libkrb5-dev liblzma-dev libmagickcore-dev libmagickwand-dev libmaxminddb-dev libncurses5-dev libncursesw5-dev \
- libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev \
- make patch unzip xz-utils zlib1g-dev pkg-config \
- build-essential perl python autopoint bison flex \
- gettext openssl libopus-dev libvpx-dev libpulse-dev libx11-dev libxv-dev libxt-dev libxrandr-dev \
- libxfixes-dev apt-utils x11vnc libxtst-dev dialog \
- pulseaudio openbox chromium firefox-esr dbus-x11 xserver-xorg-video-dummy supervisor; \
- if ! command -v gpg > /dev/null; then \
- apt-get install -y --no-install-recommends gnupg dirmngr; \
- fi
-
-#
-# Install libclipboard
-RUN set -eux; \
- cd /tmp ; \
- git clone https://github.com/jtanx/libclipboard ; \
- cd libclipboard ; \
- cmake . ; \
- make -j4; \
- make install; \
- rm -rf /tmp/libclipboard
-
-#
-# Set up env for gst
-ENV PATH=/gst/local/bin:$PATH
-ENV LD_LIBRARY_PATH=/gst/local/lib:$LD_LIBRARY_PATH
-ENV PKG_CONFIG_PATH=/gst/local/lib/pkgconfig:$PKG_CONFIG_PATH
-
-#
-# Add node
-ENV NODE_VERSION 12.14.1
-RUN set -eux; \
- ARCH= ; dpkgArch="$(dpkg --print-architecture)" \
- ;case "${dpkgArch##*-}" in \
- amd64) ARCH='x64';; \
- ppc64el) ARCH='ppc64le';; \
- s390x) ARCH='s390x';; \
- arm64) ARCH='arm64';; \
- armhf) ARCH='armv7l';; \
- i386) ARCH='x86';; \
- *) echo "unsupported architecture"; exit 1 ;; \
- esac;\
- # gpg keys listed at https://github.com/nodejs/node#release-keys
- for key in \
- 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
- FD3A5288F042B6850C66B31F09FE44734EB7990E \
- 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
- DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
- C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
- B9AE9905FFD7803F25714661B63B535A4C206CA9 \
- 77984A986EBC2AA786BC0F66B01FBB92821C587A \
- 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
- 4ED778F539E3634C779C87C6D7062848A1AB005C \
- A48C2BEE680E841632CD4E44F07496B3EB3C1762 \
- B9E2F5981AA6E0CD28160D9FF13993A75599653C \
- ; do \
- gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
- gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
- gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key"; \
- done; \
- curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz"; \
- curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"; \
- gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc; \
- grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - ; \
- tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner; \
- rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt; \
- ln -s /usr/local/bin/node /usr/local/bin/nodejs
-
-#
-# Add golang
-ENV GOLANG_VERSION 1.14.1
-RUN set -eux; \
- dpkgArch="$(dpkg --print-architecture)"; \
- case "${dpkgArch##*-}" in \
- amd64) goRelArch='linux-amd64'; goRelSha256='2f49eb17ce8b48c680cdb166ffd7389702c0dec6effa090c324804a5cac8a7f8' ;; \
- armhf) goRelArch='linux-armv6l'; goRelSha256='04f10e345dae0d7c6c32ffd6356b47f2d4d0e8a0cb757f4ef48ead6c5bef206f' ;; \
- arm64) goRelArch='linux-arm64'; goRelSha256='5d8f2c202f35481617e24e63cca30c6afb1ec2585006c4a6ecf16c5f4928ab3c' ;; \
- i386) goRelArch='linux-386'; goRelSha256='92d465accdebbe2d0749b2f90c22ecb1fd2492435144923f88ce410cd56b6546' ;; \
- ppc64el) goRelArch='linux-ppc64le'; goRelSha256='6559201d452ee2782dfd684d59c05e3ecf789dc40a7ec0ad9ae2dd9f489c0fe1' ;; \
- s390x) goRelArch='linux-s390x'; goRelSha256='af009bd6e7729c441fec78af427743fefbf11f919c562e01b37836d835f74226' ;; \
- *) goRelArch='src'; goRelSha256='2ad2572115b0d1b4cb4c138e6b3a31cee6294cb48af75ee86bec3dca04507676'; \
- echo >&2; echo >&2 "warning: current architecture ($dpkgArch) does not have a corresponding Go binary release; will be building from source"; echo >&2 ;; \
- esac; \
- url="https://golang.org/dl/go${GOLANG_VERSION}.${goRelArch}.tar.gz"; \
- wget -O go.tgz "$url"; \
- echo "${goRelSha256} *go.tgz" | sha256sum -c -; \
- tar -C /usr/local -xzf go.tgz; \
- rm go.tgz; \
- if [ "$goRelArch" = 'src' ]; then \
- echo >&2; \
- echo >&2 'error: UNIMPLEMENTED'; \
- echo >&2 'TODO install golang-any from jessie-backports for GOROOT_BOOTSTRAP (and uninstall after build)'; \
- echo >&2; \
- exit 1; \
- fi; \
- export PATH="/usr/local/go/bin:$PATH"; \
- go version
-
-ENV GOPATH /go
-ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
-
-#
-# Install Go tools w/module support
-RUN mkdir -p /tmp/gotools \
- && cd /tmp/gotools \
- && GOPATH=/tmp/gotools GO111MODULE=on go get -v golang.org/x/tools/gopls@latest 2>&1 \
- && GOPATH=/tmp/gotools GO111MODULE=on go get -v \
- honnef.co/go/tools/...@latest \
- golang.org/x/tools/cmd/gorename@latest \
- golang.org/x/tools/cmd/goimports@latest \
- golang.org/x/tools/cmd/guru@latest \
- golang.org/x/lint/golint@latest \
- github.com/mdempsky/gocode@latest \
- github.com/cweill/gotests/...@latest \
- github.com/haya14busa/goplay/cmd/goplay@latest \
- github.com/sqs/goreturns@latest \
- github.com/josharian/impl@latest \
- github.com/davidrjenni/reftools/cmd/fillstruct@latest \
- github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest \
- github.com/ramya-rao-a/go-outline@latest \
- github.com/acroca/go-symbols@latest \
- github.com/godoctor/godoctor@latest \
- github.com/rogpeppe/godef@latest \
- github.com/zmb3/gogetdoc@latest \
- github.com/fatih/gomodifytags@latest \
- github.com/mgechev/revive@latest \
- github.com/go-delve/delve/cmd/dlv@latest 2>&1 \
- #
- # Build Go tools w/o module support
- && GOPATH=/tmp/gotools go get -v github.com/alecthomas/gometalinter 2>&1 \
- #
- # Build gocode-gomod
- && GOPATH=/tmp/gotools go get -x -d github.com/stamblerre/gocode 2>&1 \
- && GOPATH=/tmp/gotools go build -o gocode-gomod github.com/stamblerre/gocode \
- #
- # Install Go tools
- && mv /tmp/gotools/bin/* /usr/local/bin/ \
- && mv gocode-gomod /usr/local/bin/ \
- #
- # Install golangci-lint
- && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b /usr/local/bin 2>&1 \
- #
- # Setup paths
- && mkdir -p "$GOPATH/src" "$GOPATH/bin" "$GOPATH/pkg/mod" \
- && chmod -R 777 "$GOPATH"
-
-#
-# Turn on go modules
-ENV GO111MODULE=on
+FROM nurdism/neko:dev
# Use the "remoteUser" property in devcontainer.json to use it. On Linux, the container
# user's GID/UIDs will be updated to match your local UID/GID (when using the dockerFile property).
diff --git a/.docker/build b/.docker/build
index 512d3298..c04506f0 100755
--- a/.docker/build
+++ b/.docker/build
@@ -7,7 +7,8 @@
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/.."
build_gst() {
- if [ ! -d /gst ]; then
+ if [ ! -L /gst || ! -d /gst ]; then
+ sudo rm -rf /gst;
sudo mkdir -p /workspace/.build/gst
sudo ln -s /workspace/.build/gst /gst
sudo chown -R neko /workspace/.build
@@ -39,23 +40,33 @@ build_gst() {
done'
}
+build_dev() {
+ set -eux; \
+ sudo docker build -f .docker/files/dev/Dockerfile -t nurdism/neko:dev $DIR ; \
+ sudo docker push nurdism/neko:dev;
+}
+
+build_deps() {
+ set -eux; \
+ sudo docker build -f .docker/files/deps/Dockerfile -t nurdism/neko:deps $DIR ; \
+ sudo docker push nurdism/neko:deps;
+}
+
build_base() {
set -eux; \
cd $DIR/server; go get; ./build; \
cd $DIR/client; npm install; npm run build; \
- cd $DIR; sudo docker build -f Dockerfile -t nurdism/neko:base . ;
+ sudo docker build -f .docker/files/base/Dockerfile -t nurdism/neko:base $DIR ;
}
build_firefox() {
set -eux; \
- cd $DIR/.docker/files/firefox; \
- sudo docker build -f Dockerfile -t nurdism/neko:firefox -t nurdism/neko:latest . ;
+ sudo docker build -f .docker/files/firefox/Dockerfile -t nurdism/neko:firefox -t nurdism/neko:latest $DIR ;
}
build_chromium() {
set -eux; \
- cd $DIR/.docker/files/chromium; \
- sudo docker build -f Dockerfile -t nurdism/neko:chromium . ;
+ sudo docker build -f .docker/files/chromium/Dockerfile -t nurdism/neko:chromium $DIR ;
}
build_docker() {
@@ -82,6 +93,8 @@ set -ex
case $1 in
push) build_push ;;
docker) build_docker ;;
+ deps) build_deps ;;
+ dev) build_dev ;;
gst) build_gst ;;
*) build_docker ;;
esac
diff --git a/.docker/files/base/Dockerfile b/.docker/files/base/Dockerfile
new file mode 100644
index 00000000..d6611759
--- /dev/null
+++ b/.docker/files/base/Dockerfile
@@ -0,0 +1,13 @@
+FROM nurdism/neko:deps
+
+#
+# neko files
+COPY .docker/files/neko/supervisord.conf /etc/neko/supervisord/neko.conf
+COPY client/dist/ /var/www
+COPY server/bin/neko /usr/bin/neko
+
+#
+# neko env
+ENV NEKO_PASSWORD=neko
+ENV NEKO_PASSWORD_ADMIN=admin
+ENV NEKO_BIND=:8080
\ No newline at end of file
diff --git a/.docker/files/chromium/Dockerfile b/.docker/files/chromium/Dockerfile
index 47fefb19..f2cc3025 100644
--- a/.docker/files/chromium/Dockerfile
+++ b/.docker/files/chromium/Dockerfile
@@ -19,6 +19,6 @@ RUN set -eux; apt-get update; \
#
# copy configuation files
-COPY supervisord.conf /etc/neko/supervisord/chromium.conf
-COPY preferences.json /usr/share/chromium/master_preferences
-COPY policies.json /etc/chromium/policies/managed/policies.json
\ No newline at end of file
+COPY .docker/files/chromium/supervisord.conf /etc/neko/supervisord/chromium.conf
+COPY .docker/files/chromium/preferences.json /usr/share/chromium/master_preferences
+COPY .docker/files/chromium/policies.json /etc/chromium/policies/managed/policies.json
\ No newline at end of file
diff --git a/Dockerfile b/.docker/files/deps/Dockerfile
similarity index 89%
rename from Dockerfile
rename to .docker/files/deps/Dockerfile
index 6815e30a..5615f7cd 100644
--- a/Dockerfile
+++ b/.docker/files/deps/Dockerfile
@@ -55,22 +55,10 @@ ENV DISPLAY=:99.0
# copy configuation files
COPY .docker/files/dbus /usr/bin/dbus
COPY .docker/files/openbox.xml /etc/neko/openbox.xml
-COPY .docker/files/neko/supervisord.conf /etc/neko/supervisord/neko.conf
COPY .docker/files/supervisord.conf /etc/neko/supervisord.conf
COPY .docker/files/xorg.conf /etc/neko/xorg.conf
COPY .docker/files/default.pa /etc/pulse/default.pa
-#
-# neko files
-COPY client/dist/ /var/www
-COPY server/bin/neko /usr/bin/neko
-
-#
-# neko env
-ENV NEKO_PASSWORD=neko
-ENV NEKO_PASSWORD_ADMIN=admin
-ENV NEKO_BIND=:8080
-
#
# run neko
CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]
\ No newline at end of file
diff --git a/.docker/files/dev/Dockerfile b/.docker/files/dev/Dockerfile
new file mode 100644
index 00000000..b9453f9d
--- /dev/null
+++ b/.docker/files/dev/Dockerfile
@@ -0,0 +1,170 @@
+FROM debian:stretch-slim
+
+#
+# cluster fuck of packages for neko, node, go and gstreamer
+RUN set -eux; apt-get update; apt-get install -y --no-install-recommends \
+ autoconf ca-certificates curl netbase wget gnupg dirmngr libatomic1 \
+ bzr git mercurial openssh-client subversion procps cmake automake bzip2 dpkg-dev file g++ gcc \
+ libbz2-dev libc6-dev libcurl4-openssl-dev libdb-dev libevent-dev libffi-dev libgdbm-dev libglib2.0-dev libgmp-dev \
+ libjpeg-dev libkrb5-dev liblzma-dev libmagickcore-dev libmagickwand-dev libmaxminddb-dev libncurses5-dev libncursesw5-dev \
+ libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev \
+ make patch unzip xz-utils zlib1g-dev pkg-config \
+ build-essential perl python autopoint bison flex \
+ gettext openssl libopus-dev libvpx-dev libpulse-dev libx11-dev libxv-dev libxt-dev libxrandr-dev \
+ libxfixes-dev apt-utils x11vnc libxtst-dev dialog \
+ pulseaudio openbox chromium firefox-esr dbus-x11 xserver-xorg-video-dummy supervisor;
+
+#
+# install libclipboard
+RUN set -eux; \
+ cd /tmp; \
+ git clone https://github.com/jtanx/libclipboard; \
+ cd libclipboard; \
+ cmake . ; \
+ make -j4; \
+ make install; \
+ rm -rf /tmp/libclipboard;
+
+#
+# set up env for gst
+ENV PATH=/gst/local/bin:$PATH
+ENV LD_LIBRARY_PATH=/gst/local/lib:$LD_LIBRARY_PATH
+ENV PKG_CONFIG_PATH=/gst/local/lib/pkgconfig:$PKG_CONFIG_PATH
+
+#
+# copy gst
+COPY .build/gst/local /gst/local/
+
+#
+# add node
+ENV NODE_VERSION 12.16.2
+
+RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
+ && case "${dpkgArch##*-}" in \
+ amd64) ARCH='x64';; \
+ ppc64el) ARCH='ppc64le';; \
+ s390x) ARCH='s390x';; \
+ arm64) ARCH='arm64';; \
+ armhf) ARCH='armv7l';; \
+ i386) ARCH='x86';; \
+ *) echo "unsupported architecture"; exit 1 ;; \
+ esac \
+ && set -ex \
+ && for key in \
+ 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
+ FD3A5288F042B6850C66B31F09FE44734EB7990E \
+ 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
+ DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
+ C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
+ B9AE9905FFD7803F25714661B63B535A4C206CA9 \
+ 77984A986EBC2AA786BC0F66B01FBB92821C587A \
+ 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 \
+ 4ED778F539E3634C779C87C6D7062848A1AB005C \
+ A48C2BEE680E841632CD4E44F07496B3EB3C1762 \
+ B9E2F5981AA6E0CD28160D9FF13993A75599653C \
+ ; do \
+ gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" || \
+ gpg --batch --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys "$key" || \
+ gpg --batch --keyserver hkp://pgp.mit.edu:80 --recv-keys "$key" ; \
+ done \
+ && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
+ && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
+ && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
+ && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
+ && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
+ && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
+ && apt-mark auto '.*' > /dev/null \
+ && find /usr/local -type f -executable -exec ldd '{}' ';' \
+ | awk '/=>/ { print $(NF-1) }' \
+ | sort -u \
+ | xargs -r dpkg-query --search \
+ | cut -d: -f1 \
+ | sort -u \
+ | xargs -r apt-mark manual \
+ && ln -s /usr/local/bin/node /usr/local/bin/nodejs \
+ # smoke tests
+ && node --version \
+ && npm --version
+
+#
+# add golang
+ENV GOLANG_VERSION 1.14.2
+RUN set -eux; \
+ dpkgArch="$(dpkg --print-architecture)"; \
+ case "${dpkgArch##*-}" in \
+ amd64) goRelArch='linux-amd64'; goRelSha256='6272d6e940ecb71ea5636ddb5fab3933e087c1356173c61f4a803895e947ebb3' ;; \
+ armhf) goRelArch='linux-armv6l'; goRelSha256='eb4550ba741506c2a4057ea4d3a5ad7ed5a887de67c7232f1e4795464361c83c' ;; \
+ arm64) goRelArch='linux-arm64'; goRelSha256='bb6d22fe5806352c3d0826676654e09b6e41eb1af52e8d506d3fa85adf7f8d88' ;; \
+ i386) goRelArch='linux-386'; goRelSha256='cab5f51e6ffb616c6ee963c3d0650ca4e3c4108307c44f2baf233fcb8ff098f6' ;; \
+ ppc64el) goRelArch='linux-ppc64le'; goRelSha256='48c22268c81ced9084a43bbe2c1596d3e636b5560b30a32434a7f15e561de160' ;; \
+ s390x) goRelArch='linux-s390x'; goRelSha256='501cc919648c9d85b901963303c5061ea6814c80f0d35fda9e62980d3ff58cf4' ;; \
+ *) goRelArch='src'; goRelSha256='98de84e69726a66da7b4e58eac41b99cbe274d7e8906eeb8a5b7eb0aadee7f7c'; \
+ echo >&2; echo >&2 "warning: current architecture ($dpkgArch) does not have a corresponding Go binary release; will be building from source"; echo >&2 ;; \
+ esac; \
+ url="https://golang.org/dl/go${GOLANG_VERSION}.${goRelArch}.tar.gz"; \
+ wget -O go.tgz "$url"; \
+ echo "${goRelSha256} *go.tgz" | sha256sum -c -; \
+ tar -C /usr/local -xzf go.tgz; \
+ rm go.tgz; \
+ if [ "$goRelArch" = 'src' ]; then \
+ echo >&2; \
+ echo >&2 'error: UNIMPLEMENTED'; \
+ echo >&2 'TODO install golang-any from jessie-backports for GOROOT_BOOTSTRAP (and uninstall after build)'; \
+ echo >&2; \
+ exit 1; \
+ fi; \
+ export PATH="/usr/local/go/bin:$PATH"; \
+ go version
+
+ENV GOPATH /go
+ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
+RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
+
+#
+# install Go tools w/module support
+RUN mkdir -p /tmp/gotools \
+ && cd /tmp/gotools \
+ && GOPATH=/tmp/gotools GO111MODULE=on go get -v golang.org/x/tools/gopls@latest 2>&1 \
+ && GOPATH=/tmp/gotools GO111MODULE=on go get -v \
+ honnef.co/go/tools/...@latest \
+ golang.org/x/tools/cmd/gorename@latest \
+ golang.org/x/tools/cmd/goimports@latest \
+ golang.org/x/tools/cmd/guru@latest \
+ golang.org/x/lint/golint@latest \
+ github.com/mdempsky/gocode@latest \
+ github.com/cweill/gotests/...@latest \
+ github.com/haya14busa/goplay/cmd/goplay@latest \
+ github.com/sqs/goreturns@latest \
+ github.com/josharian/impl@latest \
+ github.com/davidrjenni/reftools/cmd/fillstruct@latest \
+ github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest \
+ github.com/ramya-rao-a/go-outline@latest \
+ github.com/acroca/go-symbols@latest \
+ github.com/godoctor/godoctor@latest \
+ github.com/rogpeppe/godef@latest \
+ github.com/zmb3/gogetdoc@latest \
+ github.com/fatih/gomodifytags@latest \
+ github.com/mgechev/revive@latest \
+ github.com/go-delve/delve/cmd/dlv@latest 2>&1 \
+ #
+ # build Go tools w/o module support
+ && GOPATH=/tmp/gotools go get -v github.com/alecthomas/gometalinter 2>&1 \
+ #
+ # build gocode-gomod
+ && GOPATH=/tmp/gotools go get -x -d github.com/stamblerre/gocode 2>&1 \
+ && GOPATH=/tmp/gotools go build -o gocode-gomod github.com/stamblerre/gocode \
+ #
+ # install Go tools
+ && mv /tmp/gotools/bin/* /usr/local/bin/ \
+ && mv gocode-gomod /usr/local/bin/ \
+ #
+ # install golangci-lint
+ && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b /usr/local/bin 2>&1 \
+ #
+ # setup paths
+ && mkdir -p "$GOPATH/src" "$GOPATH/bin" "$GOPATH/pkg/mod" \
+ && chmod -R 777 "$GOPATH"
+
+#
+# turn on go modules
+ENV GO111MODULE=on
\ No newline at end of file
diff --git a/.docker/files/firefox/Dockerfile b/.docker/files/firefox/Dockerfile
index 7c7e3612..0ef34a59 100644
--- a/.docker/files/firefox/Dockerfile
+++ b/.docker/files/firefox/Dockerfile
@@ -16,7 +16,7 @@ RUN set -eux; apt-get update; \
#
# copy configuation files
-COPY supervisord.conf /etc/neko/supervisord/firefox.conf
-COPY neko.js /usr/lib/firefox-esr/mozilla.cfg
-COPY autoconfig.js /usr/lib/firefox-esr/defaults/pref/autoconfig.js
-COPY policies.json /usr/lib/firefox-esr/distribution/policies.json
+COPY .docker/files/firefox/supervisord.conf /etc/neko/supervisord/firefox.conf
+COPY .docker/files/firefox/neko.js /usr/lib/firefox-esr/mozilla.cfg
+COPY .docker/files/firefox/autoconfig.js /usr/lib/firefox-esr/defaults/pref/autoconfig.js
+COPY .docker/files/firefox/policies.json /usr/lib/firefox-esr/distribution/policies.json
diff --git a/docker-compose.yaml b/docker-compose.yaml
deleted file mode 100644
index fe86e32f..00000000
--- a/docker-compose.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-version: "2.0"
-services:
- neko:
- image: nurdism/neko:firefox
- restart: always
- shm_size: "1gb"
- ports:
- - "80:8080"
- - "59000-59100:59000-59100/udp"
- environment:
- DISPLAY: :99.0
- NEKO_PASSWORD: neko
- NEKO_PASSWORD_ADMIN: admin
- NEKO_BIND: :8080
- NEKO_EPR: 59000-59100
\ No newline at end of file
From a04ac4781275aadea5a95b5f269f3885b3f6b3ac Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 20:56:26 +0000
Subject: [PATCH 15/31] examples update docs
---
docs/quick-start.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/quick-start.md b/docs/quick-start.md
index 468b43d4..175c2105 100644
--- a/docs/quick-start.md
+++ b/docs/quick-start.md
@@ -25,7 +25,7 @@
```shell
sudo ufw allow 80/tcp # if you have ufw installed/enabled
sudo ufw allow 59000:59100/udp
- wget https://raw.githubusercontent.com/nurdism/neko/master/docker-compose.yaml
+ wget https://raw.githubusercontent.com/nurdism/neko/master/.examples/simple/docker-compose.yaml
sudo docker-compose up -d
```
5. Visit the IP address server in your browser and login, the default password is `neko`
From 5da903f3febb58815bfa2d404ee0e2d76eb776df Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 20:57:28 +0000
Subject: [PATCH 16/31] change dissconnect messages to keys for i18n
---
server/internal/broadcast/manager.go | 17 ++++++++++-------
server/internal/websocket/admin.go | 4 ++--
server/internal/websocket/handler.go | 4 ++--
server/internal/websocket/websocket.go | 2 +-
4 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/server/internal/broadcast/manager.go b/server/internal/broadcast/manager.go
index 0cb51858..753b53bc 100644
--- a/server/internal/broadcast/manager.go
+++ b/server/internal/broadcast/manager.go
@@ -2,6 +2,7 @@ package broadcast
import (
"github.com/rs/zerolog"
+ "github.com/rs/zerolog/log"
"n.eko.moe/neko/internal/gst"
"n.eko.moe/neko/internal/types/config"
)
@@ -14,8 +15,8 @@ type BroadcastManager struct {
func New(config *config.Broadcast) *BroadcastManager {
return &BroadcastManager{
- logger: log.With().Str("module", "remote").Logger(),
- config: config
+ logger: log.With().Str("module", "remote").Logger(),
+ config: config,
}
}
@@ -28,13 +29,15 @@ func (manager *BroadcastManager) Start() {
)
if err != nil {
manager.logger.Panic().Err(err).Msg("unable to create rtmp pipeline")
- }
+ }
- manager.pipeline.Start()
+ manager.pipeline.Start()
}
func (manager *BroadcastManager) Shutdown() error {
- if (manager.pipeline != nil) {
- manager.pipeline.Stop()
- }
+ if manager.pipeline != nil {
+ manager.pipeline.Stop()
+ }
+
+ return nil
}
diff --git a/server/internal/websocket/admin.go b/server/internal/websocket/admin.go
index 192d4c1c..1063f279 100644
--- a/server/internal/websocket/admin.go
+++ b/server/internal/websocket/admin.go
@@ -230,7 +230,7 @@ func (h *MessageHandler) adminKick(id string, session types.Session, payload *me
return nil
}
- if err := target.Kick("You have been kicked"); err != nil {
+ if err := target.Kick("kicked"); err != nil {
return err
}
@@ -280,7 +280,7 @@ func (h *MessageHandler) adminBan(id string, session types.Session, payload *mes
h.banned[address[0]] = true
- if err := target.Kick("You have been banned"); err != nil {
+ if err := target.Kick("banned"); err != nil {
return err
}
diff --git a/server/internal/websocket/handler.go b/server/internal/websocket/handler.go
index f52a95f3..7ad21d3e 100644
--- a/server/internal/websocket/handler.go
+++ b/server/internal/websocket/handler.go
@@ -29,7 +29,7 @@ func (h *MessageHandler) Connected(id string, socket *WebSocket) (bool, string,
ok, banned := h.banned[address]
if ok && banned {
h.logger.Debug().Str("address", address).Msg("banned")
- return false, "This IP has been banned", nil
+ return false, "banned", nil
}
}
@@ -37,7 +37,7 @@ func (h *MessageHandler) Connected(id string, socket *WebSocket) (bool, string,
session, ok := h.sessions.Get(id)
if !ok || !session.Admin() {
h.logger.Debug().Msg("server locked")
- return false, "Server is currently locked", nil
+ return false, "locked", nil
}
}
diff --git a/server/internal/websocket/websocket.go b/server/internal/websocket/websocket.go
index fc6b4e35..c7d85239 100644
--- a/server/internal/websocket/websocket.go
+++ b/server/internal/websocket/websocket.go
@@ -131,7 +131,7 @@ func (ws *WebSocketHandler) Upgrade(w http.ResponseWriter, r *http.Request) erro
if err = connection.WriteJSON(message.Disconnect{
Event: event.SYSTEM_DISCONNECT,
- Message: "invalid password",
+ Message: "invalid_password",
}); err != nil {
ws.logger.Error().Err(err).Msg("failed to send disconnect")
}
From 16a9b30291b204851c9dec52b488265f73957612 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 20:57:39 +0000
Subject: [PATCH 17/31] test out git actions
---
.github/workflows/neko.yml | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
create mode 100644 .github/workflows/neko.yml
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
new file mode 100644
index 00000000..7cc193c1
--- /dev/null
+++ b/.github/workflows/neko.yml
@@ -0,0 +1,38 @@
+name: N.eko CI
+
+on:
+ push:
+ branches: [ master ]
+
+jobs:
+ build:
+ name: Build
+ runs-on: nurdism/neko:dev
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Get go dependencies and build server
+ working-directory: server
+ run: go get -v -t -d ./... && ./build
+
+ - name: Get npm dependencies and build Client
+ working-directory: client
+ run: npm install && npm run build
+
+ - name: Build the base image
+ run: docker build -f ./.docker/files/base/Dockerfile -t nurdism/neko:base .
+
+ - name: Build the firefox image
+ run: docker build -f ./.docker/files/firefox/Dockerfile -t nurdism/neko:firefox -t nurdism/neko:latest .
+
+ - name: Build the chromium image
+ run: docker build -f ./.docker/files/chromium/Dockerfile -t nurdism/neko:chromium .
+
+ - name: Push the Docker images
+ run: |
+ echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ secrets.DOCKER_REGISTRY_URL }} -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
+ docker push nurdism/neko:base
+ docker push nurdism/neko:latest
+ docker push nurdism/neko:firefox
+ docker push nurdism/neko:chromium
From 5afd1176b9b6001861d4a0e5c3f248e3ddf6a5cb Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 21:21:00 +0000
Subject: [PATCH 18/31] HG actions testing
---
.github/workflows/neko.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
index 7cc193c1..c034a73e 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/neko.yml
@@ -7,7 +7,8 @@ on:
jobs:
build:
name: Build
- runs-on: nurdism/neko:dev
+ container:
+ image: nurdism/neko:dev
steps:
- name: Check out code
uses: actions/checkout@v2
From 3883382c3441f845bd16115b322d351743fae187 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 21:22:50 +0000
Subject: [PATCH 19/31] gh actions testing
---
.github/workflows/neko.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
index c034a73e..81ee815b 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/neko.yml
@@ -7,6 +7,7 @@ on:
jobs:
build:
name: Build
+ runs-on: ubuntu-latest
container:
image: nurdism/neko:dev
steps:
From badc3384a45475ff72313ad5ebb83f4de8ad5b3c Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 23:47:39 +0000
Subject: [PATCH 20/31] add dcoker to :dev
---
.docker/files/dev/Dockerfile | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/.docker/files/dev/Dockerfile b/.docker/files/dev/Dockerfile
index b9453f9d..eab34eac 100644
--- a/.docker/files/dev/Dockerfile
+++ b/.docker/files/dev/Dockerfile
@@ -3,6 +3,7 @@ FROM debian:stretch-slim
#
# cluster fuck of packages for neko, node, go and gstreamer
RUN set -eux; apt-get update; apt-get install -y --no-install-recommends \
+ apt-transport-https gnupg-agent software-properties-common lsb-release \
autoconf ca-certificates curl netbase wget gnupg dirmngr libatomic1 \
bzr git mercurial openssh-client subversion procps cmake automake bzip2 dpkg-dev file g++ gcc \
libbz2-dev libc6-dev libcurl4-openssl-dev libdb-dev libevent-dev libffi-dev libgdbm-dev libglib2.0-dev libgmp-dev \
@@ -167,4 +168,11 @@ RUN mkdir -p /tmp/gotools \
#
# turn on go modules
-ENV GO111MODULE=on
\ No newline at end of file
+ENV GO111MODULE=on
+
+#
+# install docker
+RUN set -eux; \
+ curl -fsSL https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/gpg | (OUT=$(apt-key add - 2>&1) || echo $OUT); \
+ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(lsb_release -is | tr '[:upper:]' '[:lower:]') $(lsb_release -cs) stable"; \
+ apt-get update; apt-get install -y docker-ce-cli;
\ No newline at end of file
From fdbc711f9adfad106bad255f536a17c3c22077ff Mon Sep 17 00:00:00 2001
From: Craig
Date: Sat, 18 Apr 2020 23:47:55 +0000
Subject: [PATCH 21/31] fix commands
---
.docker/build | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.docker/build b/.docker/build
index c04506f0..200a6f8d 100755
--- a/.docker/build
+++ b/.docker/build
@@ -42,13 +42,13 @@ build_gst() {
build_dev() {
set -eux; \
- sudo docker build -f .docker/files/dev/Dockerfile -t nurdism/neko:dev $DIR ; \
+ sudo docker build -f files/dev/Dockerfile -t nurdism/neko:dev $DIR ; \
sudo docker push nurdism/neko:dev;
}
build_deps() {
set -eux; \
- sudo docker build -f .docker/files/deps/Dockerfile -t nurdism/neko:deps $DIR ; \
+ sudo docker build -f files/deps/Dockerfile -t nurdism/neko:deps $DIR ; \
sudo docker push nurdism/neko:deps;
}
@@ -56,17 +56,17 @@ build_base() {
set -eux; \
cd $DIR/server; go get; ./build; \
cd $DIR/client; npm install; npm run build; \
- sudo docker build -f .docker/files/base/Dockerfile -t nurdism/neko:base $DIR ;
+ sudo docker build -f files/base/Dockerfile -t nurdism/neko:base $DIR ;
}
build_firefox() {
set -eux; \
- sudo docker build -f .docker/files/firefox/Dockerfile -t nurdism/neko:firefox -t nurdism/neko:latest $DIR ;
+ sudo docker build -f files/firefox/Dockerfile -t nurdism/neko:firefox -t nurdism/neko:latest $DIR ;
}
build_chromium() {
set -eux; \
- sudo docker build -f .docker/files/chromium/Dockerfile -t nurdism/neko:chromium $DIR ;
+ sudo docker build -f files/chromium/Dockerfile -t nurdism/neko:chromium $DIR ;
}
build_docker() {
From 362441c5a99f17a39602855e956d1c5d2edb7e31 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:06:02 +0000
Subject: [PATCH 22/31] gh actions test
---
.github/workflows/neko.yml | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
index 81ee815b..283237cc 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/neko.yml
@@ -8,12 +8,14 @@ jobs:
build:
name: Build
runs-on: ubuntu-latest
- container:
- image: nurdism/neko:dev
+ container: nurdism/neko:dev
steps:
- name: Check out code
uses: actions/checkout@v2
+ - name: Fetch unshallow
+ run: git fetch --prune --tags --unshallow
+
- name: Get go dependencies and build server
working-directory: server
run: go get -v -t -d ./... && ./build
@@ -25,16 +27,11 @@ jobs:
- name: Build the base image
run: docker build -f ./.docker/files/base/Dockerfile -t nurdism/neko:base .
- - name: Build the firefox image
- run: docker build -f ./.docker/files/firefox/Dockerfile -t nurdism/neko:firefox -t nurdism/neko:latest .
-
- - name: Build the chromium image
- run: docker build -f ./.docker/files/chromium/Dockerfile -t nurdism/neko:chromium .
-
+ - name: Build the latest image
+ run: docker build -f ./.docker/files/firefox/Dockerfile -t nurdism/neko:latest .
+
- name: Push the Docker images
run: |
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ secrets.DOCKER_REGISTRY_URL }} -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push nurdism/neko:base
docker push nurdism/neko:latest
- docker push nurdism/neko:firefox
- docker push nurdism/neko:chromium
From 019283c97e9d675ddbf61e4b682e7f41e9228356 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:06:39 +0000
Subject: [PATCH 23/31] :base runs neko
---
.docker/files/base/Dockerfile | 59 ++++++++++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 5 deletions(-)
diff --git a/.docker/files/base/Dockerfile b/.docker/files/base/Dockerfile
index d6611759..0eb51c91 100644
--- a/.docker/files/base/Dockerfile
+++ b/.docker/files/base/Dockerfile
@@ -1,13 +1,62 @@
FROM nurdism/neko:deps
#
-# neko files
+# avoid warnings by switching to noninteractive
+ENV DEBIAN_FRONTEND=noninteractive
+
+ARG USERNAME=neko
+ARG USER_UID=1000
+ARG USER_GID=$USER_UID
+
+#
+# install neko dependencies
+RUN set -eux; apt-get update; \
+ apt-get install -y --no-install-recommends wget ca-certificates; \
+ #
+ # create a non-root user
+ groupadd --gid $USER_GID $USERNAME; \
+ useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \
+ adduser $USERNAME audio; \
+ adduser $USERNAME video; \
+ adduser $USERNAME pulse; \
+ #
+ # setup pulseaudio
+ mkdir -p /home/$USERNAME/.config/pulse/; \
+ echo "default-server=unix:/tmp/pulseaudio.socket" > /home/$USERNAME/.config/pulse/client.conf; \
+ #
+ # workaround for an X11 problem: http://blog.tigerteufel.de/?p=476
+ mkdir /tmp/.X11-unix; chmod 1777 /tmp/.X11-unix; chown $USERNAME /tmp/.X11-unix/; \
+ #
+ # make directories for neko
+ mkdir -p /etc/neko /var/www /var/log/neko; chmod 1777 /var/log/neko; chown $USERNAME /var/log/neko/; \
+ chown -R $USERNAME:$USERNAME /home/$USERNAME; \
+ #
+ # clean up
+ apt-get clean -y; \
+ rm -rf /var/lib/apt/lists/* /var/cache/apt/*
+
+#
+# env
+ENV USER=$USERNAME
+ENV DISPLAY=:99.0
+ENV NEKO_PASSWORD=neko
+ENV NEKO_PASSWORD_ADMIN=admin
+ENV NEKO_BIND=:8080
+
+#
+# neko config
+COPY .docker/files/dbus /usr/bin/dbus
+COPY .docker/files/openbox.xml /etc/neko/openbox.xml
+COPY .docker/files/supervisord.conf /etc/neko/supervisord.conf
+COPY .docker/files/xorg.conf /etc/neko/xorg.conf
+COPY .docker/files/default.pa /etc/pulse/default.pa
COPY .docker/files/neko/supervisord.conf /etc/neko/supervisord/neko.conf
+
+#
+# neko dist
COPY client/dist/ /var/www
COPY server/bin/neko /usr/bin/neko
#
-# neko env
-ENV NEKO_PASSWORD=neko
-ENV NEKO_PASSWORD_ADMIN=admin
-ENV NEKO_BIND=:8080
\ No newline at end of file
+# run neko
+CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]
\ No newline at end of file
From cc95ee1376e7223105294a8544b451b349cbef37 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:07:12 +0000
Subject: [PATCH 24/31] :deps only has runtime deps
---
.docker/files/deps/Dockerfile | 45 +----------------------------------
1 file changed, 1 insertion(+), 44 deletions(-)
diff --git a/.docker/files/deps/Dockerfile b/.docker/files/deps/Dockerfile
index 5615f7cd..715083a8 100644
--- a/.docker/files/deps/Dockerfile
+++ b/.docker/files/deps/Dockerfile
@@ -1,37 +1,11 @@
FROM debian:stretch-slim
-#
-# avoid warnings by switching to noninteractive
-ENV DEBIAN_FRONTEND=noninteractive
-
-ARG USERNAME=neko
-ARG USER_UID=1000
-ARG USER_GID=$USER_UID
-
#
# install neko dependencies
RUN set -eux; apt-get update; \
- apt-get install -y --no-install-recommends wget ca-certificates pulseaudio openbox dbus-x11 xserver-xorg-video-dummy supervisor; \
+ apt-get install -y --no-install-recommends pulseaudio openbox dbus-x11 xserver-xorg-video-dummy supervisor; \
apt-get install -y --no-install-recommends libcairo2 libxcb1 libxrandr2 libxv1 libopus0 libvpx4; \
#
- # create a non-root user
- groupadd --gid $USER_GID $USERNAME; \
- useradd --uid $USER_UID --gid $USERNAME --shell /bin/bash --create-home $USERNAME; \
- adduser $USERNAME audio; \
- adduser $USERNAME video; \
- adduser $USERNAME pulse; \
- #
- # setup pulseaudio
- mkdir -p /home/$USERNAME/.config/pulse/; \
- echo "default-server=unix:/tmp/pulseaudio.socket" > /home/$USERNAME/.config/pulse/client.conf; \
- #
- # workaround for an X11 problem: http://blog.tigerteufel.de/?p=476
- mkdir /tmp/.X11-unix; chmod 1777 /tmp/.X11-unix; chown $USERNAME /tmp/.X11-unix/; \
- #
- # make directories for neko
- mkdir -p /etc/neko /var/www /var/log/neko; chmod 1777 /var/log/neko; chown $USERNAME /var/log/neko/; \
- chown -R $USERNAME:$USERNAME /home/$USERNAME; \
- #
# clean up
apt-get clean -y; \
rm -rf /var/lib/apt/lists/* /var/cache/apt/*
@@ -45,20 +19,3 @@ ENV PKG_CONFIG_PATH=/gst/local/lib/pkgconfig:$PKG_CONFIG_PATH
#
# copy gst
COPY .build/gst/local /gst/local/
-
-#
-# env
-ENV USER=$USERNAME
-ENV DISPLAY=:99.0
-
-#
-# copy configuation files
-COPY .docker/files/dbus /usr/bin/dbus
-COPY .docker/files/openbox.xml /etc/neko/openbox.xml
-COPY .docker/files/supervisord.conf /etc/neko/supervisord.conf
-COPY .docker/files/xorg.conf /etc/neko/xorg.conf
-COPY .docker/files/default.pa /etc/pulse/default.pa
-
-#
-# run neko
-CMD ["/usr/bin/supervisord", "-c", "/etc/neko/supervisord.conf"]
\ No newline at end of file
From f6cd7e7f6818d6f5fc443b53dd79b5e12b0083ce Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:18:04 +0000
Subject: [PATCH 25/31] gh actions test
---
.github/workflows/neko.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
index 283237cc..c7cec5df 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/neko.yml
@@ -12,6 +12,8 @@ jobs:
steps:
- name: Check out code
uses: actions/checkout@v2
+ with:
+ path: '/usr/bin/git'
- name: Fetch unshallow
run: git fetch --prune --tags --unshallow
From eb923b32902c52a467c2d69fbe65ffe9e137950e Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:22:45 +0000
Subject: [PATCH 26/31] syntax fix
---
.github/workflows/neko.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
index c7cec5df..fdcf9ec4 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/neko.yml
@@ -12,8 +12,8 @@ jobs:
steps:
- name: Check out code
uses: actions/checkout@v2
- with:
- path: '/usr/bin/git'
+ with:
+ path: '/usr/bin/git'
- name: Fetch unshallow
run: git fetch --prune --tags --unshallow
From 22772d3ac3869acfa72f26b3ce118ad1ae9dc9db Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:50:26 +0000
Subject: [PATCH 27/31] build git for gh actions
---
.docker/files/dev/Dockerfile | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/.docker/files/dev/Dockerfile b/.docker/files/dev/Dockerfile
index eab34eac..9569f3ef 100644
--- a/.docker/files/dev/Dockerfile
+++ b/.docker/files/dev/Dockerfile
@@ -5,7 +5,8 @@ FROM debian:stretch-slim
RUN set -eux; apt-get update; apt-get install -y --no-install-recommends \
apt-transport-https gnupg-agent software-properties-common lsb-release \
autoconf ca-certificates curl netbase wget gnupg dirmngr libatomic1 \
- bzr git mercurial openssh-client subversion procps cmake automake bzip2 dpkg-dev file g++ gcc \
+ libghc-zlib-dev libexpat1-dev \
+ bzr mercurial openssh-client subversion procps cmake automake bzip2 dpkg-dev file g++ gcc \
libbz2-dev libc6-dev libcurl4-openssl-dev libdb-dev libevent-dev libffi-dev libgdbm-dev libglib2.0-dev libgmp-dev \
libjpeg-dev libkrb5-dev liblzma-dev libmagickcore-dev libmagickwand-dev libmaxminddb-dev libncurses5-dev libncursesw5-dev \
libpng-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev libtool libwebp-dev libxml2-dev libxslt-dev libyaml-dev \
@@ -15,6 +16,19 @@ RUN set -eux; apt-get update; apt-get install -y --no-install-recommends \
libxfixes-dev apt-utils x11vnc libxtst-dev dialog \
pulseaudio openbox chromium firefox-esr dbus-x11 xserver-xorg-video-dummy supervisor;
+#
+# add git
+ENV GIT_VERSION 2.21.0
+
+RUN set -eux; \
+ cd /tmp/; \
+ wget https://github.com/git/git/archive/v$GIT_VERSION.zip -O latestgit.zip; \
+ unzip latestgit.zip; \
+ cd git-$GIT_VERSION; \
+ make prefix=/usr/local all; \
+ make prefix=/usr/local install; \
+ rm -rf /tmp/latestgit.zip /tmp/git-$GIT_VERSION;
+
#
# install libclipboard
RUN set -eux; \
@@ -39,7 +53,6 @@ COPY .build/gst/local /gst/local/
#
# add node
ENV NODE_VERSION 12.16.2
-
RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
&& case "${dpkgArch##*-}" in \
amd64) ARCH='x64';; \
From 6f3a7a68641964876457c97fcc97a99d22c4c5f1 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 00:50:51 +0000
Subject: [PATCH 28/31] gh actions test
---
.github/workflows/neko.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/.github/workflows/neko.yml b/.github/workflows/neko.yml
index fdcf9ec4..283237cc 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/neko.yml
@@ -12,8 +12,6 @@ jobs:
steps:
- name: Check out code
uses: actions/checkout@v2
- with:
- path: '/usr/bin/git'
- name: Fetch unshallow
run: git fetch --prune --tags --unshallow
From 98600ad5f6c3e09d390dc89cf9157a2c0c6ed064 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 01:12:49 +0000
Subject: [PATCH 29/31] gh actions complete
---
.docker/build | 5 ++--
.github/workflows/build.yml | 29 ++++++++++++++++++++++
.github/workflows/{neko.yml => deploy.yml} | 14 +++++++----
server/build | 2 ++
4 files changed, 43 insertions(+), 7 deletions(-)
create mode 100644 .github/workflows/build.yml
rename .github/workflows/{neko.yml => deploy.yml} (85%)
diff --git a/.docker/build b/.docker/build
index 200a6f8d..732c4c4d 100755
--- a/.docker/build
+++ b/.docker/build
@@ -54,9 +54,9 @@ build_deps() {
build_base() {
set -eux; \
- cd $DIR/server; go get; ./build; \
+ cd $DIR/server; go get -v -t -d . ; ./build; \
cd $DIR/client; npm install; npm run build; \
- sudo docker build -f files/base/Dockerfile -t nurdism/neko:base $DIR ;
+ cd $DIR; sudo docker build -f .docker/files/base/Dockerfile -t nurdism/neko:base $DIR ;
}
build_firefox() {
@@ -93,6 +93,7 @@ set -ex
case $1 in
push) build_push ;;
docker) build_docker ;;
+ base) build_base ;;
deps) build_deps ;;
dev) build_dev ;;
gst) build_gst ;;
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..a97a5234
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,29 @@
+name: n.eko build
+
+on:
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+ name: Build
+ runs-on: ubuntu-latest
+ container: nurdism/neko:dev
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Fetch unshallow
+ run: git fetch --prune --tags --unshallow
+
+ - name: Get go dependencies and build server
+ working-directory: server
+ run: |
+ go get -v -t -d .
+ ./build
+
+ - name: Get npm dependencies and build Client
+ working-directory: client
+ run: |
+ npm install
+ npm run build
\ No newline at end of file
diff --git a/.github/workflows/neko.yml b/.github/workflows/deploy.yml
similarity index 85%
rename from .github/workflows/neko.yml
rename to .github/workflows/deploy.yml
index 283237cc..243f9550 100644
--- a/.github/workflows/neko.yml
+++ b/.github/workflows/deploy.yml
@@ -1,12 +1,12 @@
-name: N.eko CI
+name: n.eko auto deploy
on:
push:
branches: [ master ]
jobs:
- build:
- name: Build
+ deploy:
+ name: Deploy
runs-on: ubuntu-latest
container: nurdism/neko:dev
steps:
@@ -18,11 +18,15 @@ jobs:
- name: Get go dependencies and build server
working-directory: server
- run: go get -v -t -d ./... && ./build
+ run: |
+ go get -v -t -d .
+ ./build
- name: Get npm dependencies and build Client
working-directory: client
- run: npm install && npm run build
+ run: |
+ npm install
+ npm run build
- name: Build the base image
run: docker build -f ./.docker/files/base/Dockerfile -t nurdism/neko:base .
diff --git a/server/build b/server/build
index 4812691c..895b12a7 100755
--- a/server/build
+++ b/server/build
@@ -1,5 +1,7 @@
#!/bin/bash
+set -ex
+
BUILD_TIME=`date -u +'%Y-%m-%dT%H:%M:%SZ'`
GIT_COMMIT=`git rev-parse --short HEAD`
GIT_BRANCH=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
From 7d5d35e5aee7f6b402ee1aef89a91a587c7f8aa9 Mon Sep 17 00:00:00 2001
From: Craig
Date: Sun, 19 Apr 2020 01:29:57 +0000
Subject: [PATCH 30/31] chages actions a bit
---
.github/workflows/build.yml | 5 ++++-
.github/workflows/deploy.yml | 5 ++++-
README.md | 1 +
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a97a5234..dc3fcca4 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,8 +1,11 @@
-name: n.eko build
+name: build
on:
pull_request:
branches: [ master ]
+ paths:
+ - 'client/**'
+ - 'server/**'
jobs:
build:
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 243f9550..1e5cfd12 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -1,8 +1,11 @@
-name: n.eko auto deploy
+name: deploy
on:
push:
branches: [ master ]
+ paths:
+ - 'client/**'
+ - 'server/**'
jobs:
deploy:
diff --git a/README.md b/README.md
index abee94be..4b305375 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@
+
From fa945d156fb09aff090fc78c1200b242ec1db6e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?=
Date: Sun, 19 Apr 2020 14:11:44 +0200
Subject: [PATCH 31/31] screen parsing fixed
Would result to invalid screen option, since it would parse width three times instead of other parameters.
```
WRN invalid screen option 1280x1280@1280 module=remote,
```
---
server/internal/types/config/remote.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/internal/types/config/remote.go b/server/internal/types/config/remote.go
index 7e555bdb..045a840b 100644
--- a/server/internal/types/config/remote.go
+++ b/server/internal/types/config/remote.go
@@ -124,8 +124,8 @@ func (s *Remote) Set() {
if len(res) > 0 {
width, err1 := strconv.ParseInt(res[1], 10, 64)
- height, err2 := strconv.ParseInt(res[1], 10, 64)
- rate, err3 := strconv.ParseInt(res[1], 10, 64)
+ height, err2 := strconv.ParseInt(res[2], 10, 64)
+ rate, err3 := strconv.ParseInt(res[3], 10, 64)
if err1 == nil && err2 == nil && err3 == nil {
s.ScreenWidth = int(width)