/
developer.html
331 lines (279 loc) · 10.3 KB
/
developer.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
<h2>Principes généraux</h2>
<p>
LinuxFr.org expose une API Rest au format JSON dont l'authentification repose
sur OAuth2. Celle-ci est en cours de développement et ne propose pour le
moment que peu de méthodes. Si vous avez des besoins particuliers pour cette
API qui ne sont pas encore implémentés, n'hésitez pas à
<a href="/suivi/nouveau">créer une entrée dans le suivi</a>.
</p>
<h2>OAuth2</h2>
<p>
<a href="http://oauth.net/2/">OAuth2</a> est un protocole qui permet à des
applications externes de demander l'autorisation d'accéder à des informations
privées d'un utilisateur avec un compte LinuxFr.org et de faire des actions
en son nom. L'utilisateur n'a pas besoin de fournir son mot de passe au site
externe et reste maître des autorisations qu'il a fournies.
</p>
<p>
Si vous êtes un développeur d'applications web et que vous souhaitez utiliser
l'API de LinuxFr.org, la première chose à faire est d'
<a href="/api/applications">enregistrer votre application</a>. Vous
obtiendrez ainsi un identifiant et un secret qui vous serviront lors des
échanges OAuth. Le secret doit, comme son nom l'indique, rester secret.
</p>
<p>
OAuth fonctionne avec un principe de jetons. Quand une application web
souhaite accéder aux données confidentielles de l'utilisateur, il va demander
à l'utilisateur un jeton d'autorisation qui sera délivré par LinuxFr.org,
puis il pourra utiliser ce jeton pour accéder aux informations.
</p>
<p>
LinuxFr.org utilise la bibliothèque Ruby
<a href="https://github.com/doorkeeper-gem/doorkeeper">Doorkeeper</a>
pour gérer la partie OAuth2. Aussi, nous vous conseillons ces deux liens si
vous souhaitez utiliser l'API de LinuxFr.org :
</p>
<ol>
<li><a href="https://github.com/doorkeeper-gem/doorkeeper/wiki/API-endpoint-descriptions-and-examples">API endpoint descriptions and examples</a></li>
<li><a href="https://github.com/doorkeeper-gem/doorkeeper/wiki/Interacting-as-an-OAuth-client-with-Doorkeeper">Interacting as an OAuth client with Doorkeeper</a></li>
</ol>
<h2>Obtention d'un jeton d'autorisation</h2>
<h3>Redirection de l'utilisateur vers LinuxFr.org</h3>
<p>
La première étape consiste à envoyer l'utilisateur sur LinuxFr.org pour
qu'il puisse accepter ou refuser de donner l'autorisation.
</p>
<pre>
GET https://linuxfr.org/api/oauth/authorize
</pre>
<h4>Paramètres</h4>
<dl>
<dt><var>client_id</var></dt>
<dd>
Chaîne de caractères obligatoire - L'identifiant de l'application lors
de l'inscription sur LinuxFr.org.
</dd>
<dt>redirect_uri</dt>
<dd>
Chaîne de caractères obligatoire - L'URL vers laquelle sera redirigé
l'utilisateur après l'autorisation.
</dd>
<dt>response_type</dt>
<dd>
Chaîne de caractères obligatoire - <var>code</var> dans le flux d'OAuth2 le
plus courant.
</dd>
<dt>scope</dt>
<dd>
Chaîne de caractères facultative - la liste des scopes demandées, séparés
par des espaces (URL encodés en +). Cela indique les actions que
l'application pourra faire au nom de l'utilisateur. Exemple :
<var>scope=account+board</var>. Par défaut, seul le scope
<var>account</var> sera fourni.
</dd>
</dl>
<h3>L'utilisateur revient sur le site</h3>
<p>
Si l'utilisateur accepte l'autorisation, il est renvoyé sur le site d'origine
avec un <var>code</var> temporaire. Le code sera passé dans la <i>query
string</i> sur l'URL de redirection. Le site peut alors échanger ce code
contre le jeton d'autorisation.
</p>
<pre>
POST https://linuxfr.org/api/oauth/token
</pre>
<h4>Paramètres</h4>
<dl>
<dt><var>client_id</var></dt>
<dd>
Chaîne de caractères obligatoire - L'identifiant de l'application lors
de l'inscription sur LinuxFr.org.
</dd>
<dt><var>client_secret</var></dt>
<dd>
Chaîne de caractères obligatoire - Le secret de l'application lors
de l'inscription sur LinuxFr.org.
</dd>
<dt><var>code</var></dt>
<dd>
Chaîne de caractères obligatoire - Le code reçu à l'étape 1.
</dd>
<dt><var>grant_type</var></dt>
<dd>
Chaîne de caractères obligatoire - Le format d'authentification utilisé,
"authorization_code" pour une application web.
</dd>
<dt><var>redirect_uri</var></dt>
<dd>
Chaîne de caractères obligatoire - L'URI vers laquelle l'utilisateur
sera redirigé après obtention du token (doit être la même que celle
indiquée lors de l'enregistrement de l'application).
</dd>
</dl>
<h4>Réponse</h4>
<dl>
<dt><var>access_token</var></dt>
<dd>
Chaîne de caractères - Le jeton d'autorisation, également appelé
<var>bearer_token</var>.
</dd>
<dt><var>refresh_token</var></dt>
<dd>
Chaîne de caractères.
</dd>
<dt><var>expires_in</var></dt>
<dd>
Entier - Nombre de secondes avant expiration de l'<var>access_token</var>.
</dd>
</dl>
<h2>Méthodes d'API</h2>
<p>
Lors de l'appel des méthodes d'API, le <var>bearer_token</var> peut être
envoyé soit en paramètre GET ou POST (suivant la méthode requise pour la
requête) soit dans les headers HTTP :
<pre>
Authorization: Bearer cf075a5c84bbb9489bdca8d18c51937cc69af6b23e06cfc5f0a52e2eef3f6339
</pre>
<h3>Authentification</h3>
<p>Scope nécessaire : <var>account</var></p>
<pre>
GET https://linuxfr.org/api/v1/me
</pre>
<h4>Paramètres</h4>
<dl>
<dt><var>bearer_token</var></dt>
<dd>Chaîne de caractères obligatoire - Le jeton d'autorisation.</dd>
</dl>
<h4>Réponse</h4>
<dl>
<dt><var>login</var></dt>
<dd>
Chaîne de caractères - L'identifiant du compte utilisateur sur
LinuxFr.org.
</dd>
<dt><var>email</var></dt>
<dd>
Chaîne de caractères - L'adresse de courriel de l'utilisateur (note :
elle a déjà été validée à l'inscription sur LinuxFr.org et il n'est
donc pas souhaitable de revalider cette adresse de courriel).
</dd>
<dt><var>created_at</var></dt>
<dd>
Chaîne de caractères - La date de création du compte, format ISO.
</dd>
</dl>
<h4>Exemple de réponse</h4>
<pre>
{"created_at":"2004-07-21T20:23:47+02:00","email":"nono@linuxfr.org","login":"NoNo"}
</pre>
<h3>Proposer une dépêche</h3>
<p>Scope nécessaire : <var>news</var></p>
<pre>
POST https://linuxfr.org/api/v1/news
</pre>
<h4>Paramètres</h4>
<dl>
<dt><var>bearer_token</var></dt>
<dd>Chaîne de caractères obligatoire - Le jeton d'autorisation.</dd>
<dt><var>title</var></dt>
<dd>Chaîne de caractères obligatoire - Le titre de la dépêche</dd>
<dt><var>section_id</var></dt>
<dd>
Entier - L'identifiant de la section
(le code source de <a href="/news/nouveau">la page de soumission d'une dépêche</a> permet de trouver la liste des sections)
</dd>
<dt><var>wiki_body</var></dt>
<dd>Chaîne de caractères obligatoire - Le contenu en markdown de la première partie de la dépêche</dd>
<dt><var>wiki_second_part</var></dt>
<dd>Chaîne de caractères obligatoire - Le contenu en markdown de la seconde partie de la dépêche</dd>
</dl>
<h4>Réponse</h4>
<dl>
<dt><var>id</var></dt>
<dd>Entier - Id de la dépêche qui vient d'être créée.</dd>
<dt><var>section_id</var></dt>
<dd>Entier - Id de la section.</dd>
<dt><var>cached_slug</var></dt>
<dd>Chaîne de caractères - Le slug de la dépeche.</dd>
<dt><var>title</var></dt>
<dd>Chaîne de caractères - Le titre de la dépêche.</dd>
<dt><var>body</var></dt>
<dd>Chaîne de caractères - Le contenu de la première partie de la dépêche en HTML.</dd>
<dt><var>body</var></dt>
<dd>Chaîne de caractères - Le contenu de la seconde partie de la dépêche en HTML.</dd>
<dt><var>created_at</var></dt>
<dd>Chaîne de caractères - Les date et heure de création.</dd>
<dt><var>updated_at</var></dt>
<dd>Chaîne de caractères - Les date et heure de dernière modification.</dd>
<dt><var>submitted_at</var></dt>
<dd>Chaîne de caractères - Les date et heure de soumission en modération.</dd>
</dl>
<h3>Poster un journal</h3>
<p>Scope nécessaire : <var>diary</var></p>
<pre>
POST https://linuxfr.org/api/v1/journaux
</pre>
<h4>Paramètres</h4>
<dl>
<dt><var>bearer_token</var></dt>
<dd>Chaîne de caractères obligatoire - Le jeton d'autorisation.</dd>
<dt><var>title</var></dt>
<dd>Chaîne de caractères obligatoire - Le titre du journal</dd>
<dt><var>wiki_body</var></dt>
<dd>Chaîne de caractères obligatoire - Le contenu en markdown du journal</dd>
</dl>
<h4>Réponse</h4>
<dl>
<dt><var>id</var></dt>
<dd>Entier - Id du journal qui vient d'être créé.</dd>
<dt><var>owner_id</var></dt>
<dd>Entier - Id de l'utilisateur qui vient de créer le journal.</dd>
<dt><var>cached_slug</var></dt>
<dd>Chaîne de caractères - Le slug du journal.</dd>
<dt><var>title</var></dt>
<dd>Chaîne de caractères - Le titre du journal.</dd>
<dt><var>body</var></dt>
<dd>Chaîne de caractères - Le contenu du journal en HTML.</dd>
<dt><var>wiki_body</var></dt>
<dd>Chaîne de caractères - Le contenu du journal en Markdown.</dd>
<dt><var>truncated_body</var></dt>
<dd>Chaîne de caractères - La version courte du contenu du journal en HTML.</dd>
<dt><var>created_at</var></dt>
<dd>Chaîne de caractères - Les date et heure de création.</dd>
<dt><var>updated_at</var></dt>
<dd>Chaîne de caractères - Les date et heure de dernière modification.</dd>
</dl>
<h3>Poster sur la tribune</h3>
<p>Scope nécessaire : <var>board</var></p>
<pre>
POST https://linuxfr.org/api/v1/board
</pre>
<h4>Paramètres</h4>
<dl>
<dt><var>bearer_token</var></dt>
<dd>Chaîne de caractères obligatoire - Le jeton d'autorisation.</dd>
<dt><var>message</var></dt>
<dd>Chaîne de caractères obligatoire - Message à poster sur la tribune</dd>
<dt><var>object_type</var></dt>
<dd>
Chaîne de caractères facultative - Par défaut, le message est posté sur la
tribune de test, mais en passant <var>writing</var>, il sera posté sur la
tribune de rédaction.
</dd>
</dl>
<h4>Réponse</h4>
<dl>
<dt><var>id</var></dt>
<dd>Entier - Id du message qui vient d'être créé, le cas échéant.</dd>
</dl>
<h4>Exemple de réponse</h4>
<pre>
{"id": 42}
</pre>
<h2>Bibliothèques</h2>
<p>
<a href="https://github.com/intridea/omniauth">Omniauth</a> est une gem Ruby
qui permet d'authentifier des utilisateurs à partir d'applications web
distantes. Il possède une stratégie d'authentification pour LinuxFr.org :
<a href="https://github.com/linuxfrorg/omniauth-linuxfr.org">omniauth-linuxfr.org</a>.
</p>