diff --git a/.gitignore b/.gitignore index e5e2a0e9..9855ab96 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,7 @@ # Build /coverage.txt /plugin.exe -/mattermost-zoom-plugin*.tar.gz +/mattermost-jitsi-plugin*.tar.gz /dist server/vendor node_modules @@ -26,3 +26,4 @@ webapp/dist # Mac *.swp .DS_Store +package-lock.json diff --git a/plugin.json b/plugin.json index 1b87dfe0..30a9e3b9 100644 --- a/plugin.json +++ b/plugin.json @@ -1,8 +1,8 @@ { "id": "jitsi", "name": "Jitsi", - "description": "Jitsi audio and video conferencing plugin for Mattermost.", - "version": "0.1.1", + "description": "Jitsi audio and video conferencing plugin for Mattermost. Follow https://github.com/seansackowitz/mattermost-plugin-jitsi for notifications on updates.", + "version": "0.2.0", "backend": { "executable": "server/plugin.exe" }, diff --git a/server/plugin.go b/server/plugin.go index 3f2ffa89..2e15b944 100644 --- a/server/plugin.go +++ b/server/plugin.go @@ -3,7 +3,9 @@ package main import ( "encoding/json" "fmt" + "log" "net/http" + "regexp" "strings" "sync/atomic" @@ -67,6 +69,14 @@ type StartMeetingRequest struct { MeetingId int `json:"meeting_id"` } +func encodeJitsiMeetingID(meeting string) string { + reg, err := regexp.Compile("[^a-zA-Z0-9]+") + if err != nil { + log.Fatal(err) + } + return reg.ReplaceAllString(meeting, "") +} + func (p *Plugin) handleStartMeeting(w http.ResponseWriter, r *http.Request) { userId := r.Header.Get("Mattermost-User-Id") @@ -93,18 +103,22 @@ func (p *Plugin) handleStartMeeting(w http.ResponseWriter, r *http.Request) { return } - meetingId := userId + req.ChannelId - jitsiUrl := strings.TrimSpace(p.config().JitsiURL) - meetingUrl := jitsiUrl + "/" + meetingId + var meetingID string + meetingID = encodeJitsiMeetingID(req.Topic) + if len(req.Topic) < 1 { + meetingID = generateRoomWithoutSeparator() + } + jitsiURL := strings.TrimSpace(p.config().JitsiURL) + meetingURL := jitsiURL + "/" + meetingID post := &model.Post{ UserId: user.Id, ChannelId: req.ChannelId, - Message: fmt.Sprintf("Meeting started at %s.", meetingUrl), + Message: fmt.Sprintf("Meeting started at %s.", meetingURL), Type: "custom_zoom", Props: map[string]interface{}{ - "meeting_id": meetingId, - "meeting_link": meetingUrl, + "meeting_id": meetingID, + "meeting_link": meetingURL, "meeting_status": "STARTED", "meeting_personal": false, "meeting_topic": req.Topic, @@ -118,12 +132,12 @@ func (p *Plugin) handleStartMeeting(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), err.StatusCode) return } else { - err = p.api.KeyValueStore().Set(fmt.Sprintf("%v%v", POST_MEETING_KEY, meetingId), []byte(post.Id)) + err = p.api.KeyValueStore().Set(fmt.Sprintf("%v%v", POST_MEETING_KEY, meetingID), []byte(post.Id)) if err != nil { http.Error(w, err.Error(), err.StatusCode) return } } - w.Write([]byte(fmt.Sprintf("%v", meetingId))) + w.Write([]byte(fmt.Sprintf("%v", meetingID))) } diff --git a/server/randomNameGenerator.go b/server/randomNameGenerator.go new file mode 100644 index 00000000..c187b938 --- /dev/null +++ b/server/randomNameGenerator.go @@ -0,0 +1,111 @@ +package main + +import ( + "math/rand" + "time" +) + +var PLURALNOUN = []string{ "Aliens", "Animals", "Antelopes", "Ants", "Apes", "Apples", "Baboons", + "Bacteria", "Badgers", "Bananas", "Bats", "Bears", "Birds", "Bonobos", + "Brides", "Bugs", "Bulls", "Butterflies", "Cheetahs", "Cherries", "Chicken", + "Children", "Chimps", "Clowns", "Cows", "Creatures", "Dinosaurs", "Dogs", + "Dolphins", "Donkeys", "Dragons", "Ducks", "Dwarfs", "Eagles", "Elephants", + "Elves", "Fathers", "Fish", "Flowers", "Frogs", "Fruit", "Fungi", + "Galaxies", "Geese", "Goats", "Gorillas", "Hedgehogs", "Hippos", "Horses", + "Hunters", "Insects", "Kids", "Knights", "Lemons", "Lemurs", "Leopards", + "LifeForms", "Lions", "Lizards", "Mice", "Monkeys", "Monsters", "Mushrooms", + "Octopodes", "Oranges", "Orangutans", "Organisms", "Pants", "Parrots", + "Penguins", "People", "Pigeons", "Pigs", "Pineapples", "Plants", "Potatoes", + "Priests", "Rats", "Reptiles", "Reptilians", "Rhinos", "Seagulls", "Sheep", + "Siblings", "Snakes", "Spaghetti", "Spiders", "Squid", "Squirrels", + "Stars", "Students", "Teachers", "Tigers", "Tomatoes", "Trees", "Vampires", + "Vegetables", "Viruses", "Vulcans", "Weasels", "Werewolves", "Whales", + "Witches", "Wizards", "Wolves", "Workers", "Worms", "Zebras" }; + +var VERB = []string{ "Abandon", "Adapt", "Advertise", "Answer", "Anticipate", "Appreciate", + "Approach", "Argue", "Ask", "Bite", "Blossom", "Blush", "Breathe", "Breed", + "Bribe", "Burn", "Calculate", "Clean", "Code", "Communicate", "Compute", + "Confess", "Confiscate", "Conjugate", "Conjure", "Consume", "Contemplate", + "Crawl", "Dance", "Delegate", "Devour", "Develop", "Differ", "Discuss", + "Dissolve", "Drink", "Eat", "Elaborate", "Emancipate", "Estimate", "Expire", + "Extinguish", "Extract", "Facilitate", "Fall", "Feed", "Finish", "Floss", + "Fly", "Follow", "Fragment", "Freeze", "Gather", "Glow", "Grow", "Hex", + "Hide", "Hug", "Hurry", "Improve", "Intersect", "Investigate", "Jinx", + "Joke", "Jubilate", "Kiss", "Laugh", "Manage", "Meet", "Merge", "Move", + "Object", "Observe", "Offer", "Paint", "Participate", "Party", "Perform", + "Plan", "Pursue", "Pierce", "Play", "Postpone", "Pray", "Proclaim", + "Question", "Read", "Reckon", "Rejoice", "Represent", "Resize", "Rhyme", + "Scream", "Search", "Select", "Share", "Shoot", "Shout", "Signal", "Sing", + "Skate", "Sleep", "Smile", "Smoke", "Solve", "Spell", "Steer", "Stink", + "Substitute", "Swim", "Taste", "Teach", "Terminate", "Think", "Type", + "Unite", "Vanish", "Worship" }; + +var ADVERB = []string{ "Absently", "Accurately", "Accusingly", "Adorably", "AllTheTime", "Alone", + "Always", "Amazingly", "Angrily", "Anxiously", "Anywhere", "Appallingly", + "Apparently", "Articulately", "Astonishingly", "Badly", "Barely", + "Beautifully", "Blindly", "Bravely", "Brightly", "Briskly", "Brutally", + "Calmly", "Carefully", "Casually", "Cautiously", "Cleverly", "Constantly", + "Correctly", "Crazily", "Curiously", "Cynically", "Daily", "Dangerously", + "Deliberately", "Delicately", "Desperately", "Discreetly", "Eagerly", + "Easily", "Euphoricly", "Evenly", "Everywhere", "Exactly", "Expectantly", + "Extensively", "Ferociously", "Fiercely", "Finely", "Flatly", "Frequently", + "Frighteningly", "Gently", "Gloriously", "Grimly", "Guiltily", "Happily", + "Hard", "Hastily", "Heroically", "High", "Highly", "Hourly", "Humbly", + "Hysterically", "Immensely", "Impartially", "Impolitely", "Indifferently", + "Intensely", "Jealously", "Jovially", "Kindly", "Lazily", "Lightly", + "Loudly", "Lovingly", "Loyally", "Magnificently", "Malevolently", "Merrily", + "Mightily", "Miserably", "Mysteriously", "NOT", "Nervously", "Nicely", + "Nowhere", "Objectively", "Obnoxiously", "Obsessively", "Obviously", + "Often", "Painfully", "Patiently", "Playfully", "Politely", "Poorly", + "Precisely", "Promptly", "Quickly", "Quietly", "Randomly", "Rapidly", + "Rarely", "Recklessly", "Regularly", "Remorsefully", "Responsibly", + "Rudely", "Ruthlessly", "Sadly", "Scornfully", "Seamlessly", "Seldom", + "Selfishly", "Seriously", "Shakily", "Sharply", "Sideways", "Silently", + "Sleepily", "Slightly", "Slowly", "Slyly", "Smoothly", "Softly", "Solemnly", + "Steadily", "Sternly", "Strangely", "Strongly", "Stunningly", "Surely", + "Tenderly", "Thoughtfully", "Tightly", "Uneasily", "Vanishingly", + "Violently", "Warmly", "Weakly", "Wearily", "Weekly", "Weirdly", "Well", + "Well", "Wickedly", "Wildly", "Wisely", "Wonderfully", "Yearly" }; + +var ADJECTIVE = []string{ "Abominable", "Accurate", "Adorable", "All", "Alleged", "Ancient", "Angry", + "Anxious", "Appalling", "Apparent", "Astonishing", "Attractive", "Awesome", + "Baby", "Bad", "Beautiful", "Benign", "Big", "Bitter", "Blind", "Blue", + "Bold", "Brave", "Bright", "Brisk", "Calm", "Camouflaged", "Casual", + "Cautious", "Choppy", "Chosen", "Clever", "Cold", "Cool", "Crawly", + "Crazy", "Creepy", "Cruel", "Curious", "Cynical", "Dangerous", "Dark", + "Delicate", "Desperate", "Difficult", "Discreet", "Disguised", "Dizzy", + "Dumb", "Eager", "Easy", "Edgy", "Electric", "Elegant", "Emancipated", + "Enormous", "Euphoric", "Evil", "Fast", "Ferocious", "Fierce", "Fine", + "Flawed", "Flying", "Foolish", "Foxy", "Freezing", "Funny", "Furious", + "Gentle", "Glorious", "Golden", "Good", "Green", "Green", "Guilty", + "Hairy", "Happy", "Hard", "Hasty", "Hazy", "Heroic", "Hostile", "Hot", + "Humble", "Humongous", "Humorous", "Hysterical", "Idealistic", "Ignorant", + "Immense", "Impartial", "Impolite", "Indifferent", "Infuriated", + "Insightful", "Intense", "Interesting", "Intimidated", "Intriguing", + "Jealous", "Jolly", "Jovial", "Jumpy", "Kind", "Laughing", "Lazy", "Liquid", + "Lonely", "Longing", "Loud", "Loving", "Loyal", "Macabre", "Mad", "Magical", + "Magnificent", "Malevolent", "Medieval", "Memorable", "Mere", "Merry", + "Mighty", "Mischievous", "Miserable", "Modified", "Moody", "Most", + "Mysterious", "Mystical", "Needy", "Nervous", "Nice", "Objective", + "Obnoxious", "Obsessive", "Obvious", "Opinionated", "Orange", "Painful", + "Passionate", "Perfect", "Pink", "Playful", "Poisonous", "Polite", "Poor", + "Popular", "Powerful", "Precise", "Preserved", "Pretty", "Purple", "Quick", + "Quiet", "Random", "Rapid", "Rare", "Real", "Reassuring", "Reckless", "Red", + "Regular", "Remorseful", "Responsible", "Rich", "Rude", "Ruthless", "Sad", + "Scared", "Scary", "Scornful", "Screaming", "Selfish", "Serious", "Shady", + "Shaky", "Sharp", "Shiny", "Shy", "Simple", "Sleepy", "Slow", "Sly", + "Small", "Smart", "Smelly", "Smiling", "Smooth", "Smug", "Sober", "Soft", + "Solemn", "Square", "Square", "Steady", "Strange", "Strong", "Stunning", + "Subjective", "Successful", "Surly", "Sweet", "Tactful", "Tense", + "Thoughtful", "Tight", "Tiny", "Tolerant", "Uneasy", "Unique", "Unseen", + "Warm", "Weak", "Weird", "WellCooked", "Wild", "Wise", "Witty", "Wonderful", + "Worried", "Yellow", "Young", "Zealous" }; + +func randomElement(s []string) string { + rand.Seed(time.Now().UnixNano()) + return s[rand.Intn(len(s)-1)] +} + +func generateRoomWithoutSeparator() string { + return (randomElement(ADJECTIVE) + randomElement(PLURALNOUN) + randomElement(VERB) + randomElement(ADVERB)) +} \ No newline at end of file