Browse Source

Add contributors in about peertube page

Chocobozzz 3 months ago
parent
commit
1eb23e12f7
No account linked to committer's email address

+ 26
- 8
CREDITS.md View File

@@ -1,4 +1,4 @@
1
-# Code
1
+# Code contributors
2 2
 
3 3
  * [Chocobozzz](https://github.com/Chocobozzz)
4 4
  * [rigelk](https://github.com/rigelk)
@@ -8,10 +8,12 @@
8 8
  * [Jorropo](https://github.com/Jorropo)
9 9
  * [buoyantair](https://github.com/buoyantair)
10 10
  * [bnjbvr](https://github.com/bnjbvr)
11
+ * [frankstrater](https://github.com/frankstrater)
11 12
  * [jankeromnes](https://github.com/jankeromnes)
12 13
  * [lucas-dclrcq](https://github.com/lucas-dclrcq)
13
- * [DavidLibeau](https://github.com/DavidLibeau)
14 14
  * [JohnXLivingston](https://github.com/JohnXLivingston)
15
+ * [DavidLibeau](https://github.com/DavidLibeau)
16
+ * [fflorent](https://github.com/fflorent)
15 17
  * [kaiyou](https://github.com/kaiyou)
16 18
  * [ldidry](https://github.com/ldidry)
17 19
  * [McFlat](https://github.com/McFlat)
@@ -21,25 +23,25 @@
21 23
  * [NassimBounouas](https://github.com/NassimBounouas)
22 24
  * [thomaskuntzz](https://github.com/thomaskuntzz)
23 25
  * [rezonant](https://github.com/rezonant)
26
+ * [Wirebrass](https://github.com/Wirebrass)
24 27
  * [clementbrizard](https://github.com/clementbrizard)
25 28
  * [LecygneNoir](https://github.com/LecygneNoir)
26 29
  * [okhin](https://github.com/okhin)
27 30
  * [daftaupe](https://github.com/daftaupe)
28 31
  * [tcitworld](https://github.com/tcitworld)
29
- * [fflorent](https://github.com/fflorent)
30 32
  * [dedesite](https://github.com/dedesite)
31 33
  * [Nautigsam](https://github.com/Nautigsam)
32 34
  * [scanlime](https://github.com/scanlime)
33 35
  * [am97](https://github.com/am97)
34 36
  * [dadall](https://github.com/dadall)
35 37
  * [jonathanraes](https://github.com/jonathanraes)
36
- * [Wirebrass](https://github.com/Wirebrass)
37 38
  * [yohanboniface](https://github.com/yohanboniface)
38 39
  * [anoadragon453](https://github.com/anoadragon453)
39 40
  * [auberanger](https://github.com/auberanger)
40 41
  * [darnuria](https://github.com/darnuria)
41 42
  * [rhaamo](https://github.com/rhaamo)
42 43
  * [mrflos](https://github.com/mrflos)
44
+ * [Yetangitu](https://github.com/Yetangitu)
43 45
  * [jocelynj](https://github.com/jocelynj)
44 46
  * [lucaspontoexe](https://github.com/lucaspontoexe)
45 47
  * [flyingrub](https://github.com/flyingrub)
@@ -57,6 +59,7 @@
57 59
  * [Anton-Latukha](https://github.com/Anton-Latukha)
58 60
  * [noplanman](https://github.com/noplanman)
59 61
  * [austinheap](https://github.com/austinheap)
62
+ * [BO41](https://github.com/BO41)
60 63
  * [benabbottnz](https://github.com/benabbottnz)
61 64
  * [ewft](https://github.com/ewft)
62 65
  * [bradsk88](https://github.com/bradsk88)
@@ -67,7 +70,6 @@
67 70
  * [ebrehault](https://github.com/ebrehault)
68 71
  * [DatBewar](https://github.com/DatBewar)
69 72
  * [ReK2Fernandez](https://github.com/ReK2Fernandez)
70
- * [Yetangitu](https://github.com/Yetangitu)
71 73
  * [grizio](https://github.com/grizio)
72 74
  * [Glandos](https://github.com/Glandos)
73 75
  * [lanodan](https://github.com/lanodan)
@@ -80,6 +82,7 @@
80 82
  * [pichouk](https://github.com/pichouk)
81 83
  * [LeoMouyna](https://github.com/LeoMouyna)
82 84
  * [LiPeK](https://github.com/LiPeK)
85
+ * [Findus23](https://github.com/Findus23)
83 86
  * [zapashcanon](https://github.com/zapashcanon)
84 87
  * [mart-e](https://github.com/mart-e)
85 88
  * [0mp](https://github.com/0mp)
@@ -95,6 +98,7 @@
95 98
  * [quentinDupont](https://github.com/quentinDupont)
96 99
  * [Quenty31](https://github.com/Quenty31)
97 100
  * [sundowndev](https://github.com/sundowndev)
101
+ * [robinkooli](https://github.com/robinkooli)
98 102
  * [sesn](https://github.com/sesn)
99 103
  * [ALSai](https://github.com/ALSai)
100 104
  * [Simounet](https://github.com/Simounet)
@@ -103,14 +107,13 @@
103 107
  * [FrozenDroid](https://github.com/FrozenDroid)
104 108
  * [fallen](https://github.com/fallen)
105 109
  * [melongbob](https://github.com/melongbob)
106
- * [Zig-03](https://github.com/Zig-03)
107 110
  * [anmol26s](https://github.com/anmol26s)
108 111
  * [imbsky](https://github.com/imbsky)
109 112
  * [ctlaltdefeat](https://github.com/ctlaltdefeat)
110 113
  * [jomo](https://github.com/jomo)
111 114
  * [libertysoft3](https://github.com/libertysoft3)
112 115
  * [lsde](https://github.com/lsde)
113
- * [memoryboxes](https://github.com/memoryboxes)
116
+ * [brain-zhang](https://github.com/brain-zhang)
114 117
  * [norrist](https://github.com/norrist)
115 118
  * [osauzet](https://github.com/osauzet)
116 119
  * [SansPseudoFix](https://github.com/SansPseudoFix)
@@ -121,7 +124,7 @@
121 124
  * [ewasion](https://github.com/ewasion)
122 125
 
123 126
 
124
-# Translations
127
+# Translation contributors
125 128
 
126 129
  * [abdhessuk](https://trad.framasoft.org/zanata/profile/view/abdhessuk)
127 130
  * [abidin24](https://trad.framasoft.org/zanata/profile/view/abidin24)
@@ -196,6 +199,7 @@
196 199
  * [abidin24](https://trad.framasoft.org/zanata/profile/view/abidin24)
197 200
  * [aditoo](https://trad.framasoft.org/zanata/profile/view/aditoo)
198 201
  * [alidemirtas](https://trad.framasoft.org/zanata/profile/view/alidemirtas)
202
+ * [anastasia](https://trad.framasoft.org/zanata/profile/view/anastasia)
199 203
  * [ariasuni](https://trad.framasoft.org/zanata/profile/view/ariasuni)
200 204
  * [autom](https://trad.framasoft.org/zanata/profile/view/autom)
201 205
  * [balaji](https://trad.framasoft.org/zanata/profile/view/balaji)
@@ -203,13 +207,16 @@
203 207
  * [bristow](https://trad.framasoft.org/zanata/profile/view/bristow)
204 208
  * [butterflyoffire](https://trad.framasoft.org/zanata/profile/view/butterflyoffire)
205 209
  * [c0dr](https://trad.framasoft.org/zanata/profile/view/c0dr)
210
+ * [canony](https://trad.framasoft.org/zanata/profile/view/canony)
206 211
  * [cat](https://trad.framasoft.org/zanata/profile/view/cat)
207 212
  * [chocobozzz](https://trad.framasoft.org/zanata/profile/view/chocobozzz)
208 213
  * [clerie](https://trad.framasoft.org/zanata/profile/view/clerie)
209 214
  * [curupira](https://trad.framasoft.org/zanata/profile/view/curupira)
210 215
  * [dhsets](https://trad.framasoft.org/zanata/profile/view/dhsets)
216
+ * [dibek](https://trad.framasoft.org/zanata/profile/view/dibek)
211 217
  * [digitalkiller](https://trad.framasoft.org/zanata/profile/view/digitalkiller)
212 218
  * [dwsage](https://trad.framasoft.org/zanata/profile/view/dwsage)
219
+ * [fkohrt](https://trad.framasoft.org/zanata/profile/view/fkohrt)
213 220
  * [flauta](https://trad.framasoft.org/zanata/profile/view/flauta)
214 221
  * [frankstrater](https://trad.framasoft.org/zanata/profile/view/frankstrater)
215 222
  * [gillux](https://trad.framasoft.org/zanata/profile/view/gillux)
@@ -220,17 +227,25 @@
220 227
  * [jhertel](https://trad.framasoft.org/zanata/profile/view/jhertel)
221 228
  * [joss2lyon](https://trad.framasoft.org/zanata/profile/view/joss2lyon)
222 229
  * [kekkotranslates](https://trad.framasoft.org/zanata/profile/view/kekkotranslates)
230
+ * [kingu](https://trad.framasoft.org/zanata/profile/view/kingu)
223 231
  * [kittybecca](https://trad.framasoft.org/zanata/profile/view/kittybecca)
232
+ * [kousha](https://trad.framasoft.org/zanata/profile/view/kousha)
224 233
  * [krkk](https://trad.framasoft.org/zanata/profile/view/krkk)
234
+ * [lapor](https://trad.framasoft.org/zanata/profile/view/lapor)
225 235
  * [laufor](https://trad.framasoft.org/zanata/profile/view/laufor)
226 236
  * [leeroyepold48](https://trad.framasoft.org/zanata/profile/view/leeroyepold48)
227 237
  * [lstamellos](https://trad.framasoft.org/zanata/profile/view/lstamellos)
228 238
  * [mablr](https://trad.framasoft.org/zanata/profile/view/mablr)
229 239
  * [marcinmalecki](https://trad.framasoft.org/zanata/profile/view/marcinmalecki)
230 240
  * [matograine](https://trad.framasoft.org/zanata/profile/view/matograine)
241
+ * [mayana](https://trad.framasoft.org/zanata/profile/view/mayana)
231 242
  * [mikeorlov](https://trad.framasoft.org/zanata/profile/view/mikeorlov)
232 243
  * [nin](https://trad.framasoft.org/zanata/profile/view/nin)
244
+ * [noncommutativegeo](https://trad.framasoft.org/zanata/profile/view/noncommutativegeo)
233 245
  * [norbipeti](https://trad.framasoft.org/zanata/profile/view/norbipeti)
246
+ * [nvivant](https://trad.framasoft.org/zanata/profile/view/nvivant)
247
+ * [osoitz](https://trad.framasoft.org/zanata/profile/view/osoitz)
248
+ * [ppnplus](https://trad.framasoft.org/zanata/profile/view/ppnplus)
234 249
  * [predatorix](https://trad.framasoft.org/zanata/profile/view/predatorix)
235 250
  * [quentin](https://trad.framasoft.org/zanata/profile/view/quentin)
236 251
  * [quentind](https://trad.framasoft.org/zanata/profile/view/quentind)
@@ -238,11 +253,14 @@
238 253
  * [robin](https://trad.framasoft.org/zanata/profile/view/robin)
239 254
  * [rond](https://trad.framasoft.org/zanata/profile/view/rond)
240 255
  * [s8321414](https://trad.framasoft.org/zanata/profile/view/s8321414)
256
+ * [sato_ss](https://trad.framasoft.org/zanata/profile/view/sato_ss)
241 257
  * [secreet](https://trad.framasoft.org/zanata/profile/view/secreet)
258
+ * [sercom_kc](https://trad.framasoft.org/zanata/profile/view/sercom_kc)
242 259
  * [severo](https://trad.framasoft.org/zanata/profile/view/severo)
243 260
  * [silkevicious](https://trad.framasoft.org/zanata/profile/view/silkevicious)
244 261
  * [sporiff](https://trad.framasoft.org/zanata/profile/view/sporiff)
245 262
  * [tekuteku](https://trad.framasoft.org/zanata/profile/view/tekuteku)
263
+ * [thecatjustmeow](https://trad.framasoft.org/zanata/profile/view/thecatjustmeow)
246 264
  * [tirifto](https://trad.framasoft.org/zanata/profile/view/tirifto)
247 265
  * [tmota](https://trad.framasoft.org/zanata/profile/view/tmota)
248 266
  * [tuxayo](https://trad.framasoft.org/zanata/profile/view/tuxayo)

+ 1
- 1
README.md View File

@@ -22,7 +22,7 @@ Be part of a network of multiple small federated, interoperable video hosting pr
22 22
 
23 23
 <p align="center">
24 24
   <a href="https://framasoft.org">
25
-    <img width="150px" src="http://lutim.cpy.re/Prd3ci7G.png" alt="Framasoft logo"/>
25
+    <img width="150px" src="https://lutim.cpy.re/FeRgHH8r.png" alt="Framasoft logo"/>
26 26
   </a>
27 27
 </p>
28 28
 

+ 7
- 7
client/src/app/+about/about-instance/about-instance.component.html View File

@@ -4,7 +4,7 @@
4 4
     <div class="about-instance-title">
5 5
       <div i18n class="title">About {{ instanceName }} instance</div>
6 6
 
7
-      <div *ngIf="isContactFormEnabled" (click)="openContactModal()" i18n role="button" class="contact-admin">Contact administrator</div>
7
+      <div i18n *ngIf="isContactFormEnabled" (click)="openContactModal()" role="button" class="contact-admin">Contact administrator</div>
8 8
     </div>
9 9
 
10 10
     <div class="block instance-badges">
@@ -16,10 +16,10 @@
16 16
     <div class="short-description">
17 17
       <div class="block short-description">{{ shortDescription }}</div>
18 18
 
19
-      <div *ngIf="isNSFW" class="block dedicated-to-nsfw">This instance is dedicated to sensitive/NSFW content.</div>
19
+      <div i18n *ngIf="isNSFW" class="block dedicated-to-nsfw">This instance is dedicated to sensitive/NSFW content.</div>
20 20
     </div>
21 21
 
22
-    <div class="middle-title" *ngIf="html.administrator || maintenanceLifetime || businessModel">
22
+    <div i18n class="middle-title" *ngIf="html.administrator || maintenanceLifetime || businessModel">
23 23
       Administrators & sustainability
24 24
     </div>
25 25
 
@@ -47,7 +47,7 @@
47 47
       <p>{{ businessModel }}</p>
48 48
     </div>
49 49
 
50
-    <div class="middle-title" *ngIf="html.description">
50
+    <div i18n class="middle-title" *ngIf="html.description">
51 51
       Information
52 52
     </div>
53 53
 
@@ -57,7 +57,7 @@
57 57
       <div [innerHTML]="html.description"></div>
58 58
     </div>
59 59
 
60
-    <div class="middle-title" *ngIf="html.moderationInformation || html.codeOfConduct || html.terms">
60
+    <div i18n class="middle-title" *ngIf="html.moderationInformation || html.codeOfConduct || html.terms">
61 61
       Moderation
62 62
     </div>
63 63
 
@@ -79,7 +79,7 @@
79 79
       <div [innerHTML]="html.terms"></div>
80 80
     </div>
81 81
 
82
-    <div class="middle-title" *ngIf="html.hardwareInformation">
82
+    <div i18n class="middle-title" *ngIf="html.hardwareInformation">
83 83
       Other information
84 84
     </div>
85 85
 
@@ -91,7 +91,7 @@
91 91
   </div>
92 92
 
93 93
   <div class="col-md-12 col-xl-6">
94
-    <label>Features found on this instance</label>
94
+    <label i18n>Features found on this instance</label>
95 95
     <my-instance-features-table></my-instance-features-table>
96 96
   </div>
97 97
 </div>

+ 13
- 0
client/src/app/+about/about-peertube/about-peertube-contributors.component.html View File

@@ -0,0 +1,13 @@
1
+<h3 i18n class="section-title">Who made this software?</h3>
2
+
3
+<p align="center">
4
+  <strong>Developed with &#10084; by <a target="_blank" rel="noopener noreferrer" href="https://framasoft.org">Framasoft</a></strong>
5
+</p>
6
+
7
+<p align="center">
8
+  <a target="_blank" rel="noopener noreferrer" href="https://framasoft.org">
9
+    <img width="150px" src="/client/assets/images/framasoft.png" alt="Framasoft logo"/>
10
+  </a>
11
+</p>
12
+
13
+<div [innerHTML]="creditsHtml"></div>

+ 15
- 0
client/src/app/+about/about-peertube/about-peertube-contributors.component.scss View File

@@ -0,0 +1,15 @@
1
+@import '_variables';
2
+@import '_mixins';
3
+
4
+/deep/ h1 {
5
+  font-size: 1rem;
6
+}
7
+
8
+/deep/ ul {
9
+  padding: 0;
10
+
11
+  li {
12
+    display: inline-block;
13
+    margin-right: 10px;
14
+  }
15
+}

+ 19
- 0
client/src/app/+about/about-peertube/about-peertube-contributors.component.ts View File

@@ -0,0 +1,19 @@
1
+import { Component, OnInit } from '@angular/core'
2
+import { MarkdownService } from '@app/shared/renderer'
3
+
4
+@Component({
5
+  selector: 'my-about-peertube-contributors',
6
+  templateUrl: './about-peertube-contributors.component.html',
7
+  styleUrls: [ './about-peertube-contributors.component.scss' ]
8
+})
9
+export class AboutPeertubeContributorsComponent implements OnInit {
10
+  creditsHtml: string
11
+
12
+  private markdown = require('raw-loader!../../../../../CREDITS.md')
13
+
14
+  constructor (private markdownService: MarkdownService) { }
15
+
16
+  async ngOnInit () {
17
+    this.creditsHtml = await this.markdownService.completeMarkdownToHTML(this.markdown)
18
+  }
19
+}

+ 84
- 79
client/src/app/+about/about-peertube/about-peertube.component.html View File

@@ -14,84 +14,89 @@
14 14
   </p>
15 15
 </div>
16 16
 
17
-<div id="p2p-privacy">
18
-  <h3 i18n class="section-title">P2P & Privacy</h3>
17
+<div class="privacy-contributors">
18
+  <my-about-peertube-contributors></my-about-peertube-contributors>
19
+
20
+  <div class="p2p-privacy">
21
+    <h3 i18n class="section-title">P2P & Privacy</h3>
22
+
23
+    <p i18n>
24
+      PeerTube uses the BitTorrent protocol to share bandwidth between users.
25
+      This implies that your IP address is stored in the instance's BitTorrent tracker as long as you download or watch the video.
26
+    </p>
27
+
28
+    <h6 i18n class="p2p-privacy-title">What are the consequences?</h6>
29
+
30
+    <p i18n>
31
+      In theory, someone with enough technical skills could create a script that tracks which IP is downloading which video.
32
+      In practice, this is much more difficult because:
33
+    </p>
34
+
35
+    <ul>
36
+      <li i18n>
37
+        An HTTP request has to be sent on each tracker for each video to spy.
38
+        If we want to spy all PeerTube's videos, we have to send as many requests as there are videos (so potentially a lot)
39
+      </li>
40
+
41
+      <li i18n>
42
+        For each request sent, the tracker returns random peers at a limited number.
43
+        For instance, if there are 1000 peers in the swarm and the tracker sends only 20 peers for each request, there must be at least 50 requests sent to know every peers in the swarm
44
+      </li>
45
+
46
+      <li i18n>
47
+        Those requests have to be sent regularly to know who starts/stops watching a video. It is easy to detect that kind of behaviour
48
+      </li>
49
+
50
+      <li i18n>
51
+        If an IP address is stored in the tracker, it doesn't mean that the person behind the IP (if this person exists) has watched the video
52
+      </li>
53
+
54
+      <li i18n>
55
+        The IP address is a vague information : usually, it regularly changes and can represent many persons or entities
56
+      </li>
57
+
58
+      <li i18n>
59
+        Web peers are not publicly accessible: because we use WebRTC inside the web browser (<a href="https://webtorrent.io/">with the WebTorrent library</a>), the protocol is different from classic BitTorrent.
60
+        When you are in a web browser, you send a signal containing your IP address to the tracker that will randomly choose other peers to forward the information to.
61
+        See <a href="https://github.com/yciabaud/webtorrent/blob/beps/bep_webrtc.rst">this document</a> for more information
62
+      </li>
63
+    </ul>
64
+
65
+    <p i18n>
66
+      The worst-case scenario of an average person spying on their friends is quite unlikely.
67
+      There are much more effective ways to get that kind of information.
68
+    </p>
69
+
70
+    <h6 i18n class="p2p-privacy-title">How does PeerTube compare with YouTube?</h6>
71
+
72
+    <p i18n>
73
+      The threats to privacy in YouTube are different from PeerTube's.
74
+      In YouTube's case, the platform gathers a huge amount of your personal information (not only your IP) to analyze them and track you.
75
+      Moreover, YouTube is owned by Google/Alphabet, a company that tracks you across many websites (via AdSense or Google Analytics).
76
+    </p>
77
+
78
+    <h6 i18n class="p2p-privacy-title">What can I do to limit the exposure of my IP address?</h6>
79
+
80
+    <p i18n>
81
+      Your IP address is public so every time you consult a website, there is a number of actors (in addition to the final website) seeing your IP in their connection logs: ISP/routers/trackers/CDN and more.
82
+      PeerTube is transparent about it: we warn you that if you want to keep your IP private, you must use a VPN or Tor Browser.
83
+      Thinking that removing P2P from PeerTube will give you back anonymity doesn't make sense.
84
+    </p>
85
+
86
+    <h6 i18n class="p2p-privacy-title">What will be done to mitigate this problem?</h6>
87
+
88
+    <p i18n>
89
+      PeerTube is in its early stages, and want to deliver the best countermeasures possible by the time the stable is released.
90
+      In the meantime, we want to test different ideas related to this issue:
91
+    </p>
92
+
93
+    <ul>
94
+      <li i18n>Set a limit to the number of peers sent by the tracker</li>
95
+      <li i18n>Set a limit on the request frequency received by the tracker (being tested)</li>
96
+      <li i18n>Ring a bell if there are unusual requests (being tested)</li>
97
+      <li i18n>Disable P2P from the administration interface</li>
98
+      <li i18n>An automatic video redundancy program: we wouldn't know if the IP downloaded the video on purpose or if it was the automatized program</li>
99
+    </ul>
100
+  </div>
19 101
 
20
-  <p i18n>
21
-    PeerTube uses the BitTorrent protocol to share bandwidth between users.
22
-    This implies that your IP address is stored in the instance's BitTorrent tracker as long as you download or watch the video.
23
-  </p>
24
-
25
-  <h6 i18n class="p2p-privacy-title">What are the consequences?</h6>
26
-
27
-  <p i18n>
28
-    In theory, someone with enough technical skills could create a script that tracks which IP is downloading which video.
29
-    In practice, this is much more difficult because:
30
-  </p>
31
-
32
-  <ul>
33
-    <li i18n>
34
-      An HTTP request has to be sent on each tracker for each video to spy.
35
-      If we want to spy all PeerTube's videos, we have to send as many requests as there are videos (so potentially a lot)
36
-    </li>
37
-
38
-    <li i18n>
39
-      For each request sent, the tracker returns random peers at a limited number.
40
-      For instance, if there are 1000 peers in the swarm and the tracker sends only 20 peers for each request, there must be at least 50 requests sent to know every peers in the swarm
41
-    </li>
42
-
43
-    <li i18n>
44
-      Those requests have to be sent regularly to know who starts/stops watching a video. It is easy to detect that kind of behaviour
45
-    </li>
46
-
47
-    <li i18n>
48
-      If an IP address is stored in the tracker, it doesn't mean that the person behind the IP (if this person exists) has watched the video
49
-    </li>
50
-
51
-    <li i18n>
52
-      The IP address is a vague information : usually, it regularly changes and can represent many persons or entities
53
-    </li>
54
-
55
-    <li i18n>
56
-      Web peers are not publicly accessible: because we use WebRTC inside the web browser (<a href="https://webtorrent.io/">with the WebTorrent library</a>), the protocol is different from classic BitTorrent.
57
-      When you are in a web browser, you send a signal containing your IP address to the tracker that will randomly choose other peers to forward the information to.
58
-      See <a href="https://github.com/yciabaud/webtorrent/blob/beps/bep_webrtc.rst">this document</a> for more information
59
-    </li>
60
-  </ul>
61
-
62
-  <p i18n>
63
-    The worst-case scenario of an average person spying on their friends is quite unlikely.
64
-    There are much more effective ways to get that kind of information.
65
-  </p>
66
-
67
-  <h6 i18n class="p2p-privacy-title">How does PeerTube compare with YouTube?</h6>
68
-
69
-  <p i18n>
70
-    The threats to privacy in YouTube are different from PeerTube's.
71
-    In YouTube's case, the platform gathers a huge amount of your personal information (not only your IP) to analyze them and track you.
72
-    Moreover, YouTube is owned by Google/Alphabet, a company that tracks you across many websites (via AdSense or Google Analytics).
73
-  </p>
74
-
75
-  <h6 i18n class="p2p-privacy-title">What can I do to limit the exposure of my IP address?</h6>
76
-
77
-  <p i18n>
78
-    Your IP address is public so every time you consult a website, there is a number of actors (in addition to the final website) seeing your IP in their connection logs: ISP/routers/trackers/CDN and more.
79
-    PeerTube is transparent about it: we warn you that if you want to keep your IP private, you must use a VPN or Tor Browser.
80
-    Thinking that removing P2P from PeerTube will give you back anonymity doesn't make sense.
81
-  </p>
82
-
83
-  <h6 i18n class="p2p-privacy-title">What will be done to mitigate this problem?</h6>
84
-
85
-  <p i18n>
86
-    PeerTube is in its early stages, and want to deliver the best countermeasures possible by the time the stable is released.
87
-    In the meantime, we want to test different ideas related to this issue:
88
-  </p>
89
-
90
-  <ul>
91
-    <li i18n>Set a limit to the number of peers sent by the tracker</li>
92
-    <li i18n>Set a limit on the request frequency received by the tracker (being tested)</li>
93
-    <li i18n>Ring a bell if there are unusual requests (being tested)</li>
94
-    <li i18n>Disable P2P from the administration interface</li>
95
-    <li i18n>An automatic video redundancy program: we wouldn't know if the IP downloaded the video on purpose or if it was the automatized program</li>
96
-  </ul>
97 102
 </div>

+ 39
- 4
client/src/app/+about/about-peertube/about-peertube.component.scss View File

@@ -2,12 +2,12 @@
2 2
 @import '_mixins';
3 3
 
4 4
 .about-peertube-title {
5
-  font-size: 25px;
6
-  font-weight: bold;
5
+  font-size: 20px;
6
+  font-weight: $font-semibold;
7 7
   margin-bottom: 15px;
8 8
 }
9 9
 
10
-.section-title {
10
+/deep/ .section-title {
11 11
   font-weight: $font-semibold;
12 12
   font-size: 20px;
13 13
   margin-bottom: 5px;
@@ -17,6 +17,41 @@
17 17
   margin-bottom: 30px;
18 18
 }
19 19
 
20
+.description,
21
+.p2p-privacy,
22
+my-about-peertube-contributors {
23
+  /deep/ {
24
+    p, li {
25
+      font-size: 15px;
26
+    }
27
+  }
28
+}
29
+
20 30
 .p2p-privacy-title {
21 31
   margin-top: 15px;
22
-}
32
+}
33
+
34
+.privacy-contributors {
35
+  display: flex;
36
+  flex-direction: row;
37
+
38
+  > div,
39
+  > my-about-peertube-contributors {
40
+    flex-basis: 100%;
41
+    display: block;
42
+  }
43
+
44
+  .p2p-privacy {
45
+    h6 {
46
+      font-size: 20px;
47
+    }
48
+  }
49
+
50
+  my-about-peertube-contributors {
51
+    margin: 0 40px 40px 0;
52
+  }
53
+
54
+  @media screen and (max-width: $small-view) {
55
+    flex-direction: column;
56
+  }
57
+}

+ 2
- 1
client/src/app/+about/about.module.ts View File

@@ -1,5 +1,4 @@
1 1
 import { NgModule } from '@angular/core'
2
-
3 2
 import { AboutRoutingModule } from './about-routing.module'
4 3
 import { AboutComponent } from './about.component'
5 4
 import { SharedModule } from '../shared'
@@ -7,6 +6,7 @@ import { AboutInstanceComponent } from '@app/+about/about-instance/about-instanc
7 6
 import { AboutPeertubeComponent } from '@app/+about/about-peertube/about-peertube.component'
8 7
 import { ContactAdminModalComponent } from '@app/+about/about-instance/contact-admin-modal.component'
9 8
 import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.component'
9
+import { AboutPeertubeContributorsComponent } from '@app/+about/about-peertube/about-peertube-contributors.component'
10 10
 
11 11
 @NgModule({
12 12
   imports: [
@@ -19,6 +19,7 @@ import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.c
19 19
     AboutInstanceComponent,
20 20
     AboutPeertubeComponent,
21 21
     AboutFollowsComponent,
22
+    AboutPeertubeContributorsComponent,
22 23
     ContactAdminModalComponent
23 24
   ],
24 25
 

+ 16
- 3
client/src/app/shared/renderer/markdown.service.ts View File

@@ -13,9 +13,11 @@ export class MarkdownService {
13 13
     'list'
14 14
   ]
15 15
   static ENHANCED_RULES = MarkdownService.TEXT_RULES.concat([ 'image' ])
16
+  static COMPLETE_RULES = MarkdownService.ENHANCED_RULES.concat([ 'block', 'inline', 'heading', 'html_inline', 'html_block', 'paragraph' ])
16 17
 
17 18
   private textMarkdownIt: MarkdownIt
18 19
   private enhancedMarkdownIt: MarkdownIt
20
+  private completeMarkdownIt: MarkdownIt
19 21
 
20 22
   async textMarkdownToHTML (markdown: string) {
21 23
     if (!markdown) return ''
@@ -39,11 +41,22 @@ export class MarkdownService {
39 41
     return this.avoidTruncatedTags(html)
40 42
   }
41 43
 
42
-  private async createMarkdownIt (rules: string[]) {
43
-    // FIXME: import('..') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function
44
+  async completeMarkdownToHTML (markdown: string) {
45
+    if (!markdown) return ''
46
+
47
+    if (!this.completeMarkdownIt) {
48
+      this.completeMarkdownIt = await this.createMarkdownIt(MarkdownService.COMPLETE_RULES, true)
49
+    }
50
+
51
+    const html = this.completeMarkdownIt.render(markdown)
52
+    return this.avoidTruncatedTags(html)
53
+  }
54
+
55
+  private async createMarkdownIt (rules: string[], html = false) {
56
+    // FIXME: import('...') returns a struct module, containing a "default" field corresponding to our sanitizeHtml function
44 57
     const MarkdownItClass: typeof import ('markdown-it') = (await import('markdown-it') as any).default
45 58
 
46
-    const markdownIt = new MarkdownItClass('zero', { linkify: true, breaks: true })
59
+    const markdownIt = new MarkdownItClass('zero', { linkify: true, breaks: true, html })
47 60
 
48 61
     for (const rule of rules) {
49 62
       markdownIt.enable(rule)

BIN
client/src/assets/images/framasoft.png View File


+ 2
- 2
scripts/generate-code-contributors.ts View File

@@ -13,7 +13,7 @@ async function run () {
13 13
   {
14 14
     const contributors = await fetchGithub('https://api.github.com/repos/chocobozzz/peertube/contributors')
15 15
 
16
-    console.log('# Code\n')
16
+    console.log('# Code contributors\n')
17 17
     for (const contributor of contributors) {
18 18
       const contributorUrl = contributor.url.replace('api.github.com/users', 'github.com')
19 19
       console.log(` * [${contributor.login}](${contributorUrl})`)
@@ -27,7 +27,7 @@ async function run () {
27 27
 
28 28
     const translators = await fetchZanata(zanataUsername, zanataToken)
29 29
 
30
-    console.log('\n\n# Translations\n')
30
+    console.log('\n\n# Translation contributors\n')
31 31
     for (const translator of translators) {
32 32
       console.log(` * [${translator.username}](https://trad.framasoft.org/zanata/profile/view/${translator.username})`)
33 33
     }

Loading…
Cancel
Save