@@ -9,30 +9,28 @@ def initialize(user, opts={})
9
9
@user_person = @user . person
10
10
@salmon_xml = opts [ :salmon_xml ]
11
11
12
- @sender = opts [ :person ] || Webfinger . new ( self . salmon . author_id ) . fetch
13
- @author = @sender
12
+ @author = opts [ :person ] || Webfinger . new ( salmon . author_id ) . fetch
14
13
15
14
@object = opts [ :object ]
16
15
end
17
16
18
17
def receive!
19
- if @sender && self . salmon . verified_for_key? ( @sender . public_key )
18
+ if @author && salmon . verified_for_key? ( @author . public_key )
20
19
parse_and_receive ( salmon . parsed_data )
21
20
else
22
21
logger . error "event=receive status=abort reason='not_verified for key' " \
23
22
"recipient=#{ @user . diaspora_handle } sender=#{ @salmon . author_id } "
24
23
end
25
24
rescue => e
26
- logger . error "failed to receive #{ @object . class } from sender:#{ @sender . id } for user:#{ @user . id } : #{ e . message } \n " \
25
+ logger . error "failed to receive #{ @object . class } from sender:#{ @author . id } for user:#{ @user . id } : #{ e . message } \n " \
27
26
"#{ @object . inspect } "
28
27
raise e
29
28
end
30
29
31
30
def parse_and_receive ( xml )
32
31
@object ||= Diaspora ::Parser . from_xml ( xml )
33
- return if @object . nil?
34
32
35
- logger . info "user:#{ @user . id } starting private receive from person:#{ @sender . guid } "
33
+ logger . info "user:#{ @user . id } starting private receive from person:#{ @author . guid } "
36
34
37
35
validate_object
38
36
set_author!
@@ -43,27 +41,17 @@ def parse_and_receive(xml)
43
41
def receive_object
44
42
obj = @object . receive ( @user , @author )
45
43
Notification . notify ( @user , obj , @author ) if obj . respond_to? ( :notification_type )
46
- logger . info "user:#{ @user . id } successfully received #{ @object . class } from person #{ @sender . guid } " \
44
+ logger . info "user:#{ @user . id } successfully received #{ @object . class } from person #{ @author . guid } " \
47
45
"#{ ": #{ @object . guid } " if @object . respond_to? ( :guid ) } "
48
46
logger . debug "received: #{ @object . inspect } "
49
47
end
50
48
51
49
protected
50
+
52
51
def salmon
53
52
@salmon ||= Salmon ::EncryptedSlap . from_xml ( @salmon_xml , @user )
54
53
end
55
54
56
- def validate_object
57
- raise Diaspora ::ContactRequiredUnlessRequest if contact_required_unless_request
58
- raise Diaspora ::RelayableObjectWithoutParent if relayable_without_parent?
59
-
60
- assign_sender_handle_if_request
61
-
62
- raise Diaspora ::AuthorXMLAuthorMismatch if author_does_not_match_xml_author?
63
-
64
- @object
65
- end
66
-
67
55
def xml_author
68
56
if @object . respond_to? ( :relayable? )
69
57
#if A and B are friends, and A sends B a comment from C, we delegate the validation to the owner of the post being commented on
@@ -84,27 +72,30 @@ def set_author!
84
72
85
73
private
86
74
87
- #validations
88
- def relayable_without_parent?
89
- if @object . respond_to? ( :relayable? ) && @object . parent . nil?
90
- logger . error "event=receive status=abort reason='no corresponding post' type=#{ @object . class } " \
91
- "recipient=#{ @user_person . diaspora_handle } sender=#{ @sender . diaspora_handle } "
92
- return true
93
- end
75
+ # validations
76
+
77
+ def validate_object
78
+ raise Diaspora ::XMLNotParseable if @object . nil?
79
+ raise Diaspora ::ContactRequiredUnlessRequest if contact_required_unless_request
80
+ raise Diaspora ::RelayableObjectWithoutParent if relayable_without_parent?
81
+
82
+ assign_sender_handle_if_request
83
+
84
+ raise Diaspora ::AuthorXMLAuthorMismatch if author_does_not_match_xml_author?
94
85
end
95
86
96
87
def contact_required_unless_request
97
- unless @object . is_a? ( Request ) || @user . contact_for ( @sender )
88
+ unless @object . is_a? ( Request ) || @user . contact_for ( @author )
98
89
logger . error "event=receive status=abort reason='sender not connected to recipient' type=#{ @object . class } " \
99
- "recipient=#{ @user_person . diaspora_handle } sender=#{ @sender . diaspora_handle } "
90
+ "recipient=#{ @user_person . diaspora_handle } sender=#{ @author . diaspora_handle } "
100
91
return true
101
92
end
102
93
end
103
94
104
95
def assign_sender_handle_if_request
105
96
#special casey
106
97
if @object . is_a? ( Request )
107
- @object . sender_handle = @sender . diaspora_handle
98
+ @object . sender_handle = @author . diaspora_handle
108
99
end
109
100
end
110
101
end
0 commit comments