Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: panic / runtime error #48

Open
mmjoliver opened this issue Dec 17, 2024 · 17 comments
Open

Bug: panic / runtime error #48

mmjoliver opened this issue Dec 17, 2024 · 17 comments
Assignees
Labels

Comments

@mmjoliver
Copy link

I installed this plugin (v 9.0.4)on a self-hosted v9.11.6 instance of Mattermost. I was watching mattermost.log to troubleshoot something when out of the blue I got:

{"timestamp":"2024-12-13 19:55:27.765 Z","level":"warn","msg":"api error response","caller":"app/plugin_api.go:1014","plugin_id":"focalboard","code":"404","error":"\"sql: no rows in result set\"","api":"/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/sharing"} {"timestamp":"2024-12-13 19:55:40.488 Z","level":"error","msg":"Http handler panic","caller":"app/plugin_api.go:1011","plugin_id":"focalboard","panic":"\"runtime error: invalid memory address or nil pointer dereference\"","stack":"\"goroutine 21448 [running]:\nruntime/debug.Stack()\n\truntime/debug/stack.go:24 +0x5e\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()\n\tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:115](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()%5Cn%5Ctgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:115) +0x112\npanic({0x12d4940?, 0x25baf00?})\n\truntime/panic.go:770 +0x132\[ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0](http://ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0), {0xc000984dc0, 0x1a}, {0xc000a8cecf, 0x1b}, 0x25d4520)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98](http://tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98) +0x5b1\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetBlocks(0xc000703800](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetBlocks(0xc000703800), {0x16c1ce8, 0xc0009ab940}, 0xc000a35e60)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/blocks.go:96](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/blocks.go:96) +0x3b3\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerBlocksRoutes.(*API).attachSession.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerBlocksRoutes.(*API).attachSession.func1(%7B0x16c1ce8), 0xc0009ab940}, 0xc000a35d40)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31) +0x195\nnet/http.HandlerFunc.ServeHTTP(0x4119db?, {0x16c1ce8?, 0xc0009ab940?}, 0x70aff5f8e108?)\n\tnet/http/server.go:2171 +0x29\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1(%7B0x16c1ce8), 0xc0009ab940}, 0xc000a35d40)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134) +0x6a\nnet/http.HandlerFunc.ServeHTTP(0xc000ae9458?, {0x16c1ce8?, 0xc0009ab940?}, 0x1419ac0?)\n\tnet/http/server.go:2171 +0x29\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1(%7B0x16c1ce8)?, 0xc0009ab940?}, 0xc000b5ad80?)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122) +0x87\nnet/http.HandlerFunc.ServeHTTP(0xc000a35c20?, {0x16c1ce8?, 0xc0009ab940?}, 0x87e800?)\n\tnet/http/server.go:2171 +0x29\[ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0](http://ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0), {0x16c1ce8, 0xc0009ab940}, 0xc000a359e0)\n\[tgithub.com/gorilla/[email protected]/mux.go:212](http://tgithub.com/gorilla/[email protected]/mux.go:212) +0x1e2\ngit...","uri":"/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/blocks"} {"timestamp":"2024-12-13 19:55:40.491 Z","level":"warn","msg":"api error response","caller":"app/plugin_api.go:1014","plugin_id":"focalboard","code":"500","error":"\"http handler panic\"","api":"/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/blocks"} {"timestamp":"2024-12-13 19:55:40.557 Z","level":"error","msg":"Http handler panic","caller":"app/plugin_api.go:1011","plugin_id":"focalboard","panic":"\"runtime error: invalid memory address or nil pointer dereference\"","stack":"\"goroutine 21509 [running]:\nruntime/debug.Stack()\n\truntime/debug/stack.go:24 +0x5e\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()\n\tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:115](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()%5Cn%5Ctgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:115) +0x112\npanic({0x12d4940?, 0x25baf00?})\n\truntime/panic.go:770 +0x132\[ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0](http://ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0), {0xc0007c33e0, 0x1a}, {0xc0006b724f, 0x1b}, 0x25d4520)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98](http://tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98) +0x5b1\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetMembersForBoard(0xc000703800](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetMembersForBoard(0xc000703800), {0x16c1ce8, 0xc0006ba2b0}, 0xc000d30b40)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/members.go:55](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/members.go:55) +0xc9\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerMembersRoutes.(*API).sessionRequired.(*API).attachSession.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerMembersRoutes.(*API).sessionRequired.(*API).attachSession.func1(%7B0x16c1ce8), 0xc0006ba2b0}, 0xc000d30900)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31) +0x195\nnet/http.HandlerFunc.ServeHTTP(0x4119db?, {0x16c1ce8?, 0xc0006ba2b0?}, 0x70aff5f8e108?)\n\tnet/http/server.go:2171 +0x29\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1(%7B0x16c1ce8), 0xc0006ba2b0}, 0xc000d30900)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134) +0x6a\nnet/http.HandlerFunc.ServeHTTP(0xc0003cb458?, {0x16c1ce8?, 0xc0006ba2b0?}, 0x1419ac0?)\n\tnet/http/server.go:2171 +0x29\[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1(%7B0x16c1ce8)?, 0xc0006ba2b0?}, 0xc0007823c0?)\n\[tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122) +0x87\nnet/http.HandlerFunc.ServeHTTP(0xc000d307e0?, {0x16c1ce8?, 0xc0006ba2b0?}, 0x87e800?)\n\tnet/http/server.go:2171 +0x29\[ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0](http://ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0), {0x16c1ce8, 0xc0006ba2b0}, 0xc000d2aa20)\n\[tgithub.com/gorilla..](http://tgithub.com/gorilla..).","uri":"/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/members"} {"timestamp":"2024-12-13 19:55:40.558 Z","level":"warn","msg":"api error response","caller":"app/plugin_api.go:1014","plugin_id":"focalboard","code":"500","error":"\"http handler panic\"","api":"/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/members"} {"timestamp":"2024-12-13 19:55:40.588 Z","level":"warn","msg":"api error response","caller":"app/plugin_api.go:1014","plugin_id":"focalboard","code":"400","error":"\"User IDs are empty\"","api":"/api/v2/teams/3nryxymdjffftcrqmf75cpm4kw/users"}

@bbodenmiller
Copy link

bbodenmiller commented Jan 15, 2025

Cleaned up version of these logs:

{
  "timestamp": "2024-12-13 19:55:27.765 Z",
  "level": "warn",
  "msg": "api error response",
  "caller": "app/plugin_api.go:1014",
  "plugin_id": "focalboard",
  "code": "404",
  "error": "sql: no rows in result set",
  "api": "/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/sharing"
}

{
	"timestamp": "2024-12-13 19:55:40.488 Z",
	"level": "error",
	"msg": "Http handler panic",
	"caller": "app/plugin_api.go:1011",
	"plugin_id": "focalboard",
	"panic": "runtime error: invalid memory address or nil pointer dereference",
	"stack": "goroutine 21448 [running]:
  runtime/debug.Stack()
    runtime/debug/stack.go:24 +0x5e[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()
      github.com/mattermost/mattermost-plugin-boards/server/api/api.go:115](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()%5Cn%5Ctgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:115) +0x112
  panic({0x12d4940?, 0x25baf00?})
      runtime/panic.go:770 +0x132[ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0](http://ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0), {0xc000984dc0, 0x1a}, {0xc000a8cecf, 0x1b}, 0x25d4520)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98](http://tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98) +0x5b1[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetBlocks(0xc000703800](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetBlocks(0xc000703800), {0x16c1ce8, 0xc0009ab940}, 0xc000a35e60)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/blocks.go:96](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/blocks.go:96) +0x3b3[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerBlocksRoutes.(*API).attachSession.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerBlocksRoutes.(*API).attachSession.func1(%7B0x16c1ce8), 0xc0009ab940}, 0xc000a35d40)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31) +0x195
  net/http.HandlerFunc.ServeHTTP(0x4119db?, {0x16c1ce8?, 0xc0009ab940?}, 0x70aff5f8e108?)
      net/http/server.go:2171 +0x29[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1(%7B0x16c1ce8), 0xc0009ab940}, 0xc000a35d40)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134) +0x6a
  net/http.HandlerFunc.ServeHTTP(0xc000ae9458?, {0x16c1ce8?, 0xc0009ab940?}, 0x1419ac0?)
      net/http/server.go:2171 +0x29[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1(%7B0x16c1ce8)?, 0xc0009ab940?}, 0xc000b5ad80?)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122) +0x87
  net/http.HandlerFunc.ServeHTTP(0xc000a35c20?, {0x16c1ce8?, 0xc0009ab940?}, 0x87e800?)
      net/http/server.go:2171 +0x29[ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0](http://ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0), {0x16c1ce8, 0xc0009ab940}, 0xc000a359e0)
  [tgithub.com/gorilla/[email protected]/mux.go:212](http://tgithub.com/gorilla/[email protected]/mux.go:212) +0x1e2
  git...",
	"uri": "/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/blocks"
}

{
  "timestamp": "2024-12-13 19:55:40.491 Z",
  "level": "warn",
  "msg": "api error response",
  "caller": "app/plugin_api.go:1014",
  "plugin_id": "focalboard",
  "code": "500",
  "error": "http handler panic",
  "api": "/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/blocks"
}

{
  "timestamp": "2024-12-13 19:55:40.557 Z",
  "level": "error",
  "msg": "Http handler panic",
  "caller": "app/plugin_api.go:1011",
  "plugin_id": "focalboard",
  "panic": "runtime error: invalid memory address or nil pointer dereference",
  "stack": "goroutine 21509 [running]:
  runtime/debug.Stack()
      runtime/debug/stack.go:24 +0x5e[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()
      github.com/mattermost/mattermost-plugin-boards/server/api/api.go:115](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1.1()%5Cn%5Ctgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:115) +0x112
  panic({0x12d4940?, 0x25baf00?})
      runtime/panic.go:770 +0x132[ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0](http://ngithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions.(*Service).HasPermissionToBoard(0xc00072c5a0), {0xc0007c33e0, 0x1a}, {0xc0006b724f, 0x1b}, 0x25d4520)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98](http://tgithub.com/mattermost/mattermost-plugin-boards/server/services/permissions/mmpermissions/mmpermissions.go:98) +0x5b1[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetMembersForBoard(0xc000703800](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).handleGetMembersForBoard(0xc000703800), {0x16c1ce8, 0xc0006ba2b0}, 0xc000d30b40)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/members.go:55](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/members.go:55) +0xc9[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerMembersRoutes.(*API).sessionRequired.(*API).attachSession.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).registerMembersRoutes.(*API).sessionRequired.(*API).attachSession.func1(%7B0x16c1ce8), 0xc0006ba2b0}, 0xc000d30900)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/auth.go:31) +0x195
  net/http.HandlerFunc.ServeHTTP(0x4119db?, {0x16c1ce8?, 0xc0006ba2b0?}, 0x70aff5f8e108?)
      net/http/server.go:2171 +0x29[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).requireCSRFToken-fm.(*API).requireCSRFToken.func1(%7B0x16c1ce8), 0xc0006ba2b0}, 0xc000d30900)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:134) +0x6a
  net/http.HandlerFunc.ServeHTTP(0xc0003cb458?, {0x16c1ce8?, 0xc0006ba2b0?}, 0x1419ac0?)
      net/http/server.go:2171 +0x29[ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1({0x16c1ce8](http://ngithub.com/mattermost/mattermost-plugin-boards/server/api.(*API).panicHandler-fm.(*API).panicHandler.func1(%7B0x16c1ce8)?, 0xc0006ba2b0?}, 0xc0007823c0?)
  [tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122](http://tgithub.com/mattermost/mattermost-plugin-boards/server/api/api.go:122) +0x87
  net/http.HandlerFunc.ServeHTTP(0xc000d307e0?, {0x16c1ce8?, 0xc0006ba2b0?}, 0x87e800?)
      net/http/server.go:2171 +0x29[ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0](http://ngithub.com/gorilla/mux.(*Router).ServeHTTP(0xc000744fc0), {0x16c1ce8, 0xc0006ba2b0}, 0xc000d2aa20)
  [tgithub.com/gorilla..](http://tgithub.com/gorilla..).",
  "uri": "/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/members"
}

{
  "timestamp": "2024-12-13 19:55:40.558 Z",
  "level": "warn",
  "msg": "api error response",
  "caller": "app/plugin_api.go:1014",
  "plugin_id": "focalboard",
  "code": "500",
  "error": "http handler panic",
  "api": "/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/members"
}

{
  "timestamp": "2024-12-13 19:55:40.588 Z",
  "level": "warn",
  "msg": "api error response",
  "caller": "app/plugin_api.go:1014",
  "plugin_id": "focalboard",
  "code": "400",
  "error": "User IDs are empty",
  "api": "/api/v2/teams/3nryxymdjffftcrqmf75cpm4kw/users"
}

@bbodenmiller
Copy link

Also seeing this issue on 9.0.2 and 9.0.4.

@bbodenmiller
Copy link

@Rajat-Dabade are you able to look at this?

@Rajat-Dabade
Copy link
Contributor

@bbodenmiller will look into this today.

@Rajat-Dabade
Copy link
Contributor

@bbodenmiller @mmjoliver Can you tell me the steps to reproduce this issue? Thank you.

@mmjoliver
Copy link
Author

@Rajat-Dabade I couldn't identify an action that triggered this... I just saw it happen.

@Rajat-Dabade
Copy link
Contributor

@mmjoliver Does this happen when you try to open a card which consists of any link in the comment by chance?

@bbodenmiller
Copy link

@Rajat-Dabade same here, I'm not aware of what exactly triggers the error and subsequent plug-in crash. I wasn't seeing this on 9.0.0 but can't say exact same actions were being performed on that version so perhaps just never triggered the error.

@mmjoliver
Copy link
Author

@Rajat-Dabade I just went through, opening some cards, making new ones, looking at different views, etc. and wasn't able to recreate.

@bbodenmiller
Copy link

Downgraded to 8.0.0 and haven't seen a crash yet.

@Rajat-Dabade
Copy link
Contributor

@bbodenmiller @mmjoliver Can you try adding any link in the comment in any card and see if you are getting the same error while re-opening the same card again?

@Rajat-Dabade Rajat-Dabade self-assigned this Jan 16, 2025
@bbodenmiller
Copy link

@Rajat-Dabade using which version?

@Rajat-Dabade
Copy link
Contributor

@bbodenmiller using v9.0.4

@mmjoliver
Copy link
Author

OK, this is interesting. I tailed the logs to watch and added a URL to comments. No errors were logged (at INFO, I changed to DEBUG and reproduced) but the screen refreshed and an error of some sort flashed by, and then "the card is doesn't exist or is inaccessible"

{"timestamp":"2025-01-16 18:50:15.800 Z","level":"debug","msg":"CSRF Check failed for request - Please migrate your plugin to either send a CSRF Header or Form Field, XMLHttpRequest is deprecated","caller":"app/plugin_requests.go:195","path":"/plugins/focalboard/api/v2/boards/bt69oh7yogbrsjbwsdyg6rirhur/blocks","ip":"[2600:8800:1600:15d:9e8e:ec6c:923b:187c]:34348","session_id":"u7qksfpzxjgsdc568u1jzhqfrc","user_id":"d3atns17ajfr8k4e874zfeyojw"} {"timestamp":"2025-01-16 18:50:15.820 Z","level":"debug","msg":"POST Blocks","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","block_count":"1","disable_notify":"false"} {"timestamp":"2025-01-16 18:50:15.829 Z","level":"debug","msg":"Block change event","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","action":"add","board":"\"Show Planning\"","card":"\"San Tan\"","block_id":"aigrcwbf8xby95gujbxbmakb7ie"} {"timestamp":"2025-01-16 18:50:15.973 Z","level":"debug","msg":"websocket.NextReader: client side closed socket","caller":"platform/web_conn.go:986","user_id":"d3atns17ajfr8k4e874zfeyojw","conn_id":"spbbq4chof8hjrp6ekgtm53smy","origin_client":"web"} {"timestamp":"2025-01-16 18:50:15.973 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/websocket","request_id":"4qino5herjff5bee1ef68juoac","user_id":"d3atns17ajfr8k4e874zfeyojw"} {"timestamp":"2025-01-16 18:50:16.028 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/boards/team/3nryxymdjffftcrqmf75cpm4kw/bt69oh7yogbrsjbwsdyg6rirhur/vz318xwmwjtrpme7p8z1hsdecie/plugins/focalboard/error","request_id":"npcmiyafdbr6pmdt7p4xgdxojr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.060 Z","level":"debug","msg":"inactive connection found for webconn, reusing","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","webConnID":"spbbq4chof8hjrp6ekgtm53smy","userID":"d3atns17ajfr8k4e874zfeyojw"} {"timestamp":"2025-01-16 18:50:16.169 Z","level":"debug","msg":"websocket.NextReader: closing websocket","caller":"platform/web_conn.go:991","user_id":"d3atns17ajfr8k4e874zfeyojw","conn_id":"spbbq4chof8hjrp6ekgtm53smy","origin_client":"web","error":"websocket: close 1006 (abnormal closure): unexpected EOF"} {"timestamp":"2025-01-16 18:50:16.169 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/websocket","request_id":"mpjrbw6ob78udkf5ficj3s3oih","user_id":"d3atns17ajfr8k4e874zfeyojw"} {"timestamp":"2025-01-16 18:50:16.805 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/config/client","request_id":"tgonxrfwwig59esagt4suqktmr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.807 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/license/client","request_id":"jz5okjigqiftdr7cnaxagdrqnr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.881 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/config/client","request_id":"akcphwjo8fg6bndxwkzg7iimxr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.882 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/license/client","request_id":"xgwyozomi3848g3nimpdi3nhpy","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.886 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/teams","request_id":"9njs7bqfsbr9pd11enzx65cbpr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.886 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me","request_id":"a1bmw9tqr3fsigq3o9ie3kdoga","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.887 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/teams/members","request_id":"mrxgigfmx3d8b8xwwchdzc3a8e","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.887 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/preferences","request_id":"hgpsdtw9x78sfrhx56dt8y866h","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.950 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/roles/names","request_id":"q4q5wxsd8idc8rwkk44qgq6aca","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.951 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/roles/names","request_id":"rxjnnf64rpftmk31zx5chyxe9e","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:16.954 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/teams/unread","request_id":"ty1t3jgppf8widhhdama417dhc","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:17.002 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/limits/server","request_id":"pw5znucqujypfpuqdg5af6kx1h","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:17.077 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/emoji/names","request_id":"pqxmbhtfqint3jipsx7m77fw9r","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:17.080 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/plugins/webapp","request_id":"ekam3mus8tnt5r8tnna9i3f78r","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:17.439 Z","level":"debug","msg":"New request:","caller":"app/plugin_api.go:1005","plugin_id":"com.github.matterpoll.matterpoll","Host":"azcdl-chat.org","RequestURI":"/plugins/com.github.matterpoll.matterpoll/api/v1/configuration","Method":"GET"} {"timestamp":"2025-01-16 18:50:18.045 Z","level":"debug","msg":"Received HTTP request","caller":"app/plugin_api.go:1005","plugin_id":"playbooks","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0","method":"GET","url":"/api/v0/settings","user_id":"d3atns17ajfr8k4e874zfeyojw","request_id":"eepugpnzzfr9prhockebcyq9bo","plugin_caller":"github.com/mattermost/mattermost-plugin-playbooks/server/api/logger.go:44"} {"timestamp":"2025-01-16 18:50:18.047 Z","level":"debug","msg":"Handled HTTP request","caller":"app/plugin_api.go:1005","plugin_id":"playbooks","method":"GET","url":"/api/v0/settings","user_id":"d3atns17ajfr8k4e874zfeyojw","request_id":"eepugpnzzfr9prhockebcyq9bo","time":"1","status":"200","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0","plugin_caller":"github.com/mattermost/mattermost-plugin-playbooks/server/api/logger.go:57"} {"timestamp":"2025-01-16 18:50:18.140 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/analytics/old","request_id":"wbdqqo81qbfudnhqwi3ac4hbxy","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:18.151 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/teams","request_id":"nb75xy8fbpge9rfanf4qhk3t9w","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:18.162 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/stats/filtered","request_id":"p7sgnutsxbghzm7su9y8aqum8e","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:18.489 Z","level":"debug","msg":"websocket.NextReader: closing websocket","caller":"platform/web_conn.go:991","user_id":"d3atns17ajfr8k4e874zfeyojw","conn_id":"uieqp3b1h3ykuqrp3hjz11fsfh","origin_client":"web","error":"websocket: close 1006 (abnormal closure): unexpected EOF"} {"timestamp":"2025-01-16 18:50:18.490 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/websocket","request_id":"rzj9uqae5pbqxgejmq4rjp4pko","user_id":"d3atns17ajfr8k4e874zfeyojw"} {"timestamp":"2025-01-16 18:50:18.575 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/boards/team/3nryxymdjffftcrqmf75cpm4kw/bt69oh7yogbrsjbwsdyg6rirhur/vz318xwmwjtrpme7p8z1hsdecie/boards/error","request_id":"49qc9p67dpdufecyuga3o6ke5c","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:18.583 Z","level":"debug","msg":"GetTemplates","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"0","boardsCount":"13"} {"timestamp":"2025-01-16 18:50:18.780 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/client_perf","request_id":"fe3rcpjc37fxppzgibx4hkf6hh","user_id":"d3atns17ajfr8k4e874zfeyojw"} {"timestamp":"2025-01-16 18:50:19.410 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/license/client","request_id":"jqnxd4o7s3njpeyncwebdfmuqr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.411 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/config/client","request_id":"qfzdefidrprbfpdtoc3b6a9igh","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.501 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/license/client","request_id":"d5ompy814ff48nhogykcqitj1e","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.502 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/config/client","request_id":"oyssei9ukpbsdmhruhijyii8yw","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.506 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/preferences","request_id":"1qomx3bagbdn3mnwsj7uwi6tna","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.506 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me","request_id":"wbfbznp9hf85jnf3bahwihscsh","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"304"} {"timestamp":"2025-01-16 18:50:19.507 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/teams/members","request_id":"kmuj1jnmsfn17noj8usn5eqkae","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.507 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/teams","request_id":"wse9534onjbf5rryhw1j15pwwy","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.568 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/roles/names","request_id":"79t3a3ibabfqinzr9i56yz7j1e","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.568 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/roles/names","request_id":"6oqk39kdq7db3dkremhgoux1ry","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.575 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/me/teams/unread","request_id":"tfqx98tsri81fpy8xqyge1hb4e","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.624 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/limits/server","request_id":"qqa9zyrkt7853fmpmac4yw6s8c","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.710 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/plugins/webapp","request_id":"3pwdoabnojnqmdff8ifu1msupr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:19.712 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"POST","url":"/api/v4/emoji/names","request_id":"x5e16pgf8fgexd7cpwzhyhb8he","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:20.465 Z","level":"debug","msg":"New request:","caller":"app/plugin_api.go:1005","plugin_id":"com.github.matterpoll.matterpoll","Host":"azcdl-chat.org","RequestURI":"/plugins/com.github.matterpoll.matterpoll/api/v1/configuration","Method":"GET"} {"timestamp":"2025-01-16 18:50:20.625 Z","level":"debug","msg":"Received HTTP request","caller":"app/plugin_api.go:1005","plugin_id":"playbooks","method":"GET","url":"/api/v0/settings","user_id":"d3atns17ajfr8k4e874zfeyojw","request_id":"xwagzmwn3ffn88bsd6u7sikmkc","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0","plugin_caller":"github.com/mattermost/mattermost-plugin-playbooks/server/api/logger.go:44"} {"timestamp":"2025-01-16 18:50:20.627 Z","level":"debug","msg":"Handled HTTP request","caller":"app/plugin_api.go:1005","plugin_id":"playbooks","status":"200","method":"GET","url":"/api/v0/settings","user_id":"d3atns17ajfr8k4e874zfeyojw","request_id":"xwagzmwn3ffn88bsd6u7sikmkc","user_agent":"Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0","time":"2","plugin_caller":"github.com/mattermost/mattermost-plugin-playbooks/server/api/logger.go:57"} {"timestamp":"2025-01-16 18:50:20.940 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/teams","request_id":"qdcd7quyt7dk9xspzu5qti7kjr","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:20.941 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/analytics/old","request_id":"86i81ofsqprc8mcrc8jgtxtzxe","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:20.950 Z","level":"debug","msg":"Received HTTP request","caller":"web/handlers.go:187","method":"GET","url":"/api/v4/users/stats/filtered","request_id":"fpqegzmqd7yqbnx8uefe5ddjuw","user_id":"d3atns17ajfr8k4e874zfeyojw","status_code":"200"} {"timestamp":"2025-01-16 18:50:21.153 Z","level":"debug","msg":"Command not implemented in plugin mode","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","command":"SUBSCRIBE_TEAM","webConnID":"685d3347wpfb9n6txgznpyg9kh","userID":"d3atns17ajfr8k4e874zfeyojw","teamID":"3nryxymdjffftcrqmf75cpm4kw"} {"timestamp":"2025-01-16 18:50:21.212 Z","level":"debug","msg":"New request:","caller":"app/plugin_api.go:1005","plugin_id":"com.github.matterpoll.matterpoll","Host":"azcdl-chat.org","RequestURI":"/plugins/com.github.matterpoll.matterpoll/api/v1/configuration","Method":"GET"} {"timestamp":"2025-01-16 18:50:21.230 Z","level":"debug","msg":"GetBoards","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"3nryxymdjffftcrqmf75cpm4kw","boardsCount":"1"} {"timestamp":"2025-01-16 18:50:21.245 Z","level":"debug","msg":"GetTemplates","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"3nryxymdjffftcrqmf75cpm4kw","boardsCount":"0"} {"timestamp":"2025-01-16 18:50:21.246 Z","level":"debug","msg":"GetTemplates","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"3nryxymdjffftcrqmf75cpm4kw","boardsCount":"0"} {"timestamp":"2025-01-16 18:50:21.247 Z","level":"debug","msg":"GetBoards","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"3nryxymdjffftcrqmf75cpm4kw","boardsCount":"1"} {"timestamp":"2025-01-16 18:50:21.254 Z","level":"debug","msg":"GetTemplates","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"0","boardsCount":"13"} {"timestamp":"2025-01-16 18:50:21.418 Z","level":"debug","msg":"GetBoards","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"3nryxymdjffftcrqmf75cpm4kw","boardsCount":"1"} {"timestamp":"2025-01-16 18:50:21.422 Z","level":"debug","msg":"GetTemplates","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","teamID":"3nryxymdjffftcrqmf75cpm4kw","boardsCount":"0"} {"timestamp":"2025-01-16 18:50:21.423 Z","level":"debug","msg":"GET subscriptions","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","subscriberID":"d3atns17ajfr8k4e874zfeyojw","count":"8"} {"timestamp":"2025-01-16 18:50:21.461 Z","level":"debug","msg":"GetBlocks","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","boardID":"bt69oh7yogbrsjbwsdyg6rirhur","parentID":"","blockType":"","blockID":"","block_count":"89"} {"timestamp":"2025-01-16 18:50:21.616 Z","level":"debug","msg":"GetMembersForBoard","caller":"app/plugin_api.go:1005","plugin_id":"focalboard","boardID":"bt69oh7yogbrsjbwsdyg6rirhur","membersCount":"6"} {"timestamp":"2025-01-16 18:50:21.670 Z","level":"debug","msg":"CSRF Check failed for request - Please migrate your plugin to either send a CSRF Header or Form Field, XMLHttpRequest is deprecated","caller":"app/plugin_requests.go:195","path":"/plugins/focalboard/api/v2/teams/3nryxymdjffftcrqmf75cpm4kw/users","ip":"[2600:8800:1600:15d:9e8e:ec6c:923b:187c]:34348","session_id":"u7qksfpzxjgsdc568u1jzhqfrc","user_id":"d3atns17ajfr8k4e874zfeyojw"}

@Rajat-Dabade
Copy link
Contributor

@mmjoliver This means you could reproduce the same error you were facing before, right?

@mmjoliver
Copy link
Author

No... I have not seen the panic again.

@Rajat-Dabade
Copy link
Contributor

@mmjoliver Okay, let me check what could have caused this error, and I will share more of my findings. Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants