yandex360 0.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/ci.yml +51 -0
- data/.gitignore +4 -1
- data/.rspec +5 -0
- data/Gemfile +0 -9
- data/Gemfile.lock +40 -4
- data/README.md +72 -1
- data/lib/yandex360/client.rb +16 -1
- data/lib/yandex360/collection.rb +22 -0
- data/lib/yandex360/error.rb +6 -0
- data/lib/yandex360/object.rb +25 -0
- data/lib/yandex360/objects/types.rb +20 -0
- data/lib/yandex360/resource.rb +59 -0
- data/lib/yandex360/resources/antispam.rb +18 -0
- data/lib/yandex360/resources/departments.rb +54 -0
- data/lib/yandex360/resources/groups.rb +49 -0
- data/lib/yandex360/resources/users.rb +50 -0
- data/lib/yandex360/version.rb +3 -3
- data/lib/yandex360.rb +23 -2
- data/spec/antispam_spec.rb +46 -0
- data/spec/client_spec.rb +24 -0
- data/spec/departments_spec.rb +131 -0
- data/spec/groups_spec.rb +133 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/users_spec.rb +203 -0
- data/spec/vcr/anispam/create.yml +43 -0
- data/spec/vcr/anispam/delete.yml +41 -0
- data/spec/vcr/anispam/list.yml +41 -0
- data/spec/vcr/departments/add_alias.yml +43 -0
- data/spec/vcr/departments/create.yml +43 -0
- data/spec/vcr/departments/delete.yml +41 -0
- data/spec/vcr/departments/delete_alias.yml +41 -0
- data/spec/vcr/departments/delete_error.yml +37 -0
- data/spec/vcr/departments/info.yml +41 -0
- data/spec/vcr/departments/list.yml +41 -0
- data/spec/vcr/departments/update.yml +44 -0
- data/spec/vcr/groups/add_user.yml +43 -0
- data/spec/vcr/groups/create.yml +43 -0
- data/spec/vcr/groups/delete.yml +41 -0
- data/spec/vcr/groups/delete_user.yml +41 -0
- data/spec/vcr/groups/list.yml +48 -0
- data/spec/vcr/groups/params.yml +41 -0
- data/spec/vcr/groups/update.yml +43 -0
- data/spec/vcr/groups/users.yml +41 -0
- data/spec/vcr/users/add.yml +43 -0
- data/spec/vcr/users/add_alias.yml +43 -0
- data/spec/vcr/users/delete_alias.yml +41 -0
- data/spec/vcr/users/get2FA.yml +41 -0
- data/spec/vcr/users/get2FA_error.yml +37 -0
- data/spec/vcr/users/has2FA.yml +41 -0
- data/spec/vcr/users/info.yml +41 -0
- data/spec/vcr/users/list.yml +41 -0
- data/spec/vcr/users/list_error.yml +37 -0
- data/spec/vcr/users/update.yml +44 -0
- data/yandex360.gemspec +8 -1
- metadata +143 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76cb70cc7abcc7012654e816187c056ee7c7662ed3d6532458295dcbe8d251bc
|
4
|
+
data.tar.gz: d73c143a23cae1e185726279c1adb32020793ca9bf0eb30e3b19510459c9db2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4f7532f4a5a7da9502c5ef0b2267768827245dfd4c2632f1db61f6130c2cabc2692ce66c449eeaec1496f9ad023cb8eddccc3310c9345df4d78e53671890f42
|
7
|
+
data.tar.gz: '088a2139e3200ea6086e5a54f6113de08917f9050f40444f53f80ee40ad0c98706d72178094e84386c7a9b10ee80c2792109b743e117d8b312d0a8eecf86bf32'
|
@@ -0,0 +1,51 @@
|
|
1
|
+
name: Ruby specs
|
2
|
+
on: [push, pull_request]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
name: tests
|
6
|
+
strategy:
|
7
|
+
fail-fast: false
|
8
|
+
matrix:
|
9
|
+
os: [ubuntu-latest, macos-latest]
|
10
|
+
ruby: ['2.6', '2.7', '3.0', '3.1', head, truffleruby, truffleruby-head]
|
11
|
+
runs-on: ${{ matrix.os }}
|
12
|
+
continue-on-error: true
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v3
|
15
|
+
- uses: ruby/setup-ruby@v1
|
16
|
+
with:
|
17
|
+
ruby-version: ${{ matrix.ruby }}
|
18
|
+
bundler-cache: true
|
19
|
+
|
20
|
+
- name: Get the newest rubygems version to rid ourselves of warnings
|
21
|
+
run: gem update --system --no-document
|
22
|
+
|
23
|
+
- name: Install bundler
|
24
|
+
run: gem i bundler --no-document
|
25
|
+
|
26
|
+
- name: Install dependencies
|
27
|
+
run: |
|
28
|
+
bundle config set --local without benchmark
|
29
|
+
bundle install --jobs=3
|
30
|
+
- name: RSpec testing
|
31
|
+
run: |
|
32
|
+
JRUBY_OPTS="--dev --debug" bundle exec rspec --color --format documentation
|
33
|
+
- name: Coveralls Parallel
|
34
|
+
uses: coverallsapp/github-action@1.1.3
|
35
|
+
with:
|
36
|
+
github-token: ${{ secrets.github_token }}
|
37
|
+
flag-name: run-${{ matrix.ruby-version }}
|
38
|
+
path-to-lcov: ./coverage/lcov/yandex360.lcov
|
39
|
+
parallel: true
|
40
|
+
|
41
|
+
coverage:
|
42
|
+
name: Coverage
|
43
|
+
needs: test
|
44
|
+
runs-on: ubuntu-latest
|
45
|
+
steps:
|
46
|
+
- name: Coveralls Finished
|
47
|
+
uses: coverallsapp/github-action@1.1.3
|
48
|
+
with:
|
49
|
+
github-token: ${{ secrets.github_token }}
|
50
|
+
path-to-lcov: ${{ github.workspace }}/coverage/lcov.info
|
51
|
+
parallel-finished: true
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
yandex360 (
|
4
|
+
yandex360 (1.1.0)
|
5
5
|
addressable (~> 2.3, >= 2.3.7)
|
6
6
|
faraday (~> 1.7)
|
7
|
-
faraday_middleware (~> 1.1)
|
8
7
|
|
9
8
|
GEM
|
10
9
|
remote: https://rubygems.org/
|
11
10
|
specs:
|
12
11
|
addressable (2.8.1)
|
13
12
|
public_suffix (>= 2.0.2, < 6.0)
|
13
|
+
crack (0.4.5)
|
14
|
+
rexml
|
15
|
+
diff-lcs (1.5.0)
|
16
|
+
docile (1.4.0)
|
14
17
|
faraday (1.10.2)
|
15
18
|
faraday-em_http (~> 1.0)
|
16
19
|
faraday-em_synchrony (~> 1.0)
|
@@ -34,16 +37,49 @@ GEM
|
|
34
37
|
faraday-patron (1.0.0)
|
35
38
|
faraday-rack (1.0.0)
|
36
39
|
faraday-retry (1.0.3)
|
37
|
-
|
38
|
-
faraday (~> 1.0)
|
40
|
+
hashdiff (1.0.1)
|
39
41
|
multipart-post (2.2.3)
|
40
42
|
public_suffix (5.0.0)
|
43
|
+
rake (12.3.3)
|
44
|
+
rexml (3.2.5)
|
45
|
+
rspec (3.11.0)
|
46
|
+
rspec-core (~> 3.11.0)
|
47
|
+
rspec-expectations (~> 3.11.0)
|
48
|
+
rspec-mocks (~> 3.11.0)
|
49
|
+
rspec-core (3.11.0)
|
50
|
+
rspec-support (~> 3.11.0)
|
51
|
+
rspec-expectations (3.11.1)
|
52
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
53
|
+
rspec-support (~> 3.11.0)
|
54
|
+
rspec-mocks (3.11.1)
|
55
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
56
|
+
rspec-support (~> 3.11.0)
|
57
|
+
rspec-support (3.11.1)
|
41
58
|
ruby2_keywords (0.0.5)
|
59
|
+
simplecov (0.21.2)
|
60
|
+
docile (~> 1.1)
|
61
|
+
simplecov-html (~> 0.11)
|
62
|
+
simplecov_json_formatter (~> 0.1)
|
63
|
+
simplecov-html (0.12.3)
|
64
|
+
simplecov-lcov (0.7.0)
|
65
|
+
simplecov_json_formatter (0.1.4)
|
66
|
+
vcr (6.1.0)
|
67
|
+
webmock (3.18.1)
|
68
|
+
addressable (>= 2.8.0)
|
69
|
+
crack (>= 0.3.2)
|
70
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
42
71
|
|
43
72
|
PLATFORMS
|
44
73
|
x86_64-darwin-17
|
45
74
|
|
46
75
|
DEPENDENCIES
|
76
|
+
bundler
|
77
|
+
rake (~> 12.3.3)
|
78
|
+
rspec (~> 3.0)
|
79
|
+
simplecov (~> 0.9)
|
80
|
+
simplecov-lcov (~> 0.7.0)
|
81
|
+
vcr (~> 6.1)
|
82
|
+
webmock (~> 3.18, >= 3.18.1)
|
47
83
|
yandex360!
|
48
84
|
|
49
85
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -1 +1,72 @@
|
|
1
|
-
#
|
1
|
+
# Yandex 360 - Ruby API client ([gem](https://rubygems.org/gems/yandex360))
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/yandex360.svg)](https://badge.fury.io/rb/yandex360)
|
4
|
+
![Gem](https://img.shields.io/gem/dt/yandex360)
|
5
|
+
![GitHub](https://img.shields.io/github/license/ruby-api-client/yandex360)
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
### Gemfile
|
9
|
+
|
10
|
+
```gemfile
|
11
|
+
gem 'yandex360', '~> 1.0', '>= 1.0.1'
|
12
|
+
```
|
13
|
+
|
14
|
+
### Install
|
15
|
+
|
16
|
+
```sh
|
17
|
+
gem install yandex360
|
18
|
+
```
|
19
|
+
|
20
|
+
## Getting started
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
require "yandex360"
|
24
|
+
|
25
|
+
yandex360 = Yandex360::Client.new(token: "paste your access_token here")
|
26
|
+
|
27
|
+
users = yandex360.users.list(org_id: 1234567)
|
28
|
+
```
|
29
|
+
|
30
|
+
## Available methods
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
# Antispam
|
34
|
+
antispam.list(org_id:)
|
35
|
+
antispam.create(org_id, *strings)
|
36
|
+
antispam.delete(org_id:)
|
37
|
+
|
38
|
+
# Users
|
39
|
+
users.add(org_id:, dep_id:, **user_params)
|
40
|
+
users.add_alias(org_id:, user_id:, user_alias:)
|
41
|
+
users.update(org_id:, user_id:, **user_params)
|
42
|
+
users.info(org_id:, user_id:)
|
43
|
+
users.list(org_id:, page: 1, per_page: 10)
|
44
|
+
users.get2FA(org_id:, user_id:)
|
45
|
+
users.has2FA?(org_id:, user_id:)
|
46
|
+
users.delete_alias(org_id:, user_id:, user_alias:)
|
47
|
+
|
48
|
+
# Departments
|
49
|
+
departments.add_alias(org_id:, dep_id:, name:)
|
50
|
+
departments.update(org_id:, dep_id:, parent_id:, **params)
|
51
|
+
departments.info(org_id:, dep_id:)
|
52
|
+
departments.list(org_id:, page: 1, per_page: 10, parent_id: 0, order_by: "id")
|
53
|
+
departments.create(org_id:, name:, parent_id:, **params)
|
54
|
+
departments.delete_alias(org_id:, dep_id:, name:)
|
55
|
+
departments.delete(org_id:, dep_id:)
|
56
|
+
|
57
|
+
# Groups
|
58
|
+
groups.add_user(org_id:, group_id:, user_id:, type: "user")
|
59
|
+
groups.update(org_id:, group_id:, **user_params)
|
60
|
+
groups.params(org_id:, group_id:)
|
61
|
+
groups.list(org_id:, page: 1, per_page: 10)
|
62
|
+
groups.users(org_id:, group_id:)
|
63
|
+
groups.create(org_id:, name:, **group_params)
|
64
|
+
groups.delete(org_id:, group_id:)
|
65
|
+
groups.delete_user(org_id:, group_id:, type:, user_id:)
|
66
|
+
```
|
67
|
+
|
68
|
+
## TODO
|
69
|
+
|
70
|
+
- examples
|
71
|
+
- documentation
|
72
|
+
- ~~tests~~
|
data/lib/yandex360/client.rb
CHANGED
@@ -13,13 +13,28 @@ module Yandex360
|
|
13
13
|
@stubs = stubs # Test stubs for requests
|
14
14
|
end
|
15
15
|
|
16
|
+
def antispam
|
17
|
+
AntispamResource.new(self)
|
18
|
+
end
|
19
|
+
|
20
|
+
def departments
|
21
|
+
DepartmentsResource.new(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
def groups
|
25
|
+
GroupsResource.new(self)
|
26
|
+
end
|
27
|
+
|
28
|
+
def users
|
29
|
+
UsersResource.new(self)
|
30
|
+
end
|
31
|
+
|
16
32
|
def connection
|
17
33
|
@connection ||= Faraday.new(BASE_URL) do |conn|
|
18
34
|
conn.request :authorization, :OAuth, token
|
19
35
|
conn.request :json
|
20
36
|
conn.request :url_encoded
|
21
37
|
|
22
|
-
conn.response :dates
|
23
38
|
conn.response :json, content_type: "application/json"
|
24
39
|
|
25
40
|
conn.adapter adapter, @stubs
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class Collection
|
5
|
+
attr_reader :data, :items, :total
|
6
|
+
|
7
|
+
def self.from_response(response, key:, type:)
|
8
|
+
body = response.body
|
9
|
+
new(
|
10
|
+
data: body[key].map {|attrs| type.new(attrs) },
|
11
|
+
items: body["items"],
|
12
|
+
total: body["total"]
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(data:, items:, total:)
|
17
|
+
@data = data
|
18
|
+
@items = items
|
19
|
+
@total = total
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "ostruct"
|
4
|
+
|
5
|
+
module Yandex360
|
6
|
+
class Object < OpenStruct
|
7
|
+
def initialize(attributes)
|
8
|
+
super to_ostruct(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Convert Array or Hash to OpenStruct
|
12
|
+
def to_ostruct(obj)
|
13
|
+
case obj
|
14
|
+
when Hash
|
15
|
+
# rubocop:disable Style/HashTransformValues
|
16
|
+
OpenStruct.new(obj.map {|key, val| [key, to_ostruct(val)] }.to_h)
|
17
|
+
# rubocop:enable Style/HashTransformValues
|
18
|
+
when Array
|
19
|
+
obj.map {|o| to_ostruct(o) }
|
20
|
+
else
|
21
|
+
obj
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class AllowList < Object; end
|
5
|
+
class Department < Object; end
|
6
|
+
class Group < Object; end
|
7
|
+
class User < Object; end
|
8
|
+
class UserList < Object; end
|
9
|
+
|
10
|
+
class DeletedDepartment < Object; end
|
11
|
+
class DeletedGroup < Object; end
|
12
|
+
class DeletedUser < Object; end
|
13
|
+
class DepartmentAlias < Object; end
|
14
|
+
class DepartmentList < Object; end
|
15
|
+
class DeletedDepartmentAlias < Object; end
|
16
|
+
|
17
|
+
class GroupList < Object; end
|
18
|
+
|
19
|
+
class Alias < Object; end
|
20
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class Resource
|
5
|
+
attr_reader :client
|
6
|
+
|
7
|
+
def initialize(client)
|
8
|
+
@client = client
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def get(url, params: {}, headers: {})
|
14
|
+
handle_response client.connection.get(url, params, headers)
|
15
|
+
end
|
16
|
+
|
17
|
+
def post(url, body:, headers: {})
|
18
|
+
handle_response client.connection.post(url, body, headers)
|
19
|
+
end
|
20
|
+
|
21
|
+
def patch(url, body:, headers: {})
|
22
|
+
handle_response client.connection.patch(url, body, headers)
|
23
|
+
end
|
24
|
+
|
25
|
+
def put(url, body:, headers: {})
|
26
|
+
handle_response client.connection.put(url, body, headers)
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete(url, params: {}, headers: {})
|
30
|
+
handle_response client.connection.delete(url, params, headers)
|
31
|
+
end
|
32
|
+
alias delete_request delete
|
33
|
+
|
34
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
35
|
+
# rubocop:disable Metrics/AbcSize
|
36
|
+
def handle_response(response)
|
37
|
+
case response.status
|
38
|
+
when 400
|
39
|
+
raise Error, "Your request was malformed. #{response.body['error']}"
|
40
|
+
when 401
|
41
|
+
raise Error, "You did not supply valid authentication credentials. #{response.body['error']}"
|
42
|
+
when 403
|
43
|
+
raise Error, "You are not allowed to perform that action. #{response.body['error']}"
|
44
|
+
when 404
|
45
|
+
raise Error, "No results were found for your request. #{response.body['error']}"
|
46
|
+
when 429
|
47
|
+
raise Error, "Your request exceeded the API rate limit. #{response.body['error']}"
|
48
|
+
when 500
|
49
|
+
raise Error, "We were unable to perform the request due to server-side problems. #{response.body['error']}"
|
50
|
+
when 503
|
51
|
+
raise Error, "You have been rate limited for sending more requests per second. #{response.body['error']}"
|
52
|
+
end
|
53
|
+
|
54
|
+
response
|
55
|
+
end
|
56
|
+
# rubocop:enable Metrics/AbcSize
|
57
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class AntispamResource < Resource
|
5
|
+
def list(org_id:)
|
6
|
+
AllowList.new get("/admin/v1/org/#{org_id}/mail/antispam/allowlist/ips").body
|
7
|
+
end
|
8
|
+
|
9
|
+
def create(org_id, *strings)
|
10
|
+
body = {allowList: strings}
|
11
|
+
AllowList.new post("admin/v1/org/#{org_id}/mail/antispam/allowlist/ips", body: body).body
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete(org_id:)
|
15
|
+
delete_request("admin/v1/org/#{org_id}/mail/antispam/allowlist/ips")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class DepartmentsResource < Resource
|
5
|
+
def add_alias(org_id:, dep_id:, name:)
|
6
|
+
dep_alias = {alias: name}
|
7
|
+
DepartmentAlias.new post("directory/v1/org/#{org_id}/departments/#{dep_id}/aliases", body: dep_alias).body
|
8
|
+
end
|
9
|
+
|
10
|
+
def update(org_id:, dep_id:, parent_id:, **params)
|
11
|
+
department = {
|
12
|
+
orgId: org_id,
|
13
|
+
departmentId: dep_id,
|
14
|
+
parentId: parent_id
|
15
|
+
}
|
16
|
+
params.each {|param, value| department[param] = value }
|
17
|
+
Department.new patch("directory/v1/org/#{org_id}/departments/#{dep_id}", body: department).body
|
18
|
+
end
|
19
|
+
|
20
|
+
def info(org_id:, dep_id:)
|
21
|
+
Department.new get("directory/v1/org/#{org_id}/departments/#{dep_id}").body
|
22
|
+
end
|
23
|
+
|
24
|
+
def list(org_id:, page: 1, per_page: 10, parent_id: 0, order_by: "id")
|
25
|
+
resp = get("directory/v1/org/#{org_id}/departments \
|
26
|
+
?page=#{page} \
|
27
|
+
&perPage=#{per_page} \
|
28
|
+
&parentId=#{parent_id} \
|
29
|
+
&orderBy=#{order_by}".gsub(/\s+/, "").strip)
|
30
|
+
Collection.from_response(resp, key: "departments", type: Department)
|
31
|
+
end
|
32
|
+
|
33
|
+
# parent_id:, name:, description: "", external_id: "", head_id: 0, label: ""
|
34
|
+
def create(org_id:, name:, parent_id:, **params)
|
35
|
+
department = {
|
36
|
+
parentId: parent_id,
|
37
|
+
name: name
|
38
|
+
}
|
39
|
+
params.each do |param, value|
|
40
|
+
department[param] = value
|
41
|
+
end
|
42
|
+
|
43
|
+
Department.new post("directory/v1/org/#{org_id}/departments", body: department).body
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete_alias(org_id:, dep_id:, name:)
|
47
|
+
Object.new delete_request("directory/v1/org/#{org_id}/departments/#{dep_id}/aliases/#{name}").body
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete(org_id:, dep_id:)
|
51
|
+
Object.new delete_request("directory/v1/org/#{org_id}/departments/#{dep_id}").body
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class GroupsResource < Resource
|
5
|
+
def add_user(org_id:, group_id:, user_id:, type: "user")
|
6
|
+
user = {
|
7
|
+
id: user_id,
|
8
|
+
type: type
|
9
|
+
}
|
10
|
+
Group.new post("directory/v1/org/#{org_id}/groups/#{group_id}/members", body: user).body
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(org_id:, group_id:, **user_params)
|
14
|
+
user = {}
|
15
|
+
user_params.each {|param, value| user[param] = value }
|
16
|
+
Group.new patch("directory/v1/org/#{org_id}/groups/#{group_id}", body: user).body
|
17
|
+
end
|
18
|
+
|
19
|
+
def params(org_id:, group_id:)
|
20
|
+
Group.new get("directory/v1/org/#{org_id}/groups/#{group_id}").body
|
21
|
+
end
|
22
|
+
|
23
|
+
def list(org_id:, page: 1, per_page: 10)
|
24
|
+
resp = get("directory/v1/org/#{org_id}/groups?page=#{page}&perPage=#{per_page}")
|
25
|
+
Collection.from_response(resp, key: "groups", type: Group)
|
26
|
+
end
|
27
|
+
|
28
|
+
def users(org_id:, group_id:)
|
29
|
+
resp = get("directory/v1/org/#{org_id}/groups/#{group_id}/members")
|
30
|
+
Collection.from_response(resp, key: "users", type: User)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create(org_id:, name:, **group_params)
|
34
|
+
group = {
|
35
|
+
name: name
|
36
|
+
}
|
37
|
+
group_params.each {|param, value| group[param] = value }
|
38
|
+
Group.new post("directory/v1/org/#{org_id}/groups", body: group).body
|
39
|
+
end
|
40
|
+
|
41
|
+
def delete(org_id:, group_id:)
|
42
|
+
Group.new delete_request("directory/v1/org/#{org_id}/groups/#{group_id}").body
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete_user(org_id:, group_id:, type:, user_id:)
|
46
|
+
Object.new delete_request("directory/v1/org/#{org_id}/groups/#{group_id}/members/#{type}/#{user_id}").body
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Yandex360
|
4
|
+
class UsersResource < Resource
|
5
|
+
def add(org_id:, dep_id:, **user_params)
|
6
|
+
user = {
|
7
|
+
departmentId: dep_id
|
8
|
+
}
|
9
|
+
user_params.each {|param, value| user[param] = value }
|
10
|
+
|
11
|
+
User.new post("directory/v1/org/#{org_id}/users", body: user).body
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_alias(org_id:, user_id:, user_alias:)
|
15
|
+
body = {alias: user_alias}
|
16
|
+
User.new post("directory/v1/org/#{org_id}/users/#{user_id}/aliases", body: body).body
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(org_id:, user_id:, **user_params)
|
20
|
+
user = {}
|
21
|
+
user_params.each {|param, value| user[param] = value }
|
22
|
+
|
23
|
+
User.new patch("directory/v1/org/#{org_id}/users/#{user_id}", body: user).body
|
24
|
+
end
|
25
|
+
|
26
|
+
def info(org_id:, user_id:)
|
27
|
+
User.new get("directory/v1/org/#{org_id}/users/#{user_id}").body
|
28
|
+
end
|
29
|
+
|
30
|
+
def list(org_id:, page: 1, per_page: 10)
|
31
|
+
resp = get("directory/v1/org/#{org_id}/users?page=#{page}&perPage=#{per_page}")
|
32
|
+
Collection.from_response(resp, key: "users", type: User)
|
33
|
+
end
|
34
|
+
|
35
|
+
# rubocop:disable Naming/MethodName
|
36
|
+
def get2FA(org_id:, user_id:)
|
37
|
+
# TODO: add User2FA.new type
|
38
|
+
Object.new get("directory/v1/org/#{org_id}/users/#{user_id}/2fa").body
|
39
|
+
end
|
40
|
+
|
41
|
+
def has2FA?(org_id:, user_id:)
|
42
|
+
get2FA(org_id: org_id, user_id: user_id).has2fa
|
43
|
+
end
|
44
|
+
# rubocop:enable Naming/MethodName
|
45
|
+
|
46
|
+
def delete_alias(org_id:, user_id:, user_alias:)
|
47
|
+
Alias.new delete_request("directory/v1/org/#{org_id}/users/#{user_id}/aliases/#{user_alias}").body
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/yandex360/version.rb
CHANGED
data/lib/yandex360.rb
CHANGED
@@ -2,9 +2,30 @@
|
|
2
2
|
|
3
3
|
require "addressable/uri"
|
4
4
|
require "faraday"
|
5
|
-
require "faraday_middleware"
|
6
5
|
require "yandex360/version"
|
7
6
|
|
8
|
-
module
|
7
|
+
module Yandex360
|
9
8
|
autoload :Client, "yandex360/client"
|
9
|
+
autoload :Object, "yandex360/object"
|
10
|
+
autoload :Resource, "yandex360/resource"
|
11
|
+
autoload :Collection, "yandex360/collection"
|
12
|
+
autoload :Error, "yandex360/error"
|
13
|
+
|
14
|
+
autoload :AntispamResource, "yandex360/resources/antispam"
|
15
|
+
autoload :AllowList, "yandex360/objects/types"
|
16
|
+
|
17
|
+
autoload :DepartmentsResource, "yandex360/resources/departments"
|
18
|
+
autoload :Department, "yandex360/objects/types"
|
19
|
+
autoload :Departments, "yandex360/objects/types"
|
20
|
+
autoload :DepartmentList, "yandex360/objects/types"
|
21
|
+
autoload :DepartmentAlias, "yandex360/objects/types"
|
22
|
+
autoload :DeletedDepartment, "yandex360/objects/types"
|
23
|
+
autoload :DeletedDepartmentAlias, "yandex360/objects/types"
|
24
|
+
|
25
|
+
autoload :GroupsResource, "yandex360/resources/groups"
|
26
|
+
autoload :Group, "yandex360/objects/types"
|
27
|
+
autoload :GroupList, "yandex360/objects/types"
|
28
|
+
|
29
|
+
autoload :UsersResource, "yandex360/resources/users"
|
30
|
+
autoload :User, "yandex360/objects/types"
|
10
31
|
end
|