1 | # frozen_string_literal: true |
||
2 | |||
3 | require_relative 'account/public_key' |
||
4 | require_relative 'account/private_key' |
||
5 | require_relative 'account/privilege' |
||
6 | require_relative '../action/account/create' |
||
7 | require_relative '../action/account/remove' |
||
8 | |||
9 | module AMA |
||
10 | module Chef |
||
11 | module User |
||
12 | class Planner |
||
13 | # This planner creates actions altering account state |
||
14 | class Account |
||
15 | def initialize |
||
16 | @public_keys = PublicKey.new |
||
17 | @private_keys = PrivateKey.new |
||
18 | @privileges = Privilege.new |
||
19 | end |
||
20 | |||
21 | # @param [Hash{Symbol, AMA::Chef::User::Model::Account}] current_state |
||
22 | # @param [Hash{Symbol, AMA::Chef::User::Model::Account}] desired_state |
||
23 | def plan(current_state, desired_state) |
||
24 | (current_state.keys | desired_state.keys).flat_map do |id| |
||
25 | process(current_state[id], desired_state[id]) |
||
26 | end |
||
27 | end |
||
28 | |||
29 | # @param [AMA::Chef::User::Model::Account] current_state |
||
30 | # @param [AMA::Chef::User::Model::Account] desired_state |
||
31 | def process(current_state, desired_state) |
||
32 | actions = [ |
||
33 | *process_public_keys(current_state, desired_state), |
||
34 | *process_private_keys(current_state, desired_state), |
||
35 | *process_privileges(current_state, desired_state) |
||
36 | ] |
||
37 | if !desired_state.nil? |
||
38 | actions.unshift(ns::Create.new(desired_state)) |
||
39 | elsif current_state.policy.remove? |
||
40 | actions.push(ns::Remove.new(current_state)) |
||
41 | end |
||
42 | actions |
||
43 | end |
||
44 | |||
45 | private |
||
46 | |||
47 | def ns |
||
48 | ::AMA::Chef::User::Action::Account |
||
49 | end |
||
50 | |||
51 | # @param [AMA::Chef::User::Model::Account] current_state |
||
52 | # @param [AMA::Chef::User::Model::Account] desired_state |
||
53 | View Code Duplication | def process_public_keys(current_state, desired_state) |
|
0 ignored issues
–
show
Duplication
introduced
by
![]() |
|||
54 | return [] if desired_state.nil? && !current_state.policy.remove? |
||
55 | account = desired_state || current_state |
||
56 | current_keys = current_state ? current_state.public_keys : {} |
||
57 | desired_keys = desired_state ? desired_state.public_keys : {} |
||
58 | @public_keys.plan(account, current_keys, desired_keys) |
||
59 | end |
||
60 | |||
61 | # @param [AMA::Chef::User::Model::Account] current_state |
||
62 | # @param [AMA::Chef::User::Model::Account] desired_state |
||
63 | View Code Duplication | def process_private_keys(current_state, desired_state) |
|
0 ignored issues
–
show
|
|||
64 | return [] if desired_state.nil? && !current_state.policy.remove? |
||
65 | account = desired_state || current_state |
||
66 | current_keys = current_state ? current_state.private_keys : {} |
||
67 | desired_keys = desired_state ? desired_state.private_keys : {} |
||
68 | @private_keys.plan(account, current_keys, desired_keys) |
||
69 | end |
||
70 | |||
71 | # @param [AMA::Chef::User::Model::Account] current_state |
||
72 | # @param [AMA::Chef::User::Model::Account] desired_state |
||
73 | View Code Duplication | def process_privileges(current_state, desired_state) |
|
0 ignored issues
–
show
|
|||
74 | return [] if desired_state.nil? && !current_state.policy.remove? |
||
75 | account = desired_state || current_state |
||
76 | current_privileges = current_state ? current_state.privileges : {} |
||
77 | desired_privileges = desired_state ? desired_state.privileges : {} |
||
78 | @privileges.plan(account, current_privileges, desired_privileges) |
||
79 | end |
||
80 | end |
||
81 | end |
||
82 | end |
||
83 | end |
||
84 | end |
||
85 |