lex-microsoft_teams 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 439919e984b3f173a68fbf3aff14bcd05929e8d98a72bc9b0788f3ca52df6299
4
- data.tar.gz: e083fb48fa2085d2a62e3403e1e79fc4f1d50c594f098c2aefdedfb7fd1adca0
3
+ metadata.gz: 8ee034940a848fac4dc628b0eff49ba9f3ab6e82c369736de927d1e3fa7cbf3f
4
+ data.tar.gz: 9719c108cbadf8c7a28d716f449e1bfe156fe091997782eeb1f7c5b28f9ba761
5
5
  SHA512:
6
- metadata.gz: c51c461988ebf5448d971c05f0e7adea2fe6b347b427d4ff39441461f440192dd1038292135a3acd570cbc6e539ac789e72d6b2d71fed140ce67e995bb644574
7
- data.tar.gz: 04750f07309b23c63e1ff20722e5d3507f06acccfa111c034eec8811c2776a95f5071a5e8781a2ff29a23542a9adbf249fa7404a69f8e4b3af49528ec4cbf889
6
+ metadata.gz: 908feae5f588ce0a92f8f0dae87174f24334348b893ba437379cb6e549af20ee7d0fe68de9053670be1a8dc2e01f4ca22cf76a0f659a249f681861b4b465b9f1
7
+ data.tar.gz: 8750195ca3966d196769d5c4228b09aeb974c6ee19b052ab7ac6c07ccc5a9d757cbdb8c7bbd67ef29992b37008d80b0dd63e7a96d3bbbf7ee3cb6f311b6bf480
data/CLAUDE.md CHANGED
@@ -10,7 +10,7 @@ Legion Extension that connects LegionIO to Microsoft Teams via Graph API and Bot
10
10
 
11
11
  **GitHub**: https://github.com/LegionIO/lex-microsoft_teams
12
12
  **License**: MIT
13
- **Version**: 0.6.0
13
+ **Version**: 0.6.2
14
14
 
15
15
  ## Architecture
16
16
 
@@ -14,6 +14,7 @@ require 'legion/extensions/microsoft_teams/runners/presence'
14
14
  require 'legion/extensions/microsoft_teams/runners/meetings'
15
15
  require 'legion/extensions/microsoft_teams/runners/transcripts'
16
16
  require 'legion/extensions/microsoft_teams/runners/people'
17
+ require 'legion/extensions/microsoft_teams/runners/ownership'
17
18
 
18
19
  module Legion
19
20
  module Extensions
@@ -35,6 +36,7 @@ module Legion
35
36
  include Runners::LocalCache
36
37
  include Runners::CacheIngest
37
38
  include Runners::People
39
+ include Runners::Ownership
38
40
 
39
41
  attr_reader :opts
40
42
 
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/microsoft_teams/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module MicrosoftTeams
8
+ module Runners
9
+ module Ownership
10
+ include Legion::Extensions::MicrosoftTeams::Helpers::Client
11
+
12
+ TEAMS_FILTER = "resourceProvisioningOptions/Any(x:x eq 'Team')"
13
+ TEAMS_SELECT = 'id,displayName,mail'
14
+ OWNERS_SELECT = 'id,displayName,mail'
15
+
16
+ def sync_owners(team_id: nil, **)
17
+ conn = graph_connection(**)
18
+ if team_id
19
+ owners = fetch_owners(conn: conn, team_id: team_id)
20
+ { owners: owners, team_count: 1, synced_at: Time.now.utc.iso8601 }
21
+ else
22
+ teams = fetch_all_teams(conn: conn)
23
+ all_owners = teams.flat_map do |team|
24
+ fetch_owners(conn: conn, team_id: team['id']).map { |o| o.merge('team_id' => team['id']) }
25
+ end
26
+ { owners: all_owners, team_count: teams.length, synced_at: Time.now.utc.iso8601 }
27
+ end
28
+ rescue StandardError => e
29
+ { error: e.message }
30
+ end
31
+
32
+ def detect_orphans(**)
33
+ conn = graph_connection(**)
34
+ teams = fetch_all_teams(conn: conn)
35
+ orphaned = []
36
+
37
+ teams.each do |team|
38
+ owners = fetch_owners(conn: conn, team_id: team['id'])
39
+ orphaned << { id: team['id'], display_name: team['displayName'], mail: team['mail'] } if owners.empty?
40
+ end
41
+
42
+ { orphaned_teams: orphaned, total_scanned: teams.length, orphan_count: orphaned.length }
43
+ rescue StandardError => e
44
+ { error: e.message }
45
+ end
46
+
47
+ def get_team_owners(team_id:, **)
48
+ conn = graph_connection(**)
49
+ owners = fetch_owners(conn: conn, team_id: team_id)
50
+ { team_id: team_id, owners: owners }
51
+ rescue StandardError => e
52
+ { error: e.message }
53
+ end
54
+
55
+ private
56
+
57
+ def fetch_all_teams(conn:)
58
+ params = { '$filter' => TEAMS_FILTER, '$select' => TEAMS_SELECT }
59
+ resp = conn.get('groups', params)
60
+ (resp.body || {}).fetch('value', [])
61
+ end
62
+
63
+ def fetch_owners(conn:, team_id:)
64
+ params = { '$select' => OWNERS_SELECT }
65
+ resp = conn.get("groups/#{team_id}/owners", params)
66
+ (resp.body || {}).fetch('value', [])
67
+ end
68
+
69
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
70
+ Legion::Extensions::Helpers.const_defined?(:Lex)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module MicrosoftTeams
6
- VERSION = '0.6.1'
6
+ VERSION = '0.6.2'
7
7
  end
8
8
  end
9
9
  end
@@ -18,6 +18,7 @@ require 'legion/extensions/microsoft_teams/runners/local_cache'
18
18
  require 'legion/extensions/microsoft_teams/runners/cache_ingest'
19
19
  require 'legion/extensions/microsoft_teams/runners/people'
20
20
  require 'legion/extensions/microsoft_teams/runners/profile_ingest'
21
+ require 'legion/extensions/microsoft_teams/runners/ownership'
21
22
 
22
23
  # Helpers (bot)
23
24
  require 'legion/extensions/microsoft_teams/helpers/high_water_mark'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-microsoft_teams
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -110,6 +110,7 @@ files:
110
110
  - lib/legion/extensions/microsoft_teams/runners/local_cache.rb
111
111
  - lib/legion/extensions/microsoft_teams/runners/meetings.rb
112
112
  - lib/legion/extensions/microsoft_teams/runners/messages.rb
113
+ - lib/legion/extensions/microsoft_teams/runners/ownership.rb
113
114
  - lib/legion/extensions/microsoft_teams/runners/people.rb
114
115
  - lib/legion/extensions/microsoft_teams/runners/presence.rb
115
116
  - lib/legion/extensions/microsoft_teams/runners/profile_ingest.rb