-
Notifications
You must be signed in to change notification settings - Fork 69
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
Adding support for transcripts, recording, AI summarization and meeting subscription to channels #377
base: master
Are you sure you want to change the base?
Adding support for transcripts, recording, AI summarization and meeting subscription to channels #377
Conversation
var response *http.Response | ||
for retries > 0 { | ||
var err error | ||
response, err = http.DefaultClient.Do(request) |
Check failure
Code scanning / CodeQL
Uncontrolled data used in network request Critical
URL
user-provided value
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is because we are handling the incoming webhook from zoom as something secure, it should be signed if you configured it properly
return | ||
} | ||
request.Header.Set("Authorization", "Bearer "+webhook.DownloadToken) | ||
response, err := http.DefaultClient.Do(request) |
Check failure
Code scanning / CodeQL
Uncontrolled data used in network request Critical
URL
user-provided value
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is because we are handling the incoming webhook from zoom as something secure, it should be signed if you configured it properly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeQL code tracing is 👌
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh yes, I check the "show paths" and I was really impressed, It is pure gold.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Excellent feature here 🚀
I gave the PR a review and added some comments for discussion. Let me know what you think 👍
return | ||
} | ||
request.Header.Set("Authorization", "Bearer "+webhook.DownloadToken) | ||
response, err := http.DefaultClient.Do(request) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeQL code tracing is 👌
@mickmister PTAL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@@ -241,18 +241,40 @@ func (p *Plugin) runConnectCommand(user *model.User, extra *model.CommandArgs) ( | |||
} | |||
|
|||
func (p *Plugin) runSubscribeCommand(user *model.User, extra *model.CommandArgs, meetingID int) (string, error) { | |||
if !p.API.HasPermissionToChannel(user.Id, extra.ChannelId, model.PermissionCreatePost) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a product question - Who should have permissions to subscribe a channel to a meeting id? Probably good to DRY it up into its own method as well
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think a bit of repetition here is not that bad, anyway, I think the way of thinking about it, for me is, if you are able to publish a post, you will be able to do it anyway, but I'm ok if we only allow this to channel admins, for example.
@jespino trying to build this locally and encountering some issues that are probably really simple to fix -- maybe my environment is configured incorrectly. Can you help me out? EDIT: Also, I'm looking to configure this Zoom plugin in my own Zoom workspace (which I registered and set up) but I need to know a little more about the scopes and events you set up for this plugin. Can you share your example? > make server
mkdir -p server/dist;
cd server && env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 /usr/local/go/bin/go build -ldflags '-X "github.com/mattermost/mattermost/server/public/pluginapi/experimental/telemetry.rudderWriteKey=1d5bMvdrfWClLxgK1FvV3s4U1tg"' -trimpath -o dist/plugin-linux-amd64;
# github.com/mattermost/mattermost-plugin-zoom/server
./configuration.go:133:105: undefined: manifest
./http.go:459:46: undefined: manifest
./http.go:900:46: undefined: manifest
make: *** [server] Error 1 > make webapp
./build/bin/manifest apply
cd webapp && /Users/andrew/.nvm/versions/node/v18.12.1/bin/npm install
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR!
npm ERR! While resolving: [email protected]
npm ERR! Found: [email protected]
npm ERR! node_modules/react
npm ERR! react@"17.0.2" from the root project
npm ERR! peer react@">=16.8.0" from @emotion/[email protected]
npm ERR! node_modules/@emotion/react
npm ERR! dev @emotion/react@"11.11.0" from the root project
npm ERR! 4 more (@emotion/use-insertion-effect-with-fallbacks, ...)
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^18.3.1" from [email protected]
npm ERR! node_modules/react-dom
npm ERR! peer react-dom@">= 16.8.0" from [email protected]
npm ERR! node_modules/styled-components
npm ERR! styled-components@"6.1.10" from the root project
npm ERR!
npm ERR! Conflicting peer dependency: [email protected]
npm ERR! node_modules/react
npm ERR! peer react@"^18.3.1" from [email protected]
npm ERR! node_modules/react-dom
npm ERR! peer react-dom@">= 16.8.0" from [email protected]
npm ERR! node_modules/styled-components
npm ERR! styled-components@"6.1.10" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force, or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR!
npm ERR! See /Users/andrew/.npm/eresolve-report.txt for a full report.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/andrew/.npm/_logs/2024-06-26T21_44_49_459Z-debug-0.log
make: *** [webapp/node_modules] Error 1 |
…ng-and-ai-summarization
I consulted @jespino and was able to build by using On the Zoom side, after creating the integration according to the documentation, I went to
Then I went to
I started following the steps for Test Case 1 but after creating a recurring meeting in the Zoom interface, I was unable to subscribe to it in a channel with I'm unable to test Test Case 2 because as far as I can tell, this requires a paid Zoom account so you have access to cloud recordings? Please let me know if there's another way to test this. My main takeaway is that this setup has several steps. You have to configure the Mattermost plugin and the Zoom app in parallel, because they require each other's fields to complete. Then you have to add all the scopes, then configure the webhook events and add them. And then you have to use slash commands to actually set it up. I think there's still some improvement to be done for the admin setup experience. What if we make this a step-by-step prompted guide via a I propose that an issue is opened to update the docs page for this plugin to reflect these new scopes and events. Right now, the docs for configuring the webhook events don't tell you what events you need enabled (it just suggests a name, maybe reflects an old UI on Zoom?) In terms of producing video asset(s), I see two objectives:
Next actions:
cc @jasonblais |
…ng-and-ai-summarization
I opened a docs PR to correspond with the changes in this PR. |
@jespino Currently there is no way to know what meetings a channel is subscribed to, which makes it hard to know what state it's in. Should we add a slash command (maybe |
Is there a timeline for merging this? |
@azigler not really, we are still waiting for the security review and there are other things that are higher priority. |
@jespino Any appetite for getting this merged while we're still using Zoom? |
@wiggin77 I would love to see this merged, but it requires the security review and it is still pending, I guess V10 release has keep the security team busy for this kind of things. @esarafianou any news on this? |
…ng-and-ai-summarization
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Leaving this request for change to get this off my review queue until it is ready.
This PR include 3 important changes:
Testing
For testing this, you should test the 3 features independently (there is some degree of overlap, but I going to propose independent test cases). Another important thing is that before you test it you need to configure the zoom application in the zoom marketplace with the right webhook events (it has change, so check out the documentation).
I expect all the test proposed here are executed after properly configuring zoom plugin and AI copilot plugin
Test case 1: Subscription
/zoom subscribe [meeting id]
, where[meeting id]
is the ID of the created meeting in the pervious step (without spaces)/zoom unsubscribe [meeting id]
, with the same meeting id.Test case 2: Recordings, Chats, and Transcriptions (Without AI Copilot enabled)
Test case 3: AI Summarization (With AI Copilot enabled)