9
9
using System . Text ;
10
10
using System . Threading . Tasks ;
11
11
using Matterhook . NET . Code ;
12
+ using Matterhook . NET . MatterhookClient ;
12
13
using Matterhook . NET . Webhooks . Discourse ;
13
14
using Microsoft . AspNetCore . Mvc ;
14
15
using Microsoft . Extensions . Options ;
15
- using Microsoft . Extensions . Primitives ;
16
16
using Newtonsoft . Json . Linq ;
17
17
using ReverseMarkdown ;
18
- using Matterhook . NET . MatterhookClient ;
19
-
20
18
21
19
namespace Matterhook . NET . Controllers
22
20
{
@@ -49,11 +47,11 @@ public async Task<IActionResult> Receive()
49
47
//Generate DiscourseHook object for easier reading
50
48
stuffToLog . Add ( $ "Discourse Hook received: { DateTime . Now } ") ;
51
49
52
- Request . Headers . TryGetValue ( "X-Discourse-Event-Id" , out StringValues eventId ) ;
53
- Request . Headers . TryGetValue ( "X-Discourse-Event-Type" , out StringValues eventType ) ;
54
- Request . Headers . TryGetValue ( "X-Discourse-Event" , out StringValues eventName ) ;
55
- Request . Headers . TryGetValue ( "X-Discourse-Event-Signature" , out StringValues signature ) ;
56
- Request . Headers . TryGetValue ( "X-Discourse-Instance" , out StringValues discourseUrl ) ;
50
+ Request . Headers . TryGetValue ( "X-Discourse-Event-Id" , out var eventId ) ;
51
+ Request . Headers . TryGetValue ( "X-Discourse-Event-Type" , out var eventType ) ;
52
+ Request . Headers . TryGetValue ( "X-Discourse-Event" , out var eventName ) ;
53
+ Request . Headers . TryGetValue ( "X-Discourse-Event-Signature" , out var signature ) ;
54
+ Request . Headers . TryGetValue ( "X-Discourse-Instance" , out var discourseUrl ) ;
57
55
_discourseUrl = discourseUrl ;
58
56
59
57
stuffToLog . Add ( $ "Hook Id: { eventId } ") ;
@@ -68,7 +66,7 @@ public async Task<IActionResult> Receive()
68
66
69
67
if ( signature == calcSig )
70
68
{
71
- var discourseHook = new DiscourseHook ( eventId , eventType , eventName , signature , payloadText ) ;
69
+ var discourseHook = new DiscourseHook ( eventId , eventType , eventName , signature , payloadText ) ;
72
70
var matterHook = new MatterhookClient . MatterhookClient ( _config . MattermostConfig . WebhookUrl ) ;
73
71
HttpResponseMessage response = null ;
74
72
MattermostMessage message = null ;
@@ -84,30 +82,27 @@ public async Task<IActionResult> Receive()
84
82
? $ "Unable to post to Mattermost { response . StatusCode } "
85
83
: "Unable to post to Mattermost" ) ;
86
84
87
- return Content ( response != null ? $ "Problem posting to Mattermost: { response . StatusCode } " : "Problem Posting to Mattermost" ) ;
85
+ return Content ( response != null
86
+ ? $ "Problem posting to Mattermost: { response . StatusCode } "
87
+ : "Problem Posting to Mattermost" ) ;
88
88
}
89
89
if ( message != null ) stuffToLog . Add ( message . Text ) ;
90
90
stuffToLog . Add ( "Succesfully posted to Mattermost" ) ;
91
91
Util . LogList ( stuffToLog ) ;
92
92
return Ok ( ) ;
93
93
}
94
- else
95
- {
96
- stuffToLog . Add ( "Invalid Signature!" ) ;
97
- stuffToLog . Add ( $ "Expected: { signature } ") ;
98
- stuffToLog . Add ( $ "Calculated: { calcSig } ") ;
99
- Util . LogList ( stuffToLog ) ;
100
- return Unauthorized ( ) ;
101
- }
102
-
94
+ stuffToLog . Add ( "Invalid Signature!" ) ;
95
+ stuffToLog . Add ( $ "Expected: { signature } ") ;
96
+ stuffToLog . Add ( $ "Calculated: { calcSig } ") ;
97
+ Util . LogList ( stuffToLog ) ;
98
+ return Unauthorized ( ) ;
103
99
}
104
100
catch ( Exception e )
105
101
{
106
102
stuffToLog . Add ( e . Message ) ;
107
103
Util . LogList ( stuffToLog ) ;
108
104
return Content ( e . Message ) ;
109
105
}
110
-
111
106
}
112
107
113
108
private static string ExpandDiscourseUrls ( string input , string discourseUrl )
@@ -122,14 +117,9 @@ private MattermostMessage PostCreated(PostPayload payload)
122
117
var p = payload . post ;
123
118
124
119
if ( _config . IgnoredTopicTitles . Contains ( p . topic_title ) )
125
- {
126
120
throw new Exception ( "Post title matches ignored titles" ) ;
127
- }
128
121
129
122
if ( _config . IgnorePrivateMessages )
130
- {
131
- //We're not really doing anything here yet
132
- //TODO: Revisit in the future
133
123
try
134
124
{
135
125
JObject . Parse (
@@ -139,9 +129,7 @@ private MattermostMessage PostCreated(PostPayload payload)
139
129
{
140
130
throw new Exception ( "Unable to retrieve topic, possibly a PM so we should ignore this." ) ;
141
131
}
142
- }
143
132
144
-
145
133
146
134
var retVal = new MattermostMessage
147
135
{
@@ -157,25 +145,20 @@ private MattermostMessage PostCreated(PostPayload payload)
157
145
Fallback = "New Post in Discourse Topic" ,
158
146
Title = p . topic_title ,
159
147
TitleLink = new Uri ( $ "{ _discourseUrl } /t/{ p . topic_id } /{ p . post_number } ") ,
160
- Text = new Converter ( ) . Convert ( ExpandDiscourseUrls ( p . cooked , _discourseUrl ) ) ,
148
+ Text = new Converter ( ) . Convert ( ExpandDiscourseUrls ( p . cooked , _discourseUrl ) ) ,
161
149
AuthorName = p . username ,
162
150
AuthorLink = new Uri ( $ "{ _discourseUrl } /u/{ p . username } ") ,
163
- AuthorIcon = new Uri ( $ "{ _discourseUrl } { p . avatar_template . Replace ( "{size}" , "16" ) } ")
151
+ AuthorIcon = new Uri ( $ "{ _discourseUrl } { p . avatar_template . Replace ( "{size}" , "16" ) } ")
164
152
}
165
153
}
166
-
167
154
} ;
168
155
169
156
if ( p . post_number . ToString ( ) == "1" )
170
- {
171
157
retVal . Text = "#NewTopic\n " ;
172
- }
173
158
174
159
retVal . Text += $ "#{ p . topic_slug } ";
175
160
176
161
return retVal ;
177
162
}
178
-
179
-
180
163
}
181
164
}
0 commit comments