mirror of
https://github.com/jlengrand/irma-website.git
synced 2026-03-10 08:21:20 +00:00
- Cleaned up project structure and removed various unused template stuff.
- Added i18n lib and split moved all translations to seperate files.
- Added very simple language selector.
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
---
|
||||
BUNDLE_PATH: "vendor/bundle"
|
||||
BUNDLE_PATH: "vendor"
|
||||
BUNDLE_NO_INSTALL: "true"
|
||||
|
||||
3
Gemfile
3
Gemfile
@@ -17,7 +17,8 @@ gem "jekyll", "~> 3.6.0"
|
||||
# If you have any plugins, put them here!
|
||||
group :jekyll_plugins do
|
||||
gem "jekyll-feed", "~> 0.6"
|
||||
gem "jekyll-menus"
|
||||
gem "jekyll-menus", "0.6"
|
||||
gem 'jekyll-multiple-languages-plugin'
|
||||
end
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
|
||||
37
Gemfile.lock
37
Gemfile.lock
@@ -1,10 +1,10 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
addressable (2.7.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
colorator (1.1.0)
|
||||
ffi (1.9.25)
|
||||
ffi (1.11.1)
|
||||
forwardable-extended (2.6.0)
|
||||
jekyll (3.6.3)
|
||||
addressable (~> 2.4)
|
||||
@@ -17,31 +17,31 @@ GEM
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 3)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-feed (0.9.2)
|
||||
jekyll-feed (0.11.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-menus (0.6.0)
|
||||
jekyll (~> 3.1)
|
||||
jekyll-multiple-languages-plugin (1.6.0)
|
||||
jekyll (>= 2.0, < 4.0)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-watch (1.5.1)
|
||||
listen (~> 3.0)
|
||||
kramdown (1.17.0)
|
||||
liquid (4.0.1)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
liquid (4.0.3)
|
||||
listen (3.2.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.3.6)
|
||||
pathutil (0.16.1)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.3)
|
||||
public_suffix (4.0.1)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rb-inotify (0.10.0)
|
||||
ffi (~> 1.0)
|
||||
rouge (2.2.1)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.6.0)
|
||||
safe_yaml (1.0.5)
|
||||
sass (3.7.4)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
@@ -53,8 +53,9 @@ PLATFORMS
|
||||
DEPENDENCIES
|
||||
jekyll (~> 3.6.0)
|
||||
jekyll-feed (~> 0.6)
|
||||
jekyll-menus
|
||||
jekyll-menus (= 0.6)
|
||||
jekyll-multiple-languages-plugin
|
||||
tzinfo-data
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.2
|
||||
1.17.2
|
||||
|
||||
@@ -3,14 +3,17 @@ title: IRMA
|
||||
author: Privacy by Design Foundation
|
||||
email: ''
|
||||
description: Met IRMA heb je in de hand wat er met jouw gegevens gebeurt.
|
||||
baseurl: "/"
|
||||
baseurl: ""
|
||||
url: ''
|
||||
languages: ["nl", "en", "de"]
|
||||
exclude_from_localizations: ["uploads", css"]
|
||||
defaults:
|
||||
- scope:
|
||||
path: ''
|
||||
values:
|
||||
layout: default
|
||||
markdown: kramdown
|
||||
gems:
|
||||
plugins:
|
||||
- jekyll-feed
|
||||
- jekyll-menus
|
||||
- jekyll-multiple-languages-plugin
|
||||
|
||||
232
_i18n/de.yml
Normal file
232
_i18n/de.yml
Normal file
@@ -0,0 +1,232 @@
|
||||
nav:
|
||||
home_link: "/"
|
||||
home_text: IRMA
|
||||
usage_link: "#gebruik"
|
||||
usage_text: Gebruik
|
||||
explanation_link: "#uitleg"
|
||||
explanation_text: Uitleg
|
||||
faq_link: "#faqs"
|
||||
faq_text: FAQs
|
||||
links_link: "#links"
|
||||
links_text: Links
|
||||
|
||||
banner:
|
||||
headline: Kies IRMA. <br><strong>Zet een digitaal paspoort op je eigen mobiel.</strong>
|
||||
ios: IRMA voor iOS
|
||||
ios_url: https://apps.apple.com/nl/app/irma-authenticatie/id1294092994
|
||||
android: IRMA vor Android
|
||||
android_url: https://play.google.com/store/apps/details?id=org.irmacard.cardemu
|
||||
product_shot_src: "/uploads/non-free/screenshot.png"
|
||||
product_shot_alt: Product Shot
|
||||
|
||||
usage:
|
||||
id: gebruik
|
||||
login_headline: Inloggen
|
||||
login_alt: Login
|
||||
login_content: Met IRMA kun je makkelijk inloggen en jezelf bekend maken. Je laat alleen
|
||||
die kenmerken van jezelf zien die relevant zijn. Bijvoorbeeld om een bepaalde
|
||||
film te kijken, bewijs je dat je ouder dan 16 bent, en verder niets.
|
||||
sign_headline: Ondertekenen
|
||||
sign_alt: Ondertekenen
|
||||
sign_content: Ook kun je met IRMA documenten digitaal ondertekenen. Je gebruikt alleen
|
||||
relevante kenmerken van jezelf, in een soort digitaal stempel. Zo kun je met
|
||||
IRMA ondertekenen als arts, als burger of vanuit een andere rol.
|
||||
trust_headline: Vertrouwen
|
||||
trust_alt: Vertrouwen
|
||||
trust_content: Gegevens in een IRMA app komen uit betrouwbare bronnen en zijn cryptografisch
|
||||
beschermd. De kenmerken die jij met IRMA bekend maakt zijn daarmee echt, en
|
||||
echt van jou.
|
||||
|
||||
slogan:
|
||||
id: start
|
||||
heading: Met IRMA heb je <strong>in de hand</strong> wat er met jouw gegevens gebeurt.
|
||||
|
||||
explanation:
|
||||
id: uitleg
|
||||
getstarted_headline: Zelf aan de slag met IRMA
|
||||
getstarted_alt: Zelf aan de slag met IRMA
|
||||
getstarted_content: Iedereen kan de IRMA app gratis downloaden (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
en vullen met eigen gegevens. Bijvoorbeeld bij de gemeente kun je inlogggen
|
||||
en basisgegevens (naam, adres, etc.) over jezelf ophalen. Maar ook kun je jouw
|
||||
emailadres of 06-nummer in je IRMA app opslaan. Met zulke gegevens kan iedereen
|
||||
zichzelf online bekend maken.
|
||||
tool_headline: IRMA is een middel, geen doel op zich
|
||||
tool_alt: IRMA is een middel, geen doel op zich
|
||||
tool_content: Voor iedereen is het gebruik van allerlei wachtwoorden veel gedoe. Toch
|
||||
moeten websites weten met wie ze te maken hebben. IRMA geeft zekerheid. Met
|
||||
IRMA kun je op een makkelijke en veilige manier online doen wat je wil doen.
|
||||
Bijvoorbeeld een film kijken of iets (ver)kopen.
|
||||
usecases_headline: Wat kan ik er al mee?
|
||||
usecases_alt: Wat kan ik er al mee?
|
||||
usecases_content: Er komen steeds meer websites waar je met IRMA in kan loggen. Artsen,
|
||||
bijvoorbeeld, kunnen via IRMA bij medische dossiers op de website <a href="https://www.helder.health"
|
||||
target="_blank">helder</a>. Vooral bij gemeenten en in de zorg wordt aan verder
|
||||
gebruik van IRMA gewerkt. Om een indruk te krijgen van de mogelijkheden kun
|
||||
je zelf een aantal IRMA <a href="https://privacybydesign.foundation/demo/" target="_blank">demo's</a>
|
||||
uitproberen.
|
||||
|
||||
faq:
|
||||
id: faqs
|
||||
headline: <span class="light">Veel gestelde vragen en <strong>antwoorden</strong>
|
||||
daarop<span>
|
||||
item1:
|
||||
question: Hoe moet ik met IRMA inloggen op een website?
|
||||
answer: Websites waar je met IRMA in kunt loggen hebben een knop daarvoor, waar
|
||||
bijvoorbeeld op staat <em>Log in met IRMA</em>. Als je de IRMA app nog niet
|
||||
op je telefoon hebt zul je die eerst moeten installeren en vullen met de kenmerken
|
||||
die je nodig hebt.<br><br> Als je de IRMA app al wel hebt, zijn er twee verschillende
|
||||
situaties<span>:</span><ul class="indent"><li> Als je de website bekijkt op
|
||||
je computer of laptop en je drukt op die login knop verschijnt er een QR code.
|
||||
Je opent dan de IRMA app op je telefoon met je PIN. Onderaan in de app zit een
|
||||
knopje waarmee je de QR code kunt scannen. In de app krijg je dan de vraag of
|
||||
je kenmerken waarom de website vraagt wil vrijgeven. Als je op OK klikt, ben
|
||||
je ingelogd.</li><li> Als je de website op je telefoon bekijkt wordt na het
|
||||
indrukken van de login knop automatisch overgeschakeld naar de IRMA app. Daarin
|
||||
verschijnt de vraag of je de gevraagde kenmerken wil vrijgeven. Nadat je op
|
||||
OK hebt gedrukt ga je terug naar de website en ben je ingelogd. Als het goed
|
||||
is gaat je telefoon automatisch terug, maar soms moet je dat met de hand doen.</li></ul><br>Het
|
||||
kan zijn dat de website vraagt om kenmerken die je nog niet in je IRMA app geladen
|
||||
hebt. Dan moet je dat eerst nog even doen voordat je in kunt loggen.
|
||||
item2:
|
||||
question: Welke kenmerken kan ik nu (en later) in de IRMA app zetten?
|
||||
answer: Vanuit gemeenten kun je zelf kenmerken zoals je naam, adres, geboortedatum,
|
||||
BSN in je IRMA app zetten, maar ook of je bijvoorbeeld ouder dan 18 of 65 bent.
|
||||
Daarnaast kun je een of meer email adressen en mobiele telefoonnummers, na controle, toevoegen.
|
||||
Studenten en medewerkers in het (hoger) onderwijs kunnen ook hun registratie
|
||||
toevoegen. Medewerkers in de zorg kunnen zogenaamde BIG en AGB registraties
|
||||
toevoegen. Ook vanuit sociale media (LinkedIn, Twitter, Facebook) kun je gegevens
|
||||
laden. Hiermee kun je in veel situaties voldoende van jezelf bekend maken.<br><br>Naar
|
||||
verwachting zullen de komende tijd nog veel andere bronnen van persoonsgegevens
|
||||
aan IRMA toegevoegd worden, voor gebruikers in het algemeen en ook voor speciale
|
||||
(beroeps)groepen.
|
||||
item3:
|
||||
question: Kan ik IRMA op een tweede telefoon of tablet zetten?
|
||||
answer: Jazeker, op ieder (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
apparaat kun je een apart IRMA account openen en vullen met persoonskenmerken.
|
||||
Het is misschien wel verstandig omdat te doen, want als je dan het ene apparaat
|
||||
kwijt bent, kun je nog met een ander inloggen.
|
||||
item4:
|
||||
question: Hoezo is IRMA privacy-vriendelijk en veilig?
|
||||
answer: 'Persoonskenmerken van IRMA staan alleen in de IRMA app en zijn beschermd
|
||||
met een PIN. Je laat alleen die gegevens van jezelf zien die in een bepaalde
|
||||
situatie relevant en nodig zijn. Bijvoorbeeld, om korting te krijgen moet je
|
||||
soms bewijzen dat je student bent; dat kun je met IRMA doen zonder je naam of
|
||||
studie te tonen.<br><br> Jouw kenmerken in de IRMA app zijn digitaal ondertekend
|
||||
door de bron waar de gegevens vandaan komen. Daardoor kan een website of winkel,
|
||||
waar je jezelf bekend maakt, cryptografisch controleren dat de gegevens echt
|
||||
zijn. Deze uitwisseling van persoonskenmerken vindt rechtstreeks plaats, tussen
|
||||
je telefoon en deze website. Niemand anders kan zien dat jij je daar bekendmaakt.
|
||||
Dit is heel anders dan bij een (privacy-onvriendelijke) login via Facebook,
|
||||
bijvoorbeeld bij een online winkel. Dan vindt de uitwisseling anders plaats:
|
||||
je moet eerst bij Facebook inloggen, waarna Facebook aan de webwinkel vertelt
|
||||
wie je bent. Facebook kan zo profielen opbouwen van wie waar inlogt.'
|
||||
item5:
|
||||
question: Waar staan mijn IRMA gegevens opgeslagen?
|
||||
answer: De kenmerken van jezelf die je in de IRMA app verzamelt staan alleen in
|
||||
de app zelf en worden door IRMA nergens anders opgeslagen. Ze staan dus niet
|
||||
ook nog ergens in een cloud. Als je jouw kenmerken uit de app verwijdert zijn
|
||||
ze ook echt weg. Jij geeft zelf steeds expliciet toestemming voordat deze kenmerken
|
||||
vanuit de IRMA app aan een website doorgegeven worden.
|
||||
item6:
|
||||
question: Hoe lang zijn kenmerken in IRMA geldig en hoe kan ik ze verversen?
|
||||
answer: In de IRMA app kun je op het kaartje met je kenmerken zien hoe lang ze
|
||||
geldig zijn. Die geldigheidsduur hangt af van het soort gegevens, namelijk van
|
||||
hoe veranderlijk ze zijn. Je naam en geboortedatum zijn vijf jaar geldig, maar
|
||||
je adres slechts een jaar. De uitgever (bron) van kenmerken bepaalt de geldigheidsduur.
|
||||
De geldigheid van IRMA kenmerken kan dus verlopen. De app geeft je daar een
|
||||
waarschuwing voor. Je kunt je kenmerken altijd, ook zonder waarschuwing, verversen
|
||||
door ze opnieuw op te halen bij de bron, net zo als je de eerste keer doet.
|
||||
Bijvoorbeeld, na je 18e verjaardag kun je opnieuw je gegevens bij je gemeente
|
||||
ophalen en heb je als nieuw kenmerk dat je ouder dan 18 bent.
|
||||
item7:
|
||||
question: Wat doe ik als ik een nieuwe telefoon koop?
|
||||
answer: Op een nieuwe telefoon kun je de IRMA app opnieuw installeren, een nieuw
|
||||
account openen, en je kenmerken opnieuw ophalen. Er is op dit moment geen mogelijkheid
|
||||
om je kenmerken van je oude telefoon over te zetten naar je nieuwe telefoon.
|
||||
Daar wordt wel aan gewerkt. Gelukkig is het niet heel moeilijk om je gegevens
|
||||
opnieuw op te halen. Het kost wel een klein beetje tijd.
|
||||
item8:
|
||||
question: Wat doe ik als ik mijn telefoon verlies?
|
||||
answer: <span>De IRMA app op je telefoon is beschermd met een PIN, net als je
|
||||
app voor internetbankieren. Wanneer je je telefoon verliest kan een ander dus
|
||||
geen gebruik maken van je IRMA app en zich als jou voordoen. Als je dus een
|
||||
goede PIN gekozen hebt, hoef je je geen zorgen te maken. <br><br> Je kunt jezelf
|
||||
echter nog beter beschermen<span>:</span> bij het openen van een IRMA account heb je de
|
||||
optie gekregen om een email adres toe te voegen. Als je dat gedaan hebt, kun
|
||||
je via de <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">MijnIRMA</a>
|
||||
omgeving je IRMA account blokkeren. Dan kan er echt helemaal niks meer met de
|
||||
IRMA app op je oude, verloren telefoon gebeuren. Als je nog geen email adres
|
||||
toegevoegd hebt in MijnIRMA kun je dat alsnog doen, door <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">daar</a>
|
||||
met IRMA zelf in te loggen. Het is verstandig dat te doen.
|
||||
item9:
|
||||
question: Ik heb een vraag over IRMA; waar kan ik terecht?
|
||||
answer: Als je een vraag hebt over inloggen met IRMA bij webwinkel De Hippe Kip,
|
||||
dan kun je die vraag het beste stellen aan De Hippe Kip zelf. Ook als die website
|
||||
je vraagt IRMA te installeren en dat lukt niet, dan kun je het beste daar met
|
||||
je vragen naar toegaan. Meestal staat er op zulke webpagina's informatie over
|
||||
hoe je vragen kunt stellen en contact op kunt nemen. <br><br> Als je tenslotte
|
||||
een vraag hebt over het systeem IRMA zelf, dan kun je een berichtje sturen naar
|
||||
het adres <a href="mailto:irma@privacybydesign.foundation">irma@privacybydesign.foundation</a>.
|
||||
item10:
|
||||
question: Wat gebeurt er met mijn gegevens als ik met IRMA inlog?
|
||||
answer: Als je inlogt bij een website maakt je telefoon rechtstreeks contact met
|
||||
de website. Nadat jij toestemming gegeven hebt worden de gevraagde kenmerken
|
||||
vanuit jouw telefoon direct aan de website getoond. Daar zit niemand tussen.
|
||||
De IRMA organistie kan jouw kenmerken niet zien — omdat ze alleen op jouw telefoon
|
||||
staan — en kan ook niet zien welke attributen je aan welke website vrijgeeft.
|
||||
item11:
|
||||
question: Wie zit er achter IRMA?
|
||||
answer: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Deze stichting is in 2016 voortgekomen uit de <em>Digital Security</em>
|
||||
onderzoeksgroep van de Radboud Universiteit in Nijmegen. De stichting is onafhankelijk
|
||||
en heeft geen doelstelling om winst te maken. Sinds 2019 heeft de stichting
|
||||
Privacy by Design een strategische samenwerking met de stichting Internet Domeinregistratie
|
||||
Nederland (<a href="https://www.sidn.nl/" target="_blank">SIDN</a>). Mede door deze samenwerking wordt de stabiliteit
|
||||
en continuiteit van IRMA gegarandeerd.
|
||||
item12:
|
||||
question: Hoezo kan IRMA gratis zijn?
|
||||
answer: RMA is gratis voor gebruikers. IRMA is ook gratis voor websites die
|
||||
gebruikers via IRMA laten inloggen<span>:</span> iedereen kan kenmerken uit een IRMA app
|
||||
opvragen en bekijken, als de gebruiker toestemming geeft. Maar het is <em>niet
|
||||
gratis</em> om kenmerken uit te geven. Niet iedereen kan zomaar kenmerken in
|
||||
IRMA apps zetten; dat zou snel een rommeltje worden.<br><br> Voor die uitgifte
|
||||
moet betaald worden en moet een contract getekend worden, waarbij de uitgever
|
||||
zich ertoe verplicht om alleen juiste gegevens in de IRMA app van de juiste
|
||||
persoon te zetten. <br><br>Ook kan een contract afgesloten worden voor support garanties (een "SLA") via SIDN. Omdat IRMA een decentraal systeem is, waarbij gegevens alleen
|
||||
op telefoons staan en rechtstreeks met websites uitgewisseld worden, heeft de
|
||||
organisatie achter IRMA relatief weinig te doen. Omdat die organisatie bovendien
|
||||
geen winstoogmerk heeft is IRMA als geheel een goedkoop systeem.
|
||||
item13:
|
||||
question: IRMA is <em>open source</em>; wat betekent dat?
|
||||
answer: De software van IRMA is open source. Dat betekent dat de manier waarop IRMA werkt door iedereen bekeken kan worden<span>:</span> de software
|
||||
staat gewoon online, namelijk op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>. Natuurlijk moet je wel wat van
|
||||
computerprogramma's weten om dit echt te kunnen begrijpen, maar het principe is belangrijk<span>:</span> IRMA kent geen geheimen en werkt op een
|
||||
transparante manier. Dit draagt bij aan het vertrouwen in IRMA. Er zijn daarom met IRMA geen discussies over verborgen achterdoortjes van
|
||||
leveranciers met een eigen agenda, zoals bijvoorbeeld met 5G telecommunicatie. De stichting Privacy by Design achter IRMA vindt dat
|
||||
alle software die gebruikt wordt in infrastructuur met een publieke rol open source moet zijn.
|
||||
item14:
|
||||
question: Ik wil meer informatie over IRMA; waar kan ik terecht?
|
||||
answer: Het grotere verhaal achter IRMA staat beschreven in een
|
||||
<a href="https://privacybydesign.foundation/pdf/IRMA-manifest-2019.pdf" target="_blank">IRMA Manifest</a>.
|
||||
<br><br>Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de
|
||||
stichting Privacy by Design op een eigen
|
||||
<a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">pagina</a>.
|
||||
Mensen die de software van IRMA willen bekijken kunnen terecht op een technische
|
||||
<a href="https://irma.app/docs" target="_blank">documentatie</a> pagina en op
|
||||
<a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
|
||||
footer:
|
||||
id: links
|
||||
irma_alt: IRMA logo
|
||||
irma_headline: Privacy by Design Foundation
|
||||
irma_content: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de stichting Privacy by Design op
|
||||
haar eigen <a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">website</a>.
|
||||
doc_headline: Docs
|
||||
doc_content: Ontwikkelaars die met IRMA willen werken kunnen terecht op de technische
|
||||
<a href="https://irma.app/docs" target="_blank">documentatie</a>.
|
||||
github_headline: GitHub
|
||||
github_content: Mensen die de software van IRMA willen bekijken of willen bijdragen aan IRMA kunnen
|
||||
terecht op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
232
_i18n/en.yml
Normal file
232
_i18n/en.yml
Normal file
@@ -0,0 +1,232 @@
|
||||
nav:
|
||||
home_link: "/"
|
||||
home_text: IRMA
|
||||
usage_link: "#gebruik"
|
||||
usage_text: Gebruik
|
||||
explanation_link: "#uitleg"
|
||||
explanation_text: Uitleg
|
||||
faq_link: "#faqs"
|
||||
faq_text: FAQs
|
||||
links_link: "#links"
|
||||
links_text: Links
|
||||
|
||||
banner:
|
||||
headline: Kies IRMA. <br><strong>Zet een digitaal paspoort op je eigen mobiel.</strong>
|
||||
ios: IRMA voor iOS
|
||||
ios_url: https://apps.apple.com/nl/app/irma-authenticatie/id1294092994
|
||||
android: IRMA vor Android
|
||||
android_url: https://play.google.com/store/apps/details?id=org.irmacard.cardemu
|
||||
product_shot_src: "/uploads/non-free/screenshot.png"
|
||||
product_shot_alt: Product Shot
|
||||
|
||||
usage:
|
||||
id: gebruik
|
||||
login_headline: Inloggen
|
||||
login_alt: Login
|
||||
login_content: Met IRMA kun je makkelijk inloggen en jezelf bekend maken. Je laat alleen
|
||||
die kenmerken van jezelf zien die relevant zijn. Bijvoorbeeld om een bepaalde
|
||||
film te kijken, bewijs je dat je ouder dan 16 bent, en verder niets.
|
||||
sign_headline: Ondertekenen
|
||||
sign_alt: Ondertekenen
|
||||
sign_content: Ook kun je met IRMA documenten digitaal ondertekenen. Je gebruikt alleen
|
||||
relevante kenmerken van jezelf, in een soort digitaal stempel. Zo kun je met
|
||||
IRMA ondertekenen als arts, als burger of vanuit een andere rol.
|
||||
trust_headline: Vertrouwen
|
||||
trust_alt: Vertrouwen
|
||||
trust_content: Gegevens in een IRMA app komen uit betrouwbare bronnen en zijn cryptografisch
|
||||
beschermd. De kenmerken die jij met IRMA bekend maakt zijn daarmee echt, en
|
||||
echt van jou.
|
||||
|
||||
slogan:
|
||||
id: start
|
||||
heading: Met IRMA heb je <strong>in de hand</strong> wat er met jouw gegevens gebeurt.
|
||||
|
||||
explanation:
|
||||
id: uitleg
|
||||
getstarted_headline: Zelf aan de slag met IRMA
|
||||
getstarted_alt: Zelf aan de slag met IRMA
|
||||
getstarted_content: Iedereen kan de IRMA app gratis downloaden (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
en vullen met eigen gegevens. Bijvoorbeeld bij de gemeente kun je inlogggen
|
||||
en basisgegevens (naam, adres, etc.) over jezelf ophalen. Maar ook kun je jouw
|
||||
emailadres of 06-nummer in je IRMA app opslaan. Met zulke gegevens kan iedereen
|
||||
zichzelf online bekend maken.
|
||||
tool_headline: IRMA is een middel, geen doel op zich
|
||||
tool_alt: IRMA is een middel, geen doel op zich
|
||||
tool_content: Voor iedereen is het gebruik van allerlei wachtwoorden veel gedoe. Toch
|
||||
moeten websites weten met wie ze te maken hebben. IRMA geeft zekerheid. Met
|
||||
IRMA kun je op een makkelijke en veilige manier online doen wat je wil doen.
|
||||
Bijvoorbeeld een film kijken of iets (ver)kopen.
|
||||
usecases_headline: Wat kan ik er al mee?
|
||||
usecases_alt: Wat kan ik er al mee?
|
||||
usecases_content: Er komen steeds meer websites waar je met IRMA in kan loggen. Artsen,
|
||||
bijvoorbeeld, kunnen via IRMA bij medische dossiers op de website <a href="https://www.helder.health"
|
||||
target="_blank">helder</a>. Vooral bij gemeenten en in de zorg wordt aan verder
|
||||
gebruik van IRMA gewerkt. Om een indruk te krijgen van de mogelijkheden kun
|
||||
je zelf een aantal IRMA <a href="https://privacybydesign.foundation/demo/" target="_blank">demo's</a>
|
||||
uitproberen.
|
||||
|
||||
faq:
|
||||
id: faqs
|
||||
headline: <span class="light">Veel gestelde vragen en <strong>antwoorden</strong>
|
||||
daarop<span>
|
||||
item1:
|
||||
question: Hoe moet ik met IRMA inloggen op een website?
|
||||
answer: Websites waar je met IRMA in kunt loggen hebben een knop daarvoor, waar
|
||||
bijvoorbeeld op staat <em>Log in met IRMA</em>. Als je de IRMA app nog niet
|
||||
op je telefoon hebt zul je die eerst moeten installeren en vullen met de kenmerken
|
||||
die je nodig hebt.<br><br> Als je de IRMA app al wel hebt, zijn er twee verschillende
|
||||
situaties<span>:</span><ul class="indent"><li> Als je de website bekijkt op
|
||||
je computer of laptop en je drukt op die login knop verschijnt er een QR code.
|
||||
Je opent dan de IRMA app op je telefoon met je PIN. Onderaan in de app zit een
|
||||
knopje waarmee je de QR code kunt scannen. In de app krijg je dan de vraag of
|
||||
je kenmerken waarom de website vraagt wil vrijgeven. Als je op OK klikt, ben
|
||||
je ingelogd.</li><li> Als je de website op je telefoon bekijkt wordt na het
|
||||
indrukken van de login knop automatisch overgeschakeld naar de IRMA app. Daarin
|
||||
verschijnt de vraag of je de gevraagde kenmerken wil vrijgeven. Nadat je op
|
||||
OK hebt gedrukt ga je terug naar de website en ben je ingelogd. Als het goed
|
||||
is gaat je telefoon automatisch terug, maar soms moet je dat met de hand doen.</li></ul><br>Het
|
||||
kan zijn dat de website vraagt om kenmerken die je nog niet in je IRMA app geladen
|
||||
hebt. Dan moet je dat eerst nog even doen voordat je in kunt loggen.
|
||||
item2:
|
||||
question: Welke kenmerken kan ik nu (en later) in de IRMA app zetten?
|
||||
answer: Vanuit gemeenten kun je zelf kenmerken zoals je naam, adres, geboortedatum,
|
||||
BSN in je IRMA app zetten, maar ook of je bijvoorbeeld ouder dan 18 of 65 bent.
|
||||
Daarnaast kun je een of meer email adressen en mobiele telefoonnummers, na controle, toevoegen.
|
||||
Studenten en medewerkers in het (hoger) onderwijs kunnen ook hun registratie
|
||||
toevoegen. Medewerkers in de zorg kunnen zogenaamde BIG en AGB registraties
|
||||
toevoegen. Ook vanuit sociale media (LinkedIn, Twitter, Facebook) kun je gegevens
|
||||
laden. Hiermee kun je in veel situaties voldoende van jezelf bekend maken.<br><br>Naar
|
||||
verwachting zullen de komende tijd nog veel andere bronnen van persoonsgegevens
|
||||
aan IRMA toegevoegd worden, voor gebruikers in het algemeen en ook voor speciale
|
||||
(beroeps)groepen.
|
||||
item3:
|
||||
question: Kan ik IRMA op een tweede telefoon of tablet zetten?
|
||||
answer: Jazeker, op ieder (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
apparaat kun je een apart IRMA account openen en vullen met persoonskenmerken.
|
||||
Het is misschien wel verstandig omdat te doen, want als je dan het ene apparaat
|
||||
kwijt bent, kun je nog met een ander inloggen.
|
||||
item4:
|
||||
question: Hoezo is IRMA privacy-vriendelijk en veilig?
|
||||
answer: 'Persoonskenmerken van IRMA staan alleen in de IRMA app en zijn beschermd
|
||||
met een PIN. Je laat alleen die gegevens van jezelf zien die in een bepaalde
|
||||
situatie relevant en nodig zijn. Bijvoorbeeld, om korting te krijgen moet je
|
||||
soms bewijzen dat je student bent; dat kun je met IRMA doen zonder je naam of
|
||||
studie te tonen.<br><br> Jouw kenmerken in de IRMA app zijn digitaal ondertekend
|
||||
door de bron waar de gegevens vandaan komen. Daardoor kan een website of winkel,
|
||||
waar je jezelf bekend maakt, cryptografisch controleren dat de gegevens echt
|
||||
zijn. Deze uitwisseling van persoonskenmerken vindt rechtstreeks plaats, tussen
|
||||
je telefoon en deze website. Niemand anders kan zien dat jij je daar bekendmaakt.
|
||||
Dit is heel anders dan bij een (privacy-onvriendelijke) login via Facebook,
|
||||
bijvoorbeeld bij een online winkel. Dan vindt de uitwisseling anders plaats:
|
||||
je moet eerst bij Facebook inloggen, waarna Facebook aan de webwinkel vertelt
|
||||
wie je bent. Facebook kan zo profielen opbouwen van wie waar inlogt.'
|
||||
item5:
|
||||
question: Waar staan mijn IRMA gegevens opgeslagen?
|
||||
answer: De kenmerken van jezelf die je in de IRMA app verzamelt staan alleen in
|
||||
de app zelf en worden door IRMA nergens anders opgeslagen. Ze staan dus niet
|
||||
ook nog ergens in een cloud. Als je jouw kenmerken uit de app verwijdert zijn
|
||||
ze ook echt weg. Jij geeft zelf steeds expliciet toestemming voordat deze kenmerken
|
||||
vanuit de IRMA app aan een website doorgegeven worden.
|
||||
item6:
|
||||
question: Hoe lang zijn kenmerken in IRMA geldig en hoe kan ik ze verversen?
|
||||
answer: In de IRMA app kun je op het kaartje met je kenmerken zien hoe lang ze
|
||||
geldig zijn. Die geldigheidsduur hangt af van het soort gegevens, namelijk van
|
||||
hoe veranderlijk ze zijn. Je naam en geboortedatum zijn vijf jaar geldig, maar
|
||||
je adres slechts een jaar. De uitgever (bron) van kenmerken bepaalt de geldigheidsduur.
|
||||
De geldigheid van IRMA kenmerken kan dus verlopen. De app geeft je daar een
|
||||
waarschuwing voor. Je kunt je kenmerken altijd, ook zonder waarschuwing, verversen
|
||||
door ze opnieuw op te halen bij de bron, net zo als je de eerste keer doet.
|
||||
Bijvoorbeeld, na je 18e verjaardag kun je opnieuw je gegevens bij je gemeente
|
||||
ophalen en heb je als nieuw kenmerk dat je ouder dan 18 bent.
|
||||
item7:
|
||||
question: Wat doe ik als ik een nieuwe telefoon koop?
|
||||
answer: Op een nieuwe telefoon kun je de IRMA app opnieuw installeren, een nieuw
|
||||
account openen, en je kenmerken opnieuw ophalen. Er is op dit moment geen mogelijkheid
|
||||
om je kenmerken van je oude telefoon over te zetten naar je nieuwe telefoon.
|
||||
Daar wordt wel aan gewerkt. Gelukkig is het niet heel moeilijk om je gegevens
|
||||
opnieuw op te halen. Het kost wel een klein beetje tijd.
|
||||
item8:
|
||||
question: Wat doe ik als ik mijn telefoon verlies?
|
||||
answer: <span>De IRMA app op je telefoon is beschermd met een PIN, net als je
|
||||
app voor internetbankieren. Wanneer je je telefoon verliest kan een ander dus
|
||||
geen gebruik maken van je IRMA app en zich als jou voordoen. Als je dus een
|
||||
goede PIN gekozen hebt, hoef je je geen zorgen te maken. <br><br> Je kunt jezelf
|
||||
echter nog beter beschermen<span>:</span> bij het openen van een IRMA account heb je de
|
||||
optie gekregen om een email adres toe te voegen. Als je dat gedaan hebt, kun
|
||||
je via de <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">MijnIRMA</a>
|
||||
omgeving je IRMA account blokkeren. Dan kan er echt helemaal niks meer met de
|
||||
IRMA app op je oude, verloren telefoon gebeuren. Als je nog geen email adres
|
||||
toegevoegd hebt in MijnIRMA kun je dat alsnog doen, door <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">daar</a>
|
||||
met IRMA zelf in te loggen. Het is verstandig dat te doen.
|
||||
item9:
|
||||
question: Ik heb een vraag over IRMA; waar kan ik terecht?
|
||||
answer: Als je een vraag hebt over inloggen met IRMA bij webwinkel De Hippe Kip,
|
||||
dan kun je die vraag het beste stellen aan De Hippe Kip zelf. Ook als die website
|
||||
je vraagt IRMA te installeren en dat lukt niet, dan kun je het beste daar met
|
||||
je vragen naar toegaan. Meestal staat er op zulke webpagina's informatie over
|
||||
hoe je vragen kunt stellen en contact op kunt nemen. <br><br> Als je tenslotte
|
||||
een vraag hebt over het systeem IRMA zelf, dan kun je een berichtje sturen naar
|
||||
het adres <a href="mailto:irma@privacybydesign.foundation">irma@privacybydesign.foundation</a>.
|
||||
item10:
|
||||
question: Wat gebeurt er met mijn gegevens als ik met IRMA inlog?
|
||||
answer: Als je inlogt bij een website maakt je telefoon rechtstreeks contact met
|
||||
de website. Nadat jij toestemming gegeven hebt worden de gevraagde kenmerken
|
||||
vanuit jouw telefoon direct aan de website getoond. Daar zit niemand tussen.
|
||||
De IRMA organistie kan jouw kenmerken niet zien — omdat ze alleen op jouw telefoon
|
||||
staan — en kan ook niet zien welke attributen je aan welke website vrijgeeft.
|
||||
item11:
|
||||
question: Wie zit er achter IRMA?
|
||||
answer: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Deze stichting is in 2016 voortgekomen uit de <em>Digital Security</em>
|
||||
onderzoeksgroep van de Radboud Universiteit in Nijmegen. De stichting is onafhankelijk
|
||||
en heeft geen doelstelling om winst te maken. Sinds 2019 heeft de stichting
|
||||
Privacy by Design een strategische samenwerking met de stichting Internet Domeinregistratie
|
||||
Nederland (<a href="https://www.sidn.nl/" target="_blank">SIDN</a>). Mede door deze samenwerking wordt de stabiliteit
|
||||
en continuiteit van IRMA gegarandeerd.
|
||||
item12:
|
||||
question: Hoezo kan IRMA gratis zijn?
|
||||
answer: RMA is gratis voor gebruikers. IRMA is ook gratis voor websites die
|
||||
gebruikers via IRMA laten inloggen<span>:</span> iedereen kan kenmerken uit een IRMA app
|
||||
opvragen en bekijken, als de gebruiker toestemming geeft. Maar het is <em>niet
|
||||
gratis</em> om kenmerken uit te geven. Niet iedereen kan zomaar kenmerken in
|
||||
IRMA apps zetten; dat zou snel een rommeltje worden.<br><br> Voor die uitgifte
|
||||
moet betaald worden en moet een contract getekend worden, waarbij de uitgever
|
||||
zich ertoe verplicht om alleen juiste gegevens in de IRMA app van de juiste
|
||||
persoon te zetten. <br><br>Ook kan een contract afgesloten worden voor support garanties (een "SLA") via SIDN. Omdat IRMA een decentraal systeem is, waarbij gegevens alleen
|
||||
op telefoons staan en rechtstreeks met websites uitgewisseld worden, heeft de
|
||||
organisatie achter IRMA relatief weinig te doen. Omdat die organisatie bovendien
|
||||
geen winstoogmerk heeft is IRMA als geheel een goedkoop systeem.
|
||||
item13:
|
||||
question: IRMA is <em>open source</em>; wat betekent dat?
|
||||
answer: De software van IRMA is open source. Dat betekent dat de manier waarop IRMA werkt door iedereen bekeken kan worden<span>:</span> de software
|
||||
staat gewoon online, namelijk op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>. Natuurlijk moet je wel wat van
|
||||
computerprogramma's weten om dit echt te kunnen begrijpen, maar het principe is belangrijk<span>:</span> IRMA kent geen geheimen en werkt op een
|
||||
transparante manier. Dit draagt bij aan het vertrouwen in IRMA. Er zijn daarom met IRMA geen discussies over verborgen achterdoortjes van
|
||||
leveranciers met een eigen agenda, zoals bijvoorbeeld met 5G telecommunicatie. De stichting Privacy by Design achter IRMA vindt dat
|
||||
alle software die gebruikt wordt in infrastructuur met een publieke rol open source moet zijn.
|
||||
item14:
|
||||
question: Ik wil meer informatie over IRMA; waar kan ik terecht?
|
||||
answer: Het grotere verhaal achter IRMA staat beschreven in een
|
||||
<a href="https://privacybydesign.foundation/pdf/IRMA-manifest-2019.pdf" target="_blank">IRMA Manifest</a>.
|
||||
<br><br>Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de
|
||||
stichting Privacy by Design op een eigen
|
||||
<a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">pagina</a>.
|
||||
Mensen die de software van IRMA willen bekijken kunnen terecht op een technische
|
||||
<a href="https://irma.app/docs" target="_blank">documentatie</a> pagina en op
|
||||
<a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
|
||||
footer:
|
||||
id: links
|
||||
irma_alt: IRMA logo
|
||||
irma_headline: Privacy by Design Foundation
|
||||
irma_content: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de stichting Privacy by Design op
|
||||
haar eigen <a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">website</a>.
|
||||
doc_headline: Docs
|
||||
doc_content: Ontwikkelaars die met IRMA willen werken kunnen terecht op de technische
|
||||
<a href="https://irma.app/docs" target="_blank">documentatie</a>.
|
||||
github_headline: GitHub
|
||||
github_content: Mensen die de software van IRMA willen bekijken of willen bijdragen aan IRMA kunnen
|
||||
terecht op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
232
_i18n/nl.yml
Normal file
232
_i18n/nl.yml
Normal file
@@ -0,0 +1,232 @@
|
||||
nav:
|
||||
home_link: "/"
|
||||
home_text: IRMA
|
||||
usage_link: "#gebruik"
|
||||
usage_text: Gebruik
|
||||
explanation_link: "#uitleg"
|
||||
explanation_text: Uitleg
|
||||
faq_link: "#faqs"
|
||||
faq_text: FAQs
|
||||
links_link: "#links"
|
||||
links_text: Links
|
||||
|
||||
banner:
|
||||
headline: Kies IRMA. <br><strong>Zet een digitaal paspoort op je eigen mobiel.</strong>
|
||||
ios: IRMA voor iOS
|
||||
ios_url: https://apps.apple.com/nl/app/irma-authenticatie/id1294092994
|
||||
android: IRMA vor Android
|
||||
android_url: https://play.google.com/store/apps/details?id=org.irmacard.cardemu
|
||||
product_shot_src: "/uploads/non-free/screenshot.png"
|
||||
product_shot_alt: Product Shot
|
||||
|
||||
usage:
|
||||
id: gebruik
|
||||
login_headline: Inloggen
|
||||
login_alt: Login
|
||||
login_content: Met IRMA kun je makkelijk inloggen en jezelf bekend maken. Je laat alleen
|
||||
die kenmerken van jezelf zien die relevant zijn. Bijvoorbeeld om een bepaalde
|
||||
film te kijken, bewijs je dat je ouder dan 16 bent, en verder niets.
|
||||
sign_headline: Ondertekenen
|
||||
sign_alt: Ondertekenen
|
||||
sign_content: Ook kun je met IRMA documenten digitaal ondertekenen. Je gebruikt alleen
|
||||
relevante kenmerken van jezelf, in een soort digitaal stempel. Zo kun je met
|
||||
IRMA ondertekenen als arts, als burger of vanuit een andere rol.
|
||||
trust_headline: Vertrouwen
|
||||
trust_alt: Vertrouwen
|
||||
trust_content: Gegevens in een IRMA app komen uit betrouwbare bronnen en zijn cryptografisch
|
||||
beschermd. De kenmerken die jij met IRMA bekend maakt zijn daarmee echt, en
|
||||
echt van jou.
|
||||
|
||||
slogan:
|
||||
id: start
|
||||
heading: Met IRMA heb je <strong>in de hand</strong> wat er met jouw gegevens gebeurt.
|
||||
|
||||
explanation:
|
||||
id: uitleg
|
||||
getstarted_headline: Zelf aan de slag met IRMA
|
||||
getstarted_alt: Zelf aan de slag met IRMA
|
||||
getstarted_content: Iedereen kan de IRMA app gratis downloaden (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
en vullen met eigen gegevens. Bijvoorbeeld bij de gemeente kun je inlogggen
|
||||
en basisgegevens (naam, adres, etc.) over jezelf ophalen. Maar ook kun je jouw
|
||||
emailadres of 06-nummer in je IRMA app opslaan. Met zulke gegevens kan iedereen
|
||||
zichzelf online bekend maken.
|
||||
tool_headline: IRMA is een middel, geen doel op zich
|
||||
tool_alt: IRMA is een middel, geen doel op zich
|
||||
tool_content: Voor iedereen is het gebruik van allerlei wachtwoorden veel gedoe. Toch
|
||||
moeten websites weten met wie ze te maken hebben. IRMA geeft zekerheid. Met
|
||||
IRMA kun je op een makkelijke en veilige manier online doen wat je wil doen.
|
||||
Bijvoorbeeld een film kijken of iets (ver)kopen.
|
||||
usecases_headline: Wat kan ik er al mee?
|
||||
usecases_alt: Wat kan ik er al mee?
|
||||
usecases_content: Er komen steeds meer websites waar je met IRMA in kan loggen. Artsen,
|
||||
bijvoorbeeld, kunnen via IRMA bij medische dossiers op de website <a href="https://www.helder.health"
|
||||
target="_blank">helder</a>. Vooral bij gemeenten en in de zorg wordt aan verder
|
||||
gebruik van IRMA gewerkt. Om een indruk te krijgen van de mogelijkheden kun
|
||||
je zelf een aantal IRMA <a href="https://privacybydesign.foundation/demo/" target="_blank">demo's</a>
|
||||
uitproberen.
|
||||
|
||||
faq:
|
||||
id: faqs
|
||||
headline: <span class="light">Veel gestelde vragen en <strong>antwoorden</strong>
|
||||
daarop<span>
|
||||
item1:
|
||||
question: Hoe moet ik met IRMA inloggen op een website?
|
||||
answer: Websites waar je met IRMA in kunt loggen hebben een knop daarvoor, waar
|
||||
bijvoorbeeld op staat <em>Log in met IRMA</em>. Als je de IRMA app nog niet
|
||||
op je telefoon hebt zul je die eerst moeten installeren en vullen met de kenmerken
|
||||
die je nodig hebt.<br><br> Als je de IRMA app al wel hebt, zijn er twee verschillende
|
||||
situaties<span>:</span><ul class="indent"><li> Als je de website bekijkt op
|
||||
je computer of laptop en je drukt op die login knop verschijnt er een QR code.
|
||||
Je opent dan de IRMA app op je telefoon met je PIN. Onderaan in de app zit een
|
||||
knopje waarmee je de QR code kunt scannen. In de app krijg je dan de vraag of
|
||||
je kenmerken waarom de website vraagt wil vrijgeven. Als je op OK klikt, ben
|
||||
je ingelogd.</li><li> Als je de website op je telefoon bekijkt wordt na het
|
||||
indrukken van de login knop automatisch overgeschakeld naar de IRMA app. Daarin
|
||||
verschijnt de vraag of je de gevraagde kenmerken wil vrijgeven. Nadat je op
|
||||
OK hebt gedrukt ga je terug naar de website en ben je ingelogd. Als het goed
|
||||
is gaat je telefoon automatisch terug, maar soms moet je dat met de hand doen.</li></ul><br>Het
|
||||
kan zijn dat de website vraagt om kenmerken die je nog niet in je IRMA app geladen
|
||||
hebt. Dan moet je dat eerst nog even doen voordat je in kunt loggen.
|
||||
item2:
|
||||
question: Welke kenmerken kan ik nu (en later) in de IRMA app zetten?
|
||||
answer: Vanuit gemeenten kun je zelf kenmerken zoals je naam, adres, geboortedatum,
|
||||
BSN in je IRMA app zetten, maar ook of je bijvoorbeeld ouder dan 18 of 65 bent.
|
||||
Daarnaast kun je een of meer email adressen en mobiele telefoonnummers, na controle, toevoegen.
|
||||
Studenten en medewerkers in het (hoger) onderwijs kunnen ook hun registratie
|
||||
toevoegen. Medewerkers in de zorg kunnen zogenaamde BIG en AGB registraties
|
||||
toevoegen. Ook vanuit sociale media (LinkedIn, Twitter, Facebook) kun je gegevens
|
||||
laden. Hiermee kun je in veel situaties voldoende van jezelf bekend maken.<br><br>Naar
|
||||
verwachting zullen de komende tijd nog veel andere bronnen van persoonsgegevens
|
||||
aan IRMA toegevoegd worden, voor gebruikers in het algemeen en ook voor speciale
|
||||
(beroeps)groepen.
|
||||
item3:
|
||||
question: Kan ik IRMA op een tweede telefoon of tablet zetten?
|
||||
answer: Jazeker, op ieder (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
apparaat kun je een apart IRMA account openen en vullen met persoonskenmerken.
|
||||
Het is misschien wel verstandig omdat te doen, want als je dan het ene apparaat
|
||||
kwijt bent, kun je nog met een ander inloggen.
|
||||
item4:
|
||||
question: Hoezo is IRMA privacy-vriendelijk en veilig?
|
||||
answer: 'Persoonskenmerken van IRMA staan alleen in de IRMA app en zijn beschermd
|
||||
met een PIN. Je laat alleen die gegevens van jezelf zien die in een bepaalde
|
||||
situatie relevant en nodig zijn. Bijvoorbeeld, om korting te krijgen moet je
|
||||
soms bewijzen dat je student bent; dat kun je met IRMA doen zonder je naam of
|
||||
studie te tonen.<br><br> Jouw kenmerken in de IRMA app zijn digitaal ondertekend
|
||||
door de bron waar de gegevens vandaan komen. Daardoor kan een website of winkel,
|
||||
waar je jezelf bekend maakt, cryptografisch controleren dat de gegevens echt
|
||||
zijn. Deze uitwisseling van persoonskenmerken vindt rechtstreeks plaats, tussen
|
||||
je telefoon en deze website. Niemand anders kan zien dat jij je daar bekendmaakt.
|
||||
Dit is heel anders dan bij een (privacy-onvriendelijke) login via Facebook,
|
||||
bijvoorbeeld bij een online winkel. Dan vindt de uitwisseling anders plaats:
|
||||
je moet eerst bij Facebook inloggen, waarna Facebook aan de webwinkel vertelt
|
||||
wie je bent. Facebook kan zo profielen opbouwen van wie waar inlogt.'
|
||||
item5:
|
||||
question: Waar staan mijn IRMA gegevens opgeslagen?
|
||||
answer: De kenmerken van jezelf die je in de IRMA app verzamelt staan alleen in
|
||||
de app zelf en worden door IRMA nergens anders opgeslagen. Ze staan dus niet
|
||||
ook nog ergens in een cloud. Als je jouw kenmerken uit de app verwijdert zijn
|
||||
ze ook echt weg. Jij geeft zelf steeds expliciet toestemming voordat deze kenmerken
|
||||
vanuit de IRMA app aan een website doorgegeven worden.
|
||||
item6:
|
||||
question: Hoe lang zijn kenmerken in IRMA geldig en hoe kan ik ze verversen?
|
||||
answer: In de IRMA app kun je op het kaartje met je kenmerken zien hoe lang ze
|
||||
geldig zijn. Die geldigheidsduur hangt af van het soort gegevens, namelijk van
|
||||
hoe veranderlijk ze zijn. Je naam en geboortedatum zijn vijf jaar geldig, maar
|
||||
je adres slechts een jaar. De uitgever (bron) van kenmerken bepaalt de geldigheidsduur.
|
||||
De geldigheid van IRMA kenmerken kan dus verlopen. De app geeft je daar een
|
||||
waarschuwing voor. Je kunt je kenmerken altijd, ook zonder waarschuwing, verversen
|
||||
door ze opnieuw op te halen bij de bron, net zo als je de eerste keer doet.
|
||||
Bijvoorbeeld, na je 18e verjaardag kun je opnieuw je gegevens bij je gemeente
|
||||
ophalen en heb je als nieuw kenmerk dat je ouder dan 18 bent.
|
||||
item7:
|
||||
question: Wat doe ik als ik een nieuwe telefoon koop?
|
||||
answer: Op een nieuwe telefoon kun je de IRMA app opnieuw installeren, een nieuw
|
||||
account openen, en je kenmerken opnieuw ophalen. Er is op dit moment geen mogelijkheid
|
||||
om je kenmerken van je oude telefoon over te zetten naar je nieuwe telefoon.
|
||||
Daar wordt wel aan gewerkt. Gelukkig is het niet heel moeilijk om je gegevens
|
||||
opnieuw op te halen. Het kost wel een klein beetje tijd.
|
||||
item8:
|
||||
question: Wat doe ik als ik mijn telefoon verlies?
|
||||
answer: <span>De IRMA app op je telefoon is beschermd met een PIN, net als je
|
||||
app voor internetbankieren. Wanneer je je telefoon verliest kan een ander dus
|
||||
geen gebruik maken van je IRMA app en zich als jou voordoen. Als je dus een
|
||||
goede PIN gekozen hebt, hoef je je geen zorgen te maken. <br><br> Je kunt jezelf
|
||||
echter nog beter beschermen<span>:</span> bij het openen van een IRMA account heb je de
|
||||
optie gekregen om een email adres toe te voegen. Als je dat gedaan hebt, kun
|
||||
je via de <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">MijnIRMA</a>
|
||||
omgeving je IRMA account blokkeren. Dan kan er echt helemaal niks meer met de
|
||||
IRMA app op je oude, verloren telefoon gebeuren. Als je nog geen email adres
|
||||
toegevoegd hebt in MijnIRMA kun je dat alsnog doen, door <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">daar</a>
|
||||
met IRMA zelf in te loggen. Het is verstandig dat te doen.
|
||||
item9:
|
||||
question: Ik heb een vraag over IRMA; waar kan ik terecht?
|
||||
answer: Als je een vraag hebt over inloggen met IRMA bij webwinkel De Hippe Kip,
|
||||
dan kun je die vraag het beste stellen aan De Hippe Kip zelf. Ook als die website
|
||||
je vraagt IRMA te installeren en dat lukt niet, dan kun je het beste daar met
|
||||
je vragen naar toegaan. Meestal staat er op zulke webpagina's informatie over
|
||||
hoe je vragen kunt stellen en contact op kunt nemen. <br><br> Als je tenslotte
|
||||
een vraag hebt over het systeem IRMA zelf, dan kun je een berichtje sturen naar
|
||||
het adres <a href="mailto:irma@privacybydesign.foundation">irma@privacybydesign.foundation</a>.
|
||||
item10:
|
||||
question: Wat gebeurt er met mijn gegevens als ik met IRMA inlog?
|
||||
answer: Als je inlogt bij een website maakt je telefoon rechtstreeks contact met
|
||||
de website. Nadat jij toestemming gegeven hebt worden de gevraagde kenmerken
|
||||
vanuit jouw telefoon direct aan de website getoond. Daar zit niemand tussen.
|
||||
De IRMA organistie kan jouw kenmerken niet zien — omdat ze alleen op jouw telefoon
|
||||
staan — en kan ook niet zien welke attributen je aan welke website vrijgeeft.
|
||||
item11:
|
||||
question: Wie zit er achter IRMA?
|
||||
answer: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Deze stichting is in 2016 voortgekomen uit de <em>Digital Security</em>
|
||||
onderzoeksgroep van de Radboud Universiteit in Nijmegen. De stichting is onafhankelijk
|
||||
en heeft geen doelstelling om winst te maken. Sinds 2019 heeft de stichting
|
||||
Privacy by Design een strategische samenwerking met de stichting Internet Domeinregistratie
|
||||
Nederland (<a href="https://www.sidn.nl/" target="_blank">SIDN</a>). Mede door deze samenwerking wordt de stabiliteit
|
||||
en continuiteit van IRMA gegarandeerd.
|
||||
item12:
|
||||
question: Hoezo kan IRMA gratis zijn?
|
||||
answer: RMA is gratis voor gebruikers. IRMA is ook gratis voor websites die
|
||||
gebruikers via IRMA laten inloggen<span>:</span> iedereen kan kenmerken uit een IRMA app
|
||||
opvragen en bekijken, als de gebruiker toestemming geeft. Maar het is <em>niet
|
||||
gratis</em> om kenmerken uit te geven. Niet iedereen kan zomaar kenmerken in
|
||||
IRMA apps zetten; dat zou snel een rommeltje worden.<br><br> Voor die uitgifte
|
||||
moet betaald worden en moet een contract getekend worden, waarbij de uitgever
|
||||
zich ertoe verplicht om alleen juiste gegevens in de IRMA app van de juiste
|
||||
persoon te zetten. <br><br>Ook kan een contract afgesloten worden voor support garanties (een "SLA") via SIDN. Omdat IRMA een decentraal systeem is, waarbij gegevens alleen
|
||||
op telefoons staan en rechtstreeks met websites uitgewisseld worden, heeft de
|
||||
organisatie achter IRMA relatief weinig te doen. Omdat die organisatie bovendien
|
||||
geen winstoogmerk heeft is IRMA als geheel een goedkoop systeem.
|
||||
item13:
|
||||
question: IRMA is <em>open source</em>; wat betekent dat?
|
||||
answer: De software van IRMA is open source. Dat betekent dat de manier waarop IRMA werkt door iedereen bekeken kan worden<span>:</span> de software
|
||||
staat gewoon online, namelijk op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>. Natuurlijk moet je wel wat van
|
||||
computerprogramma's weten om dit echt te kunnen begrijpen, maar het principe is belangrijk<span>:</span> IRMA kent geen geheimen en werkt op een
|
||||
transparante manier. Dit draagt bij aan het vertrouwen in IRMA. Er zijn daarom met IRMA geen discussies over verborgen achterdoortjes van
|
||||
leveranciers met een eigen agenda, zoals bijvoorbeeld met 5G telecommunicatie. De stichting Privacy by Design achter IRMA vindt dat
|
||||
alle software die gebruikt wordt in infrastructuur met een publieke rol open source moet zijn.
|
||||
item14:
|
||||
question: Ik wil meer informatie over IRMA; waar kan ik terecht?
|
||||
answer: Het grotere verhaal achter IRMA staat beschreven in een
|
||||
<a href="https://privacybydesign.foundation/pdf/IRMA-manifest-2019.pdf" target="_blank">IRMA Manifest</a>.
|
||||
<br><br>Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de
|
||||
stichting Privacy by Design op een eigen
|
||||
<a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">pagina</a>.
|
||||
Mensen die de software van IRMA willen bekijken kunnen terecht op een technische
|
||||
<a href="https://irma.app/docs" target="_blank">documentatie</a> pagina en op
|
||||
<a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
|
||||
footer:
|
||||
id: links
|
||||
irma_alt: IRMA logo
|
||||
irma_headline: Privacy by Design Foundation
|
||||
irma_content: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de stichting Privacy by Design op
|
||||
haar eigen <a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">website</a>.
|
||||
doc_headline: Docs
|
||||
doc_content: Ontwikkelaars die met IRMA willen werken kunnen terecht op de technische
|
||||
<a href="https://irma.app/docs" target="_blank">documentatie</a>.
|
||||
github_headline: GitHub
|
||||
github_content: Mensen die de software van IRMA willen bekijken of willen bijdragen aan IRMA kunnen
|
||||
terecht op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
@@ -1,15 +0,0 @@
|
||||
<div class="block block-cta-bar">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="text">
|
||||
<p>{{ section.content }}</p>
|
||||
</div>
|
||||
<div class="cta">
|
||||
<form action="https://formspree.io/{{ section.email_recipient }}" method="POST">
|
||||
<input type="email" placeholder="your@email.com" class="inverted">
|
||||
<button type="submit" class="button primary inverted">Sign up</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,17 +0,0 @@
|
||||
{% if section.media_alignment and section.media_alignment == "Left" %}
|
||||
{% include block-feature-2.html %}
|
||||
{% else %}
|
||||
<section class="block block-feature-1">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column text">
|
||||
<h2><span class="light">{{ section.headline }}</span></h2>
|
||||
<p>{{ section.content }}</p>
|
||||
</div>
|
||||
<div class="column media">
|
||||
<img src="{{ section.media.image | relative_url }}" alt="{{ section.media.alt_text }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
@@ -1,13 +0,0 @@
|
||||
<section class="block block-feature-2">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column media">
|
||||
<img src="{{ section.media.image | relative_url }}" alt="{{ section.media.alt_text }}">
|
||||
</div>
|
||||
<div class="column text">
|
||||
<h2><span class="light">{{ section.headline }}</span></h2>
|
||||
<p>{{ section.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,5 +0,0 @@
|
||||
<footer class="block block-footer-1">
|
||||
<div class="container">
|
||||
<p>{{ section.content }}</p>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -1,23 +0,0 @@
|
||||
<header class="block block-header-1">
|
||||
|
||||
<div class="block-header-1--logo">
|
||||
<a href="{{ site.url | relative_url }}">
|
||||
<img src="{{ section.logo | relative_url }}" alt="{{ site.title }}">
|
||||
</a>
|
||||
</div>
|
||||
<nav class="block-header-1--nav" id="myTopnav">
|
||||
<ul>
|
||||
{% for nav_item in section.navigation %}
|
||||
<li class="nav-item {% if page.url == nav_item.link %}active{% endif %}"><a
|
||||
href="{{ nav_item.link }}">{{ nav_item.link_text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<select>
|
||||
<option value="" selected="selected">Select</option>
|
||||
{% for nav_item in section.navigation %}
|
||||
<option value="{{ nav_item.link }}">{{ nav_item.link_text }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
@@ -1,18 +0,0 @@
|
||||
<header class="block block-header-2">
|
||||
|
||||
<div class="block-header-2--logo">
|
||||
<a href="{{ site.url | relative_url }}">
|
||||
<img src="{{ section.logo | relative_url }}" alt="{{ site.title }}">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<nav class="block-header-2--nav">
|
||||
<ul>
|
||||
{% for nav_item in section.navigation %}
|
||||
<li class="nav-item {% if page.url == nav_item.link %}active{% endif %}"><a href="{{ nav_item.link }}">{{ nav_item.link_text }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<a class="button primary small block-header-2--cta" href="{{ section.cta.url }}">{{ section.cta.button_text }}</a>
|
||||
</nav>
|
||||
|
||||
</header>
|
||||
@@ -1,9 +0,0 @@
|
||||
<header class="block block-header-3">
|
||||
|
||||
<div class="block-header-3--logo">
|
||||
<a href="{{ site.url | relative_url }}">
|
||||
<img src="{{ section.logo | relative_url }}" alt="{{ site.title }}">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</header>
|
||||
@@ -1,5 +0,0 @@
|
||||
<section class="block block-hero-1">
|
||||
<div class="container">
|
||||
<h1><span class="light">{{ section.heading }}</span></h1>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,20 +0,0 @@
|
||||
<section class="block block-hero-2"
|
||||
{% if section.background_image %}
|
||||
style="background-image: url('{{ section.background_image | relative_url }}')"
|
||||
{% endif %}>
|
||||
<div class="headspace"></div>
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column text">
|
||||
<h1><span class="light">{{ section.headline }}</span></h1>
|
||||
<p>{{ section.content }}</p>
|
||||
{% if section.cta and section.cta.enabled == true %}
|
||||
<a class="button primary inverted" href="{{ section.cta.url }}">{{ section.cta.button_text }}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="column media">
|
||||
<img src="{{ section.image.image | relative_url }}" alt="{{ section.image.alt_text }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,6 +0,0 @@
|
||||
<section class="block block-hero-1">
|
||||
<div class="container">
|
||||
<div class="destination" id="{{ section.id }}"></div>
|
||||
<h1><span class="black light">{{ section.heading }}</span></h1>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,13 +1,13 @@
|
||||
<section class="block block-faq-1">
|
||||
<div class="container">
|
||||
<div class="destination" id="{{ section.id }}"></div>
|
||||
<div class="destination" id="{% t section.id %}"></div>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<h2><span class="light center">{{ section.headline }}</span></h2>
|
||||
<h2><span class="light center">{% t section.headline %}</span></h2>
|
||||
{% for faq_item in section.faq_items %}
|
||||
<button class="collapsible">{{ faq_item.question }}</button>
|
||||
<button class="collapsible">{% t faq_item.question %}</button>
|
||||
<div class="content faq-item">
|
||||
<p>{{ faq_item.answer }}</p>
|
||||
<p>{% t faq_item.answer %}</p>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,25 +0,0 @@
|
||||
<section class="block block-footer-2">
|
||||
<div class="container">
|
||||
<div class="destination" id="{{ section.id }}"></div>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<img src="{{ section.image_1.image | relative_url }}" alt="{{ section.image_1.caption }}">
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{{ section.col_2.headline }}</h3>
|
||||
<br>
|
||||
<p>{{ section.col_2.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{{ section.col_3.headline }}</h3>
|
||||
<br>
|
||||
<p>{{ section.col_3.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{{ section.col_4.headline }}</h3>
|
||||
<br>
|
||||
<p>{{ section.col_4.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
40
_includes/block-irma-footer.html
Normal file
40
_includes/block-irma-footer.html
Normal file
@@ -0,0 +1,40 @@
|
||||
<section class="block block-footer-2">
|
||||
<div class="container">
|
||||
<div class="destination" id="{% t section.id %}"></div>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<img src="{{ section.image_1.image | prepend: site.baseurl_root }}" alt="{% t section.image_1.alt %}">
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{% t section.col_2.headline %}</h3>
|
||||
<br>
|
||||
<p>{% t section.col_2.content %}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{% t section.col_3.headline %}</h3>
|
||||
<br>
|
||||
<p>{% t section.col_3.content %}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{% t section.col_4.headline %}</h3>
|
||||
<br>
|
||||
<p>{% t section.col_4.content %}</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div id="language">
|
||||
<h4>Change language</h4>
|
||||
<ol>
|
||||
{% for lang in page.languages %}
|
||||
<li>
|
||||
<a {% if site.lang == lang %} id="selected-lang" {% endif %}
|
||||
href="{{ site.baseurl_root }}{{ page.url}}?lang={{ lang }}"
|
||||
>
|
||||
{{ lang }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,16 +1,13 @@
|
||||
<div class="topnav" id="myTopnav">
|
||||
<div class="block-header-1--logo">
|
||||
<a id="logo" href="{{ section.url | relative_url }}">
|
||||
<img src="{{ section.logo | relative_url }}" alt="{{ site.title }}">
|
||||
<a id="logo" href="{{ section.url | prepend: site.baseurl_root }}">
|
||||
<img src="{{ section.logo | prepend: site.baseurl_root }}" alt="{{ site.title }}">
|
||||
</a>
|
||||
</div>
|
||||
<div id="menu">
|
||||
{% for nav_item in section.navigation %}
|
||||
<a class="refs" href="{{ nav_item.link }}">{{ nav_item.link_text }}</a>
|
||||
<a class="refs" href="{% t nav_item.link %}">{% t nav_item.link_text %}</a>
|
||||
{% endfor %}
|
||||
<a id="toggle" href="javascript:void(0);" class="icon" onclick="myFunction()">
|
||||
<img id="hamburger" src="{{ section.menu | relative_url }}" alt="Menu">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
6
_includes/block-irma-hero-1.html
Normal file
6
_includes/block-irma-hero-1.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<section class="block block-hero-1">
|
||||
<div class="container">
|
||||
<div class="destination" id="{% t section.id %}"></div>
|
||||
<h1><span class="black light">{% t section.heading %}</span></h1>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,21 +1,21 @@
|
||||
<section class="block block-hero-2"
|
||||
{% if section.background_image %}
|
||||
style="background-image: url('{{ section.background_image | relative_url }}')"
|
||||
style="background-image: url('{{ section.background_image | prepend: site.baseurl_root }}')"
|
||||
{% endif %}>
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column text">
|
||||
<h1><span class="light">{{ section.headline }}</span></h1>
|
||||
<h1><span class="light">{% t section.headline %}</span></h1>
|
||||
<p>{{ section.content }}</p>
|
||||
{% if section.ctaiOS and section.ctaiOS.enabled == true %}
|
||||
<button class="button primary inverted" onclick="location.href='{{ section.ctaiOS.url }}'" type="button">{{ section.ctaiOS.button_text }}</button>
|
||||
<button class="button primary inverted" onclick="location.href='{% t section.ctaiOS.url %}'" type="button">{% t section.ctaiOS.button_text %}</button>
|
||||
{% endif %}
|
||||
{% if section.ctaAndroid and section.ctaAndroid.enabled == true %}
|
||||
<button class="button primary inverted" onclick="location.href='{{ section.ctaAndroid.url }}'" type="button">{{ section.ctaAndroid.button_text }}</button>
|
||||
<button class="button primary inverted" onclick="location.href='{% t section.ctaAndroid.url %}'" type="button">{% t section.ctaAndroid.button_text %}</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="column media">
|
||||
<img src="{{ section.image.image | relative_url }}" alt="{{ section.image.alt_text }}">
|
||||
<img src="{{site.baseurl_root}}{% t section.image.image %}" alt="{% t section.image.alt_text %}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,36 +0,0 @@
|
||||
<section class="block block-three-column-1">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_1.image | relative_url }}" alt="{{ section.image_1.caption }}">
|
||||
{% if section.image_1.caption %}
|
||||
<figcaption>{{ section.image_1.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_1.headline }}</h3>
|
||||
<p>{{ section.col_1.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_2.image | relative_url }}" alt="{{ section.image_2.caption }}">
|
||||
{% if section.image_1.caption %}
|
||||
<figcaption>{{ section.image_1.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_2.headline }}</h3>
|
||||
<p>{{ section.col_2.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_3.image | relative_url }}" alt="{{ section.image_3.caption }}">
|
||||
{% if section.image_1.caption %}
|
||||
<figcaption>{{ section.image_1.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_3.headline }}</h3>
|
||||
<p>{{ section.col_3.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
28
_includes/block-irma-three-column.html
Normal file
28
_includes/block-irma-three-column.html
Normal file
@@ -0,0 +1,28 @@
|
||||
<section class="block block-three-column-1">
|
||||
<div class="container">
|
||||
<div class="destination" id="{% t section.id %}"></div>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_1.image | prepend: site.baseurl_root }}" alt="{% t section.image_1.alt %}" style="width: 50%;">
|
||||
</figure>
|
||||
<h3>{% t section.col_1.headline %}</h3>
|
||||
<p>{% t section.col_1.content %}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_2.image | prepend: site.baseurl_root }}" alt="{% t section.image_2.alt %}" style="width: 50%;">
|
||||
</figure>
|
||||
<h3>{% t section.col_2.headline %}</h3>
|
||||
<p>{% t section.col_2.content %}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_3.image | prepend: site.baseurl_root }}" alt="{% t section.image_3.alt %}" style="width: 50%;">
|
||||
</figure>
|
||||
<h3>{% t section.col_3.headline %}</h3>
|
||||
<p>{% t section.col_3.content %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,10 +0,0 @@
|
||||
<section class="block block-media-1">
|
||||
<div class="container">
|
||||
<figure>
|
||||
<img src="{{ section.image | relative_url }}" alt="{{ section.caption }}">
|
||||
{% if section.caption %}
|
||||
<figcaption>{{ section.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,22 +0,0 @@
|
||||
<section class="block block-media-2">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_1.image | relative_url }}" alt="{{ section.image_1.caption }}">
|
||||
{% if section.image_1.caption %}
|
||||
<figcaption>{{ section.image_1.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_2.image | relative_url }}" alt="{{ section.image_2.caption }}">
|
||||
{% if section.image_2.caption %}
|
||||
<figcaption>{{ section.image_2.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,10 +0,0 @@
|
||||
<section class="block block-one-column-1">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<h3>{{ section.headline }}</h3>
|
||||
<p>{{ section.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,12 +0,0 @@
|
||||
<section class="block block-text-1">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column headline">
|
||||
<h3>{{ section.headline }}</h3>
|
||||
</div>
|
||||
<div class="column text">
|
||||
{{ section.content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,37 +0,0 @@
|
||||
<section class="block block-three-column-1">
|
||||
<div class="container">
|
||||
<div class="destination" id="{{ section.id }}"></div>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_1.image | relative_url }}" alt="{{ section.image_1.caption }}" style="width: 50%;">
|
||||
{% if section.image_1.caption %}
|
||||
<figcaption>{{ section.image_1.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_1.headline }}</h3>
|
||||
<p>{{ section.col_1.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_2.image | relative_url }}" alt="{{ section.image_2.caption }}" style="width: 50%;">
|
||||
{% if section.image_2.caption %}
|
||||
<figcaption>{{ section.image_2.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_2.headline }}</h3>
|
||||
<p>{{ section.col_2.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_3.image | relative_url }}" alt="{{ section.image_3.caption }}" style="width: 50%;">
|
||||
{% if section.image_3.caption %}
|
||||
<figcaption>{{ section.image_3.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_3.headline }}</h3>
|
||||
<p>{{ section.col_3.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,37 +0,0 @@
|
||||
<section class="block block-three-column-irma-1">
|
||||
<div class="container">
|
||||
<h1><span class="light">{{ section.heading }}</span></h1>
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_1.image | relative_url }}" alt="{{ section.image_1.caption }}">
|
||||
{% if section.image_1.caption %}
|
||||
<figcaption>{{ section.image_1.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_1.headline }}</h3>
|
||||
<p>{{ section.col_1.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_2.image | relative_url }}" alt="{{ section.image_2.caption }}">
|
||||
{% if section.image_2.caption %}
|
||||
<figcaption>{{ section.image_2.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_2.headline }}</h3>
|
||||
<p>{{ section.col_2.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img src="{{ section.image_3.image | relative_url }}" alt="{{ section.image_3.caption }}">
|
||||
{% if section.image_3.caption %}
|
||||
<figcaption>{{ section.image_3.caption }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
||||
<h3>{{ section.col_3.headline }}</h3>
|
||||
<p>{{ section.col_3.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,14 +0,0 @@
|
||||
<section class="block block-two-column-1">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column">
|
||||
<h3>{{ section.col_1.headline }}</h3>
|
||||
<p>{{ section.col_1.content }}</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>{{ section.col_2.headline }}</h3>
|
||||
<p>{{ section.col_2.content }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -5,13 +5,12 @@
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<base href="{{ site.baseurl }}">
|
||||
<title>{% if page.title %}{{ page.title }}{% endif %}</title>
|
||||
<meta name="author" content="{{ site.author }}">
|
||||
<meta name="description" content="{{ site.description }}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="/css/ubuild.css" />
|
||||
<link rel="stylesheet" href="/css/irma.css" />
|
||||
<link rel="stylesheet" href="{{ "/css/ubuild.css" | prepend: site.baseurl_root }}"/>
|
||||
<link rel="stylesheet" href="{{ "/css/irma.css" | prepend: site.baseurl_root }}"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@@ -1,5 +1,5 @@
|
||||
{% if include.id %}
|
||||
<svg{% if include.class %} class="{{ include.class }}"{% endif %}{% if include.width %} width="{{ include.width }}"{% endif %}{% if include.height %} height="{{ include.height }}"{% endif %}>
|
||||
<use xlink:href="{{ "svg/sprite.symbol.svg" | relative_url }}#{{ include.id }}" />
|
||||
<use xlink:href="{{ "/svg/sprite.symbol.svg" | prepend: site.baseurl_root }}#{{ include.id }}" />
|
||||
</svg>
|
||||
{% endif %}
|
||||
15
css/irma.css
15
css/irma.css
@@ -1,3 +1,18 @@
|
||||
/* Language elements */
|
||||
|
||||
#language {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
#language ol {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#language li {
|
||||
margin-right: 0.5em;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
/* Scrolling to elements*/
|
||||
|
||||
html {
|
||||
|
||||
290
index.md
290
index.md
@@ -1,249 +1,137 @@
|
||||
---
|
||||
languages:
|
||||
- nl
|
||||
- en
|
||||
- de
|
||||
layout: blocks
|
||||
title: IRMA
|
||||
lang: en
|
||||
lang-ref: index
|
||||
date: 2017-11-22T23:00:00.000+00:00
|
||||
page_sections:
|
||||
- template: navigation-header
|
||||
block: irma-header-1
|
||||
block: irma-header
|
||||
logo: "/uploads/non-free/irma_logo@1x.png"
|
||||
menu: "/uploads/non-free/navigation-menu.png"
|
||||
url: "/"
|
||||
navigation:
|
||||
- link: "/"
|
||||
link_text: IRMA
|
||||
- link: "#gebruik"
|
||||
link_text: Gebruik
|
||||
- link: "#uitleg"
|
||||
link_text: Uitleg
|
||||
- link: "#faqs"
|
||||
link_text: FAQs
|
||||
- link: "#links"
|
||||
link_text: Links
|
||||
- link: nav.home_link
|
||||
link_text: nav.home_text
|
||||
- link: nav.usage_link
|
||||
link_text: nav.usage_text
|
||||
- link: nav.explanation_link
|
||||
link_text: nav.explanation_text
|
||||
- link: nav.faq_link
|
||||
link_text: nav.faq_text
|
||||
- link: nav.links_link
|
||||
link_text: nav.links_text
|
||||
- template: irma-banner
|
||||
block: irma-2
|
||||
headline: Kies IRMA. <br><strong>Zet een digitaal paspoort op je eigen mobiel.</strong>
|
||||
block: irma-hero-2
|
||||
headline: banner.headline
|
||||
ctaiOS:
|
||||
enabled: true
|
||||
url: https://apps.apple.com/nl/app/irma-authenticatie/id1294092994
|
||||
button_text: IRMA voor iOS
|
||||
url: banner.ios_url
|
||||
button_text: banner.ios
|
||||
ctaAndroid:
|
||||
enabled: true
|
||||
url: https://play.google.com/store/apps/details?id=org.irmacard.cardemu
|
||||
button_text: IRMA voor Android
|
||||
url: banner.android_url
|
||||
button_text: banner.android
|
||||
image:
|
||||
image: "/uploads/non-free/screenshot.png"
|
||||
alt_text: Product Shot
|
||||
image: banner.product_shot_src
|
||||
alt_text: banner.product_shot_alt
|
||||
background_image: "/uploads/non-free/irma-2-bg.png"
|
||||
- template: 3-column-text
|
||||
block: three-column-1
|
||||
id: gebruik
|
||||
block: irma-three-column
|
||||
id: usage.id
|
||||
image_1:
|
||||
image: "/uploads/non-free/login.png"
|
||||
alt: usage.login_alt
|
||||
image_2:
|
||||
image: "/uploads/non-free/signature.png"
|
||||
alt: usage.sign_alt
|
||||
image_3:
|
||||
image: "/uploads/non-free/secure.png"
|
||||
alt: usage.trust_alt
|
||||
col_1:
|
||||
headline: Inloggen
|
||||
content: Met IRMA kun je makkelijk inloggen en jezelf bekend maken. Je laat alleen
|
||||
die kenmerken van jezelf zien die relevant zijn. Bijvoorbeeld om een bepaalde
|
||||
film te kijken, bewijs je dat je ouder dan 16 bent, en verder niets.
|
||||
headline: usage.login_headline
|
||||
content: usage.login_content
|
||||
col_2:
|
||||
headline: Ondertekenen
|
||||
content: Ook kun je met IRMA documenten digitaal ondertekenen. Je gebruikt alleen
|
||||
relevante kenmerken van jezelf, in een soort digitaal stempel. Zo kun je met
|
||||
IRMA ondertekenen als arts, als burger of vanuit een andere rol.
|
||||
headline: usage.sign_headline
|
||||
content: usage.sign_content
|
||||
col_3:
|
||||
headline: Vertrouwen
|
||||
content: Gegevens in een IRMA app komen uit betrouwbare bronnen en zijn cryptografisch
|
||||
beschermd. De kenmerken die jij met IRMA bekend maakt zijn daarmee echt, en
|
||||
echt van jou.
|
||||
headline: usage.trust_headline
|
||||
content: usage.trust_content
|
||||
- template: slogan
|
||||
block: irma-1
|
||||
id: start
|
||||
heading: Met IRMA heb je <strong>in de hand</strong> wat er met jouw gegevens gebeurt.
|
||||
block: irma-hero-1
|
||||
id: slogan.id
|
||||
heading: slogan.heading
|
||||
- template: 3-column-text
|
||||
block: three-column-1
|
||||
id: uitleg
|
||||
block: irma-three-column
|
||||
id: explanation.id
|
||||
image_1:
|
||||
image: "/uploads/non-free/getstarted.png"
|
||||
alt: explanation.getstarted_alt
|
||||
image_2:
|
||||
image: "/uploads/non-free/tool.png"
|
||||
alt: explanation.tool_alt
|
||||
image_3:
|
||||
image: "/uploads/non-free/usecases.png"
|
||||
alt: explanation.usecases_alt
|
||||
col_1:
|
||||
headline: Zelf aan de slag met IRMA
|
||||
content: Iedereen kan de IRMA app gratis downloaden (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
en vullen met eigen gegevens. Bijvoorbeeld bij de gemeente kun je inlogggen
|
||||
en basisgegevens (naam, adres, etc.) over jezelf ophalen. Maar ook kun je jouw
|
||||
emailadres of 06-nummer in je IRMA app opslaan. Met zulke gegevens kan iedereen
|
||||
zichzelf online bekend maken.
|
||||
headline: explanation.getstarted_headline
|
||||
content: explanation.getstarted_content
|
||||
col_2:
|
||||
headline: IRMA is een middel, geen doel op zich
|
||||
content: Voor iedereen is het gebruik van allerlei wachtwoorden veel gedoe. Toch
|
||||
moeten websites weten met wie ze te maken hebben. IRMA geeft zekerheid. Met
|
||||
IRMA kun je op een makkelijke en veilige manier online doen wat je wil doen.
|
||||
Bijvoorbeeld een film kijken of iets (ver)kopen.
|
||||
headline: explanation.tool_headline
|
||||
content: explanation.tool_content
|
||||
col_3:
|
||||
headline: Wat kan ik er al mee?
|
||||
content: Er komen steeds meer websites waar je met IRMA in kan loggen. Artsen,
|
||||
bijvoorbeeld, kunnen via IRMA bij medische dossiers op de website <a href="https://www.helder.health"
|
||||
target="_blank">helder</a>. Vooral bij gemeenten en in de zorg wordt aan verder
|
||||
gebruik van IRMA gewerkt. Om een indruk te krijgen van de mogelijkheden kun
|
||||
je zelf een aantal IRMA <a href="https://privacybydesign.foundation/demo/" target="_blank">demo's</a>
|
||||
uitproberen.
|
||||
headline: explanation.usecases_headline
|
||||
content: explanation.usecases_content
|
||||
- template: faq
|
||||
block: faq-1
|
||||
id: faqs
|
||||
headline: <span class="light">Veel gestelde vragen en <strong>antwoorden</strong>
|
||||
daarop<span>
|
||||
block: irma-faq
|
||||
id: faq.id
|
||||
headline: faq.headline
|
||||
faq_items:
|
||||
- question: Hoe moet ik met IRMA inloggen op een website?
|
||||
answer: Websites waar je met IRMA in kunt loggen hebben een knop daarvoor, waar
|
||||
bijvoorbeeld op staat <em>Log in met IRMA</em>. Als je de IRMA app nog niet
|
||||
op je telefoon hebt zul je die eerst moeten installeren en vullen met de kenmerken
|
||||
die je nodig hebt.<br><br> Als je de IRMA app al wel hebt, zijn er twee verschillende
|
||||
situaties<span>:</span><ul class="indent"><li> Als je de website bekijkt op
|
||||
je computer of laptop en je drukt op die login knop verschijnt er een QR code.
|
||||
Je opent dan de IRMA app op je telefoon met je PIN. Onderaan in de app zit een
|
||||
knopje waarmee je de QR code kunt scannen. In de app krijg je dan de vraag of
|
||||
je kenmerken waarom de website vraagt wil vrijgeven. Als je op OK klikt, ben
|
||||
je ingelogd.</li><li> Als je de website op je telefoon bekijkt wordt na het
|
||||
indrukken van de login knop automatisch overgeschakeld naar de IRMA app. Daarin
|
||||
verschijnt de vraag of je de gevraagde kenmerken wil vrijgeven. Nadat je op
|
||||
OK hebt gedrukt ga je terug naar de website en ben je ingelogd. Als het goed
|
||||
is gaat je telefoon automatisch terug, maar soms moet je dat met de hand doen.</li></ul><br>Het
|
||||
kan zijn dat de website vraagt om kenmerken die je nog niet in je IRMA app geladen
|
||||
hebt. Dan moet je dat eerst nog even doen voordat je in kunt loggen.
|
||||
- question: Welke kenmerken kan ik nu (en later) in de IRMA app zetten?
|
||||
answer: Vanuit gemeenten kun je zelf kenmerken zoals je naam, adres, geboortedatum,
|
||||
BSN in je IRMA app zetten, maar ook of je bijvoorbeeld ouder dan 18 of 65 bent.
|
||||
Daarnaast kun je een of meer email adressen en mobiele telefoonnummers, na controle, toevoegen.
|
||||
Studenten en medewerkers in het (hoger) onderwijs kunnen ook hun registratie
|
||||
toevoegen. Medewerkers in de zorg kunnen zogenaamde BIG en AGB registraties
|
||||
toevoegen. Ook vanuit sociale media (LinkedIn, Twitter, Facebook) kun je gegevens
|
||||
laden. Hiermee kun je in veel situaties voldoende van jezelf bekend maken.<br><br>Naar
|
||||
verwachting zullen de komende tijd nog veel andere bronnen van persoonsgegevens
|
||||
aan IRMA toegevoegd worden, voor gebruikers in het algemeen en ook voor speciale
|
||||
(beroeps)groepen.
|
||||
- question: Kan ik IRMA op een tweede telefoon of tablet zetten?
|
||||
answer: Jazeker, op ieder (<a href="https://play.google.com/store/apps/details?id=org.irmacard.cardemu">Android</a>
|
||||
en <a href="https://itunes.apple.com/us/app/irma-authentication/id1294092994">iOS</a>)
|
||||
apparaat kun je een apart IRMA account openen en vullen met persoonskenmerken.
|
||||
Het is misschien wel verstandig omdat te doen, want als je dan het ene apparaat
|
||||
kwijt bent, kun je nog met een ander inloggen.
|
||||
- question: Hoezo is IRMA privacy-vriendelijk en veilig?
|
||||
answer: 'Persoonskenmerken van IRMA staan alleen in de IRMA app en zijn beschermd
|
||||
met een PIN. Je laat alleen die gegevens van jezelf zien die in een bepaalde
|
||||
situatie relevant en nodig zijn. Bijvoorbeeld, om korting te krijgen moet je
|
||||
soms bewijzen dat je student bent; dat kun je met IRMA doen zonder je naam of
|
||||
studie te tonen.<br><br> Jouw kenmerken in de IRMA app zijn digitaal ondertekend
|
||||
door de bron waar de gegevens vandaan komen. Daardoor kan een website of winkel,
|
||||
waar je jezelf bekend maakt, cryptografisch controleren dat de gegevens echt
|
||||
zijn. Deze uitwisseling van persoonskenmerken vindt rechtstreeks plaats, tussen
|
||||
je telefoon en deze website. Niemand anders kan zien dat jij je daar bekendmaakt.
|
||||
Dit is heel anders dan bij een (privacy-onvriendelijke) login via Facebook,
|
||||
bijvoorbeeld bij een online winkel. Dan vindt de uitwisseling anders plaats:
|
||||
je moet eerst bij Facebook inloggen, waarna Facebook aan de webwinkel vertelt
|
||||
wie je bent. Facebook kan zo profielen opbouwen van wie waar inlogt.'
|
||||
- question: Waar staan mijn IRMA gegevens opgeslagen?
|
||||
answer: De kenmerken van jezelf die je in de IRMA app verzamelt staan alleen in
|
||||
de app zelf en worden door IRMA nergens anders opgeslagen. Ze staan dus niet
|
||||
ook nog ergens in een cloud. Als je jouw kenmerken uit de app verwijdert zijn
|
||||
ze ook echt weg. Jij geeft zelf steeds expliciet toestemming voordat deze kenmerken
|
||||
vanuit de IRMA app aan een website doorgegeven worden.
|
||||
- question: Hoe lang zijn kenmerken in IRMA geldig en hoe kan ik ze verversen?
|
||||
answer: In de IRMA app kun je op het kaartje met je kenmerken zien hoe lang ze
|
||||
geldig zijn. Die geldigheidsduur hangt af van het soort gegevens, namelijk van
|
||||
hoe veranderlijk ze zijn. Je naam en geboortedatum zijn vijf jaar geldig, maar
|
||||
je adres slechts een jaar. De uitgever (bron) van kenmerken bepaalt de geldigheidsduur.
|
||||
De geldigheid van IRMA kenmerken kan dus verlopen. De app geeft je daar een
|
||||
waarschuwing voor. Je kunt je kenmerken altijd, ook zonder waarschuwing, verversen
|
||||
door ze opnieuw op te halen bij de bron, net zo als je de eerste keer doet.
|
||||
Bijvoorbeeld, na je 18e verjaardag kun je opnieuw je gegevens bij je gemeente
|
||||
ophalen en heb je als nieuw kenmerk dat je ouder dan 18 bent.
|
||||
- question: Wat doe ik als ik een nieuwe telefoon koop?
|
||||
answer: Op een nieuwe telefoon kun je de IRMA app opnieuw installeren, een nieuw
|
||||
account openen, en je kenmerken opnieuw ophalen. Er is op dit moment geen mogelijkheid
|
||||
om je kenmerken van je oude telefoon over te zetten naar je nieuwe telefoon.
|
||||
Daar wordt wel aan gewerkt. Gelukkig is het niet heel moeilijk om je gegevens
|
||||
opnieuw op te halen. Het kost wel een klein beetje tijd.
|
||||
- question: Wat doe ik als ik mijn telefoon verlies?
|
||||
answer: <span>De IRMA app op je telefoon is beschermd met een PIN, net als je
|
||||
app voor internetbankieren. Wanneer je je telefoon verliest kan een ander dus
|
||||
geen gebruik maken van je IRMA app en zich als jou voordoen. Als je dus een
|
||||
goede PIN gekozen hebt, hoef je je geen zorgen te maken. <br><br> Je kunt jezelf
|
||||
echter nog beter beschermen<span>:</span> bij het openen van een IRMA account heb je de
|
||||
optie gekregen om een email adres toe te voegen. Als je dat gedaan hebt, kun
|
||||
je via de <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">MijnIRMA</a>
|
||||
omgeving je IRMA account blokkeren. Dan kan er echt helemaal niks meer met de
|
||||
IRMA app op je oude, verloren telefoon gebeuren. Als je nog geen email adres
|
||||
toegevoegd hebt in MijnIRMA kun je dat alsnog doen, door <a href="https://privacybydesign.foundation/mijnirma/" target="_blank">daar</a>
|
||||
met IRMA zelf in te loggen. Het is verstandig dat te doen.
|
||||
- question: Ik heb een vraag over IRMA; waar kan ik terecht?
|
||||
answer: Als je een vraag hebt over inloggen met IRMA bij webwinkel De Hippe Kip,
|
||||
dan kun je die vraag het beste stellen aan De Hippe Kip zelf. Ook als die website
|
||||
je vraagt IRMA te installeren en dat lukt niet, dan kun je het beste daar met
|
||||
je vragen naar toegaan. Meestal staat er op zulke webpagina's informatie over
|
||||
hoe je vragen kunt stellen en contact op kunt nemen. <br><br> Als je tenslotte
|
||||
een vraag hebt over het systeem IRMA zelf, dan kun je een berichtje sturen naar
|
||||
het adres <a href="mailto:irma@privacybydesign.foundation">irma@privacybydesign.foundation</a>.
|
||||
- question: Wat gebeurt er met mijn gegevens als ik met IRMA inlog?
|
||||
answer: Als je inlogt bij een website maakt je telefoon rechtstreeks contact met
|
||||
de website. Nadat jij toestemming gegeven hebt worden de gevraagde kenmerken
|
||||
vanuit jouw telefoon direct aan de website getoond. Daar zit niemand tussen.
|
||||
De IRMA organistie kan jouw kenmerken niet zien — omdat ze alleen op jouw telefoon
|
||||
staan — en kan ook niet zien welke attributen je aan welke website vrijgeeft.
|
||||
- question: Wie zit er achter IRMA?
|
||||
answer: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Deze stichting is in 2016 voortgekomen uit de <em>Digital Security</em>
|
||||
onderzoeksgroep van de Radboud Universiteit in Nijmegen. De stichting is onafhankelijk
|
||||
en heeft geen doelstelling om winst te maken. Sinds 2019 heeft de stichting
|
||||
Privacy by Design een strategische samenwerking met de stichting Internet Domeinregistratie
|
||||
Nederland (<a href="https://www.sidn.nl/" target="_blank">SIDN</a>). Mede door deze samenwerking wordt de stabiliteit
|
||||
en continuiteit van IRMA gegarandeerd.
|
||||
- question: Hoezo kan IRMA gratis zijn?
|
||||
answer: IRMA is gratis voor gebruikers. IRMA is ook gratis voor websites die
|
||||
gebruikers via IRMA laten inloggen<span>:</span> iedereen kan kenmerken uit een IRMA app
|
||||
opvragen en bekijken, als de gebruiker toestemming geeft. Maar het is <em>niet
|
||||
gratis</em> om kenmerken uit te geven. Niet iedereen kan zomaar kenmerken in
|
||||
IRMA apps zetten; dat zou snel een rommeltje worden.<br><br> Voor die uitgifte
|
||||
moet betaald worden en moet een contract getekend worden, waarbij de uitgever
|
||||
zich ertoe verplicht om alleen juiste gegevens in de IRMA app van de juiste
|
||||
persoon te zetten. <br><br>Ook kan een contract afgesloten worden voor support garanties (een "SLA") via SIDN. Omdat IRMA een decentraal systeem is, waarbij gegevens alleen
|
||||
op telefoons staan en rechtstreeks met websites uitgewisseld worden, heeft de
|
||||
organisatie achter IRMA relatief weinig te doen. Omdat die organisatie bovendien
|
||||
geen winstoogmerk heeft is IRMA als geheel een goedkoop systeem.
|
||||
- question: faq.item1.question
|
||||
answer: faq.item1.answer
|
||||
- question: faq.item2.question
|
||||
answer: faq.item2.answer
|
||||
- question: faq.item3.question
|
||||
answer: faq.item3.answer
|
||||
- question: faq.item4.question
|
||||
answer: faq.item4.answer
|
||||
- question: faq.item5.question
|
||||
answer: faq.item5.answer
|
||||
- question: faq.item6.question
|
||||
answer: faq.item6.answer
|
||||
- question: faq.item7.question
|
||||
answer: faq.item7.answer
|
||||
- question: faq.item8.question
|
||||
answer: faq.item8.answer
|
||||
- question: faq.item9.question
|
||||
answer: faq.item9.answer
|
||||
- question: faq.item10.question
|
||||
answer: faq.item10.answer
|
||||
- question: faq.item11.question
|
||||
answer: faq.item11.answer
|
||||
- question: faq.item12.question
|
||||
answer: faq.item12.answer
|
||||
- question: faq.item13.question
|
||||
answer: faq.item13.answer
|
||||
- question: faq.item14.question
|
||||
answer: faq.item14.answer
|
||||
|
||||
- question: IRMA is <em>open source</em>; wat betekent dat?
|
||||
answer: De software van IRMA is open source. Dat betekent dat de manier waarop IRMA werkt door iedereen bekeken kan worden<span>:</span> de software
|
||||
staat gewoon online, namelijk op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>. Natuurlijk moet je wel wat van
|
||||
computerprogramma's weten om dit echt te kunnen begrijpen, maar het principe is belangrijk<span>:</span> IRMA kent geen geheimen en werkt op een
|
||||
transparante manier. Dit draagt bij aan het vertrouwen in IRMA. Er zijn daarom met IRMA geen discussies over verborgen achterdoortjes van
|
||||
leveranciers met een eigen agenda, zoals bijvoorbeeld met 5G telecommunicatie. De stichting Privacy by Design achter IRMA vindt dat
|
||||
alle software die gebruikt wordt in infrastructuur met een publieke rol open source moet zijn.
|
||||
|
||||
- question: Ik wil meer informatie over IRMA; waar kan ik terecht?
|
||||
answer: Het grotere verhaal achter IRMA staat beschreven in een <a href="https://privacybydesign.foundation/pdf/IRMA-manifest-2019.pdf" target="_blank">IRMA Manifest</a>. <br><br> Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de stichting Privacy by Design op een eigen <a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">pagina</a>. Mensen die de software van IRMA willen bekijken kunnen terecht op een technische <a href="https://irma.app/docs" target="_blank">documentatie</a> pagina en op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
|
||||
- template: irma-footer-2
|
||||
block: irma-footer-2
|
||||
id: links
|
||||
- template: irma-footer
|
||||
block: irma-footer
|
||||
id: footer.id
|
||||
image_1:
|
||||
image: "/uploads/non-free/irma_logo@1x.png"
|
||||
alt: footer.irma_alt
|
||||
col_2:
|
||||
headline: Privacy by Design Foundation
|
||||
content: IRMA wordt gemaakt door de stichting <a href="https://privacybydesign.foundation/" target="_blank">Privacy
|
||||
by Design</a>. Uitgebreidere uitleg over de werking van IRMA wordt gegeven door de stichting Privacy by Design op haar eigen <a href="https://privacybydesign.foundation/irma-uitleg/" target="_blank">website</a>.
|
||||
headline: footer.irma_headline
|
||||
content: footer.irma_content
|
||||
col_3:
|
||||
headline: Docs
|
||||
content: Ontwikkelaars die met IRMA willen werken kunnen terecht op de technische <a href="https://irma.app/docs" target="_blank">documentatie</a>.
|
||||
headline: footer.doc_headline
|
||||
content: footer.doc_content
|
||||
col_4:
|
||||
headline: GitHub
|
||||
content: Mensen die de software van IRMA willen bekijken of willen bijdragen aan IRMA kunnen terecht op <a href="https://github.com/privacybydesign" target="_blank">GitHub</a>.
|
||||
|
||||
headline: footer.github_headline
|
||||
content: footer.github_content
|
||||
|
||||
---
|
||||
|
||||
22
vendor/bundle/ruby/2.3.0/bin/jekyll
vendored
22
vendor/bundle/ruby/2.3.0/bin/jekyll
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'jekyll' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('jekyll', 'jekyll', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/kramdown
vendored
22
vendor/bundle/ruby/2.3.0/bin/kramdown
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'kramdown' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('kramdown', 'kramdown', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/listen
vendored
22
vendor/bundle/ruby/2.3.0/bin/listen
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'listen' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('listen', 'listen', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/rougify
vendored
22
vendor/bundle/ruby/2.3.0/bin/rougify
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'rouge' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('rouge', 'rougify', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/safe_yaml
vendored
22
vendor/bundle/ruby/2.3.0/bin/safe_yaml
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'safe_yaml' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('safe_yaml', 'safe_yaml', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/sass
vendored
22
vendor/bundle/ruby/2.3.0/bin/sass
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'sass' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('sass', 'sass', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/sass-convert
vendored
22
vendor/bundle/ruby/2.3.0/bin/sass-convert
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'sass' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('sass', 'sass-convert', version)
|
||||
22
vendor/bundle/ruby/2.3.0/bin/scss
vendored
22
vendor/bundle/ruby/2.3.0/bin/scss
vendored
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/env ruby
|
||||
#
|
||||
# This file was generated by RubyGems.
|
||||
#
|
||||
# The application 'sass' is installed as part of a gem, and
|
||||
# this file is here to facilitate running it.
|
||||
#
|
||||
|
||||
require 'rubygems'
|
||||
|
||||
version = ">= 0.a"
|
||||
|
||||
if ARGV.first
|
||||
str = ARGV.first
|
||||
str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
|
||||
if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
|
||||
version = $1
|
||||
ARGV.shift
|
||||
end
|
||||
end
|
||||
|
||||
load Gem.bin_path('sass', 'scss', version)
|
||||
BIN
vendor/bundle/ruby/2.3.0/cache/addressable-2.5.2.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/addressable-2.5.2.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/colorator-1.1.0.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/colorator-1.1.0.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/ffi-1.9.25.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/ffi-1.9.25.gem
vendored
Binary file not shown.
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/jekyll-3.6.3.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/jekyll-3.6.3.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/jekyll-feed-0.9.2.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/jekyll-feed-0.9.2.gem
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/kramdown-1.17.0.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/kramdown-1.17.0.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/liquid-4.0.1.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/liquid-4.0.1.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/listen-3.1.5.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/listen-3.1.5.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/mercenary-0.3.6.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/mercenary-0.3.6.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/pathutil-0.16.1.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/pathutil-0.16.1.gem
vendored
Binary file not shown.
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/rb-fsevent-0.10.3.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/rb-fsevent-0.10.3.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/rb-inotify-0.9.10.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/rb-inotify-0.9.10.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/rouge-2.2.1.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/rouge-2.2.1.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/ruby_dep-1.5.0.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/ruby_dep-1.5.0.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/safe_yaml-1.0.4.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/safe_yaml-1.0.4.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/sass-3.6.0.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/sass-3.6.0.gem
vendored
Binary file not shown.
BIN
vendor/bundle/ruby/2.3.0/cache/sass-listen-4.0.0.gem
vendored
BIN
vendor/bundle/ruby/2.3.0/cache/sass-listen-4.0.0.gem
vendored
Binary file not shown.
Binary file not shown.
@@ -1,140 +0,0 @@
|
||||
current directory: /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c
|
||||
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby -r ./siteconf20190924-36740-x47nfw.rb extconf.rb
|
||||
checking for ffi.h... no
|
||||
checking for ffi.h in /usr/local/include,/usr/include/ffi... no
|
||||
checking for shlwapi.h... no
|
||||
checking for ruby/thread.h... yes
|
||||
checking for rb_thread_blocking_region()... no
|
||||
checking for rb_thread_call_with_gvl()... yes
|
||||
checking for rb_thread_call_without_gvl()... yes
|
||||
creating extconf.h
|
||||
creating Makefile
|
||||
|
||||
To see why this extension failed to compile, please check the mkmf.log which can be found here:
|
||||
|
||||
/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/extensions/universal-darwin-18/2.3.0/ffi-1.9.25/mkmf.log
|
||||
|
||||
current directory: /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c
|
||||
make "DESTDIR=" clean
|
||||
|
||||
current directory: /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c
|
||||
make "DESTDIR="
|
||||
Configuring libffi
|
||||
clang: error: unsupported option '-print-multi-os-directory'
|
||||
clang: error: no input files
|
||||
cd "/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi-universal-darwin18" && /Applications/Xcode.app/Contents/Developer/usr/bin/make
|
||||
/Applications/Xcode.app/Contents/Developer/usr/bin/make 'AR_FLAGS=' 'CC_FOR_BUILD=' 'CFLAGS=-Wall -fexceptions' 'CXXFLAGS=-g -O2' 'CFLAGS_FOR_BUILD=' 'CFLAGS_FOR_TARGET=' 'INSTALL=/usr/bin/install -c' 'INSTALL_DATA=/usr/bin/install -c -m 644' 'INSTALL_PROGRAM=/usr/bin/install -c' 'INSTALL_SCRIPT=/usr/bin/install -c' 'JC1FLAGS=' 'LDFLAGS=' 'LIBCFLAGS=' 'LIBCFLAGS_FOR_TARGET=' 'MAKE=/Applications/Xcode.app/Contents/Developer/usr/bin/make' 'MAKEINFO=/bin/sh /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/missing makeinfo ' 'PICFLAG=' 'PICFLAG_FOR_TARGET=' 'RUNTESTFLAGS=' 'SHELL=/bin/sh' 'exec_prefix=/usr/local' 'infodir=/usr/local/share/info' 'libdir=/usr/local/lib' 'mandir=/usr/local/share/man' 'prefix=/usr/local' 'AR=ar' 'AS=as' 'CC=xcrun clang' 'CXX=g++' 'LD=ld' 'NM=/usr/bin/nm -B' 'RANLIB=ranlib' 'DESTDIR=' all-recursive
|
||||
Making all in include
|
||||
make[3]: Nothing to be done for `all'.
|
||||
Making all in testsuite
|
||||
make[3]: Nothing to be done for `all'.
|
||||
Making all in man
|
||||
make[3]: Nothing to be done for `all'.
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/prep_cif.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/prep_cif.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/prep_cif.c -fno-common -DPIC -o src/.libs/prep_cif.o
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/types.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/types.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/types.c -fno-common -DPIC -o src/.libs/types.o
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/raw_api.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/raw_api.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/raw_api.c -fno-common -DPIC -o src/.libs/raw_api.o
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/java_raw_api.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/java_raw_api.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/java_raw_api.c -fno-common -DPIC -o src/.libs/java_raw_api.o
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/closures.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/closures.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/closures.c -fno-common -DPIC -o src/.libs/closures.o
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/x86/ffi64.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/ffi64.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/ffi64.c -fno-common -DPIC -o src/x86/.libs/ffi64.o
|
||||
/bin/sh ./libtool --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -c -o src/x86/unix64.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/unix64.S
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/unix64.S -fno-common -DPIC -o src/x86/.libs/unix64.o
|
||||
/bin/sh ./libtool --tag=CC --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c -o src/x86/ffiw64.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/ffiw64.c
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -Wall -fexceptions -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/ffiw64.c -fno-common -DPIC -o src/x86/.libs/ffiw64.o
|
||||
/bin/sh ./libtool --mode=compile xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -c -o src/x86/win64.lo /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/win64.S
|
||||
libtool: compile: xcrun clang -DHAVE_CONFIG_H -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -I. -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/include -Iinclude -I/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src -c /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/src/x86/win64.S -fno-common -DPIC -o src/x86/.libs/win64.o
|
||||
/bin/sh ./libtool --tag=CC --mode=link xcrun clang -Wall -fexceptions -o libffi_convenience.la src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffiw64.lo src/x86/win64.lo
|
||||
libtool: link: ar cru .libs/libffi_convenience.a src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi64.o src/x86/.libs/unix64.o src/x86/.libs/ffiw64.o src/x86/.libs/win64.o
|
||||
libtool: link: ranlib .libs/libffi_convenience.a
|
||||
libtool: link: ( cd ".libs" && rm -f "libffi_convenience.la" && ln -s "../libffi_convenience.la" "libffi_convenience.la" )
|
||||
/bin/sh ./libtool --tag=CC --mode=link xcrun clang -Wall -fexceptions -no-undefined -version-info `grep -v '^#' /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/libtool-version` -o libffi.la -rpath /usr/local/lib src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffiw64.lo src/x86/win64.lo
|
||||
libtool: link: xcrun clang -dynamiclib -o .libs/libffi.7.dylib src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi64.o src/x86/.libs/unix64.o src/x86/.libs/ffiw64.o src/x86/.libs/win64.o -install_name /usr/local/lib/libffi.7.dylib -compatibility_version 9 -current_version 9.0 -Wl,-single_module
|
||||
ld: warning: could not create compact unwind for _ffi_call_unix64: does not use RBP or RSP based frame
|
||||
libtool: link: (cd ".libs" && rm -f "libffi.dylib" && ln -s "libffi.7.dylib" "libffi.dylib")
|
||||
libtool: link: ( cd ".libs" && rm -f "libffi.la" && ln -s "../libffi.la" "libffi.la" )
|
||||
compiling AbstractMemory.c
|
||||
compiling ArrayType.c
|
||||
compiling Buffer.c
|
||||
compiling Call.c
|
||||
compiling ClosurePool.c
|
||||
compiling DataConverter.c
|
||||
compiling DynamicLibrary.c
|
||||
compiling Function.c
|
||||
Function.c:951:17: warning: 'ffi_prep_closure' is deprecated [-Wdeprecated-declarations]
|
||||
ffiStatus = ffi_prep_closure(code, &fnInfo->ffi_cif, callback_invoke, closure);
|
||||
^
|
||||
/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi-universal-darwin18/include/ffi.h:339:18: note: 'ffi_prep_closure' has been explicitly marked deprecated here
|
||||
__attribute__((deprecated))
|
||||
^
|
||||
1 warning generated.
|
||||
compiling FunctionInfo.c
|
||||
compiling LastError.c
|
||||
compiling LongDouble.c
|
||||
compiling MappedType.c
|
||||
compiling MemoryPointer.c
|
||||
compiling MethodHandle.c
|
||||
compiling Platform.c
|
||||
compiling Pointer.c
|
||||
compiling Struct.c
|
||||
compiling StructByReference.c
|
||||
compiling StructByValue.c
|
||||
compiling StructLayout.c
|
||||
compiling Thread.c
|
||||
compiling Type.c
|
||||
compiling Types.c
|
||||
compiling Variadic.c
|
||||
compiling ffi.c
|
||||
linking shared-object ffi_c.bundle
|
||||
ld: warning: could not create compact unwind for _ffi_call_unix64: does not use RBP or RSP based frame
|
||||
|
||||
current directory: /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c
|
||||
make "DESTDIR=" install
|
||||
cd "/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi-universal-darwin18" && /Applications/Xcode.app/Contents/Developer/usr/bin/make
|
||||
/Applications/Xcode.app/Contents/Developer/usr/bin/make 'AR_FLAGS=' 'CC_FOR_BUILD=' 'CFLAGS=-Wall -fexceptions' 'CXXFLAGS=-g -O2' 'CFLAGS_FOR_BUILD=' 'CFLAGS_FOR_TARGET=' 'INSTALL=/usr/bin/install -c' 'INSTALL_DATA=/usr/bin/install -c -m 644' 'INSTALL_PROGRAM=/usr/bin/install -c' 'INSTALL_SCRIPT=/usr/bin/install -c' 'JC1FLAGS=' 'LDFLAGS=' 'LIBCFLAGS=' 'LIBCFLAGS_FOR_TARGET=' 'MAKE=/Applications/Xcode.app/Contents/Developer/usr/bin/make' 'MAKEINFO=/bin/sh /Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi/missing makeinfo ' 'PICFLAG=' 'PICFLAG_FOR_TARGET=' 'RUNTESTFLAGS=' 'SHELL=/bin/sh' 'exec_prefix=/usr/local' 'infodir=/usr/local/share/info' 'libdir=/usr/local/lib' 'mandir=/usr/local/share/man' 'prefix=/usr/local' 'AR=ar' 'AS=as' 'CC=xcrun clang' 'CXX=g++' 'LD=ld' 'NM=/usr/bin/nm -B' 'RANLIB=ranlib' 'DESTDIR=' all-recursive
|
||||
Making all in include
|
||||
make[3]: Nothing to be done for `all'.
|
||||
Making all in testsuite
|
||||
make[3]: Nothing to be done for `all'.
|
||||
Making all in man
|
||||
make[3]: Nothing to be done for `all'.
|
||||
make[3]: Nothing to be done for `all-am'.
|
||||
compiling AbstractMemory.c
|
||||
compiling ArrayType.c
|
||||
compiling Buffer.c
|
||||
compiling Call.c
|
||||
compiling ClosurePool.c
|
||||
compiling DataConverter.c
|
||||
compiling DynamicLibrary.c
|
||||
compiling Function.c
|
||||
Function.c:951:17: warning: 'ffi_prep_closure' is deprecated [-Wdeprecated-declarations]
|
||||
ffiStatus = ffi_prep_closure(code, &fnInfo->ffi_cif, callback_invoke, closure);
|
||||
^
|
||||
/Users/hanna/Documents/GitHub/irma-website/vendor/bundle/ruby/2.3.0/gems/ffi-1.9.25/ext/ffi_c/libffi-universal-darwin18/include/ffi.h:339:18: note: 'ffi_prep_closure' has been explicitly marked deprecated here
|
||||
__attribute__((deprecated))
|
||||
^
|
||||
1 warning generated.
|
||||
compiling FunctionInfo.c
|
||||
compiling LastError.c
|
||||
compiling LongDouble.c
|
||||
compiling MappedType.c
|
||||
compiling MemoryPointer.c
|
||||
compiling MethodHandle.c
|
||||
compiling Platform.c
|
||||
compiling Pointer.c
|
||||
compiling Struct.c
|
||||
compiling StructByReference.c
|
||||
compiling StructByValue.c
|
||||
compiling StructLayout.c
|
||||
compiling Thread.c
|
||||
compiling Type.c
|
||||
compiling Types.c
|
||||
compiling Variadic.c
|
||||
compiling ffi.c
|
||||
linking shared-object ffi_c.bundle
|
||||
ld: warning: could not create compact unwind for _ffi_call_unix64: does not use RBP or RSP based frame
|
||||
/usr/bin/install -c -m 0755 ffi_c.bundle ./.gem.20190924-36740-x1wmd8
|
||||
@@ -1,250 +0,0 @@
|
||||
"pkg-config --exists libffi"
|
||||
package configuration for libffi is not found
|
||||
have_header: checking for ffi.h... -------------------- no
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: int main(int argc, char **argv)
|
||||
4: {
|
||||
5: return 0;
|
||||
6: }
|
||||
/* end */
|
||||
|
||||
"xcrun clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS -c conftest.c"
|
||||
conftest.c:3:10: fatal error: 'ffi.h' file not found
|
||||
#include <ffi.h>
|
||||
^~~~~~~
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: #include <ffi.h>
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
find_header: checking for ffi.h in /usr/local/include,/usr/include/ffi... -------------------- no
|
||||
|
||||
"xcrun clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS -c conftest.c"
|
||||
conftest.c:3:10: fatal error: 'ffi.h' file not found
|
||||
#include <ffi.h>
|
||||
^~~~~~~
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: #include <ffi.h>
|
||||
/* end */
|
||||
|
||||
"xcrun clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS -I/usr/local/include -c conftest.c"
|
||||
conftest.c:3:10: fatal error: 'ffi.h' file not found
|
||||
#include <ffi.h>
|
||||
^~~~~~~
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: #include <ffi.h>
|
||||
/* end */
|
||||
|
||||
"xcrun clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS -I/usr/include/ffi -c conftest.c"
|
||||
conftest.c:3:10: fatal error: 'ffi.h' file not found
|
||||
#include <ffi.h>
|
||||
^~~~~~~
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: #include <ffi.h>
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
have_header: checking for shlwapi.h... -------------------- no
|
||||
|
||||
"xcrun clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS -c conftest.c"
|
||||
conftest.c:3:10: fatal error: 'shlwapi.h' file not found
|
||||
#include <shlwapi.h>
|
||||
^~~~~~~~~~~
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: #include <shlwapi.h>
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
have_header: checking for ruby/thread.h... -------------------- yes
|
||||
|
||||
"xcrun clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS -c conftest.c"
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: #include <ruby/thread.h>
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
have_func: checking for rb_thread_blocking_region()... -------------------- no
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
conftest.c:13:57: error: use of undeclared identifier 'rb_thread_blocking_region'
|
||||
int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return !p; }
|
||||
^
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: /*top*/
|
||||
4: extern int t(void);
|
||||
5: int main(int argc, char **argv)
|
||||
6: {
|
||||
7: if (argc > 1000000) {
|
||||
8: printf("%p", &t);
|
||||
9: }
|
||||
10:
|
||||
11: return 0;
|
||||
12: }
|
||||
13: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return !p; }
|
||||
/* end */
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
Undefined symbols for architecture x86_64:
|
||||
"_rb_thread_blocking_region", referenced from:
|
||||
_t in conftest-4e6b3e.o
|
||||
ld: symbol(s) not found for architecture x86_64
|
||||
clang: error: linker command failed with exit code 1 (use -v to see invocation)
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: /*top*/
|
||||
4: extern int t(void);
|
||||
5: int main(int argc, char **argv)
|
||||
6: {
|
||||
7: if (argc > 1000000) {
|
||||
8: printf("%p", &t);
|
||||
9: }
|
||||
10:
|
||||
11: return 0;
|
||||
12: }
|
||||
13: extern void rb_thread_blocking_region();
|
||||
14: int t(void) { rb_thread_blocking_region(); return 0; }
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
have_func: checking for rb_thread_call_with_gvl()... -------------------- yes
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
conftest.c:13:57: error: use of undeclared identifier 'rb_thread_call_with_gvl'
|
||||
int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_with_gvl; return !p; }
|
||||
^
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: /*top*/
|
||||
4: extern int t(void);
|
||||
5: int main(int argc, char **argv)
|
||||
6: {
|
||||
7: if (argc > 1000000) {
|
||||
8: printf("%p", &t);
|
||||
9: }
|
||||
10:
|
||||
11: return 0;
|
||||
12: }
|
||||
13: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_with_gvl; return !p; }
|
||||
/* end */
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: /*top*/
|
||||
4: extern int t(void);
|
||||
5: int main(int argc, char **argv)
|
||||
6: {
|
||||
7: if (argc > 1000000) {
|
||||
8: printf("%p", &t);
|
||||
9: }
|
||||
10:
|
||||
11: return 0;
|
||||
12: }
|
||||
13: extern void rb_thread_call_with_gvl();
|
||||
14: int t(void) { rb_thread_call_with_gvl(); return 0; }
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
have_func: checking for rb_thread_call_without_gvl()... -------------------- yes
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
conftest.c:13:57: error: use of undeclared identifier 'rb_thread_call_without_gvl'
|
||||
int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_without_gvl; return !p; }
|
||||
^
|
||||
1 error generated.
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: /*top*/
|
||||
4: extern int t(void);
|
||||
5: int main(int argc, char **argv)
|
||||
6: {
|
||||
7: if (argc > 1000000) {
|
||||
8: printf("%p", &t);
|
||||
9: }
|
||||
10:
|
||||
11: return 0;
|
||||
12: }
|
||||
13: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_without_gvl; return !p; }
|
||||
/* end */
|
||||
|
||||
"xcrun clang -o conftest -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/universal-darwin18 -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0/ruby/backward -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -g -Os -pipe -DHAVE_GCC_ATOMIC_BUILTINS conftest.c -L. -L/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib -L. -lruby.2.3.0 -lpthread -ldl -lobjc "
|
||||
checked program was:
|
||||
/* begin */
|
||||
1: #include "ruby.h"
|
||||
2:
|
||||
3: /*top*/
|
||||
4: extern int t(void);
|
||||
5: int main(int argc, char **argv)
|
||||
6: {
|
||||
7: if (argc > 1000000) {
|
||||
8: printf("%p", &t);
|
||||
9: }
|
||||
10:
|
||||
11: return 0;
|
||||
12: }
|
||||
13: extern void rb_thread_call_without_gvl();
|
||||
14: int t(void) { rb_thread_call_without_gvl(); return 0; }
|
||||
/* end */
|
||||
|
||||
--------------------
|
||||
|
||||
extconf.h is:
|
||||
/* begin */
|
||||
1: #ifndef EXTCONF_H
|
||||
2: #define EXTCONF_H
|
||||
3: #define HAVE_RUBY_THREAD_H 1
|
||||
4: #define HAVE_RB_THREAD_CALL_WITH_GVL 1
|
||||
5: #define HAVE_RB_THREAD_CALL_WITHOUT_GVL 1
|
||||
6: #define HAVE_FFI_PREP_CIF_VAR 1
|
||||
7: #define USE_INTERNAL_LIBFFI 1
|
||||
8: #define RUBY_1_9 1
|
||||
9: #endif
|
||||
/* end */
|
||||
|
||||
@@ -1,216 +0,0 @@
|
||||
# Addressable 2.5.2
|
||||
- better support for frozen string literals
|
||||
- fixed bug w/ uppercase characters in scheme
|
||||
- IDNA errors w/ emoji URLs
|
||||
- compatibility w/ public_suffix 3.x
|
||||
|
||||
# Addressable 2.5.1
|
||||
- allow unicode normalization to be disabled for URI Template expansion
|
||||
- removed duplicate test
|
||||
|
||||
# Addressable 2.5.0
|
||||
- dropping support for Ruby 1.9
|
||||
- adding support for Ruby 2.4 preview
|
||||
- add support for public suffixes and tld; first runtime dependency
|
||||
- hostname escaping should match RFC; underscores in hostnames no longer escaped
|
||||
- paths beginning with // and missing an authority are now considered invalid
|
||||
- validation now also takes place after setting a path
|
||||
- handle backslashes in authority more like a browser for `heuristic_parse`
|
||||
- unescaped backslashes in host now raise an `InvalidURIError`
|
||||
- `merge!`, `join!`, `omit!` and `normalize!` don't disable deferred validation
|
||||
- `heuristic_parse` now trims whitespace before parsing
|
||||
- host parts longer than 63 bytes will be ignored and not passed to libidn
|
||||
- normalized values always encoded as UTF-8
|
||||
|
||||
# Addressable 2.4.0
|
||||
- support for 1.8.x dropped
|
||||
- double quotes in a host now raises an error
|
||||
- newlines in host will no longer get unescaped during normalization
|
||||
- stricter handling of bogus scheme values
|
||||
- stricter handling of encoded port values
|
||||
- calling `require 'addressable'` will now load both the URI and Template files
|
||||
- assigning to the `hostname` component with an `IPAddr` object is now supported
|
||||
- assigning to the `origin` component is now supported
|
||||
- fixed minor bug where an exception would be thrown for a missing ACE suffix
|
||||
- better partial expansion of URI templates
|
||||
|
||||
# Addressable 2.3.8
|
||||
- fix warnings
|
||||
- update dependency gems
|
||||
- support for 1.8.x officially deprecated
|
||||
|
||||
# Addressable 2.3.7
|
||||
- fix scenario in which invalid URIs don't get an exception until inspected
|
||||
- handle hostnames with two adjacent periods correctly
|
||||
- upgrade of RSpec
|
||||
|
||||
# Addressable 2.3.6
|
||||
- normalization drops empty query string
|
||||
- better handling in template extract for missing values
|
||||
- template modifier for `'?'` now treated as optional
|
||||
- fixed issue where character class parameters were modified
|
||||
- templates can now be tested for equality
|
||||
- added `:sorted` option to normalization of query strings
|
||||
- fixed issue with normalization of hosts given in `'example.com.'` form
|
||||
|
||||
# Addressable 2.3.5
|
||||
- added Addressable::URI#empty? method
|
||||
- Addressable::URI#hostname methods now strip square brackets from IPv6 hosts
|
||||
- compatibility with Net::HTTP in Ruby 2.0.0
|
||||
- Addressable::URI#route_from should always give relative URIs
|
||||
|
||||
# Addressable 2.3.4
|
||||
- fixed issue with encoding altering its inputs
|
||||
- query string normalization now leaves ';' characters alone
|
||||
- FakeFS is detected before attempting to load unicode tables
|
||||
- additional testing to ensure frozen objects don't cause problems
|
||||
|
||||
# Addressable 2.3.3
|
||||
- fixed issue with converting common primitives during template expansion
|
||||
- fixed port encoding issue
|
||||
- removed a few warnings
|
||||
- normalize should now ignore %2B in query strings
|
||||
- the IDNA logic should now be handled by libidn in Ruby 1.9
|
||||
- no template match should now result in nil instead of an empty MatchData
|
||||
- added license information to gemspec
|
||||
|
||||
# Addressable 2.3.2
|
||||
- added Addressable::URI#default_port method
|
||||
- fixed issue with Marshalling Unicode data on Windows
|
||||
- improved heuristic parsing to better handle IPv4 addresses
|
||||
|
||||
# Addressable 2.3.1
|
||||
- fixed missing unicode data file
|
||||
|
||||
# Addressable 2.3.0
|
||||
- updated Addressable::Template to use RFC 6570, level 4
|
||||
- fixed compatibility problems with some versions of Ruby
|
||||
- moved unicode tables into a data file for performance reasons
|
||||
- removing support for multiple query value notations
|
||||
|
||||
# Addressable 2.2.8
|
||||
- fixed issues with dot segment removal code
|
||||
- form encoding can now handle multiple values per key
|
||||
- updated development environment
|
||||
|
||||
# Addressable 2.2.7
|
||||
- fixed issues related to Addressable::URI#query_values=
|
||||
- the Addressable::URI.parse method is now polymorphic
|
||||
|
||||
# Addressable 2.2.6
|
||||
- changed the way ambiguous paths are handled
|
||||
- fixed bug with frozen URIs
|
||||
- https supported in heuristic parsing
|
||||
|
||||
# Addressable 2.2.5
|
||||
- 'parsing' a pre-parsed URI object is now a dup operation
|
||||
- introduced conditional support for libidn
|
||||
- fixed normalization issue on ampersands in query strings
|
||||
- added additional tests around handling of query strings
|
||||
|
||||
# Addressable 2.2.4
|
||||
- added origin support from draft-ietf-websec-origin-00
|
||||
- resolved issue with attempting to navigate below root
|
||||
- fixed bug with string splitting in query strings
|
||||
|
||||
# Addressable 2.2.3
|
||||
- added :flat_array notation for query strings
|
||||
|
||||
# Addressable 2.2.2
|
||||
- fixed issue with percent escaping of '+' character in query strings
|
||||
|
||||
# Addressable 2.2.1
|
||||
- added support for application/x-www-form-urlencoded.
|
||||
|
||||
# Addressable 2.2.0
|
||||
- added site methods
|
||||
- improved documentation
|
||||
|
||||
# Addressable 2.1.2
|
||||
- added HTTP request URI methods
|
||||
- better handling of Windows file paths
|
||||
- validation_deferred boolean replaced with defer_validation block
|
||||
- normalization of percent-encoded paths should now be correct
|
||||
- fixed issue with constructing URIs with relative paths
|
||||
- fixed warnings
|
||||
|
||||
# Addressable 2.1.1
|
||||
- more type checking changes
|
||||
- fixed issue with unicode normalization
|
||||
- added method to find template defaults
|
||||
- symbolic keys are now allowed in template mappings
|
||||
- numeric values and symbolic values are now allowed in template mappings
|
||||
|
||||
# Addressable 2.1.0
|
||||
- refactored URI template support out into its own class
|
||||
- removed extract method due to being useless and unreliable
|
||||
- removed Addressable::URI.expand_template
|
||||
- removed Addressable::URI#extract_mapping
|
||||
- added partial template expansion
|
||||
- fixed minor bugs in the parse and heuristic_parse methods
|
||||
- fixed incompatibility with Ruby 1.9.1
|
||||
- fixed bottleneck in Addressable::URI#hash and Addressable::URI#to_s
|
||||
- fixed unicode normalization exception
|
||||
- updated query_values methods to better handle subscript notation
|
||||
- worked around issue with freezing URIs
|
||||
- improved specs
|
||||
|
||||
# Addressable 2.0.2
|
||||
- fixed issue with URI template expansion
|
||||
- fixed issue with percent escaping characters 0-15
|
||||
|
||||
# Addressable 2.0.1
|
||||
- fixed issue with query string assignment
|
||||
- fixed issue with improperly encoded components
|
||||
|
||||
# Addressable 2.0.0
|
||||
- the initialize method now takes an options hash as its only parameter
|
||||
- added query_values method to URI class
|
||||
- completely replaced IDNA implementation with pure Ruby
|
||||
- renamed Addressable::ADDRESSABLE_VERSION to Addressable::VERSION
|
||||
- completely reworked the Rakefile
|
||||
- changed the behavior of the port method significantly
|
||||
- Addressable::URI.encode_segment, Addressable::URI.unencode_segment renamed
|
||||
- documentation is now in YARD format
|
||||
- more rigorous type checking
|
||||
- to_str method implemented, implicit conversion to Strings now allowed
|
||||
- Addressable::URI#omit method added, Addressable::URI#merge method replaced
|
||||
- updated URI Template code to match v 03 of the draft spec
|
||||
- added a bunch of new specifications
|
||||
|
||||
# Addressable 1.0.4
|
||||
- switched to using RSpec's pending system for specs that rely on IDN
|
||||
- fixed issue with creating URIs with paths that are not prefixed with '/'
|
||||
|
||||
# Addressable 1.0.3
|
||||
- implemented a hash method
|
||||
|
||||
# Addressable 1.0.2
|
||||
- fixed minor bug with the extract_mapping method
|
||||
|
||||
# Addressable 1.0.1
|
||||
- fixed minor bug with the extract_mapping method
|
||||
|
||||
# Addressable 1.0.0
|
||||
- heuristic parse method added
|
||||
- parsing is slightly more strict
|
||||
- replaced to_h with to_hash
|
||||
- fixed routing methods
|
||||
- improved specifications
|
||||
- improved heckle rake task
|
||||
- no surviving heckle mutations
|
||||
|
||||
# Addressable 0.1.2
|
||||
- improved normalization
|
||||
- fixed bug in joining algorithm
|
||||
- updated specifications
|
||||
|
||||
# Addressable 0.1.1
|
||||
- updated documentation
|
||||
- added URI Template variable extraction
|
||||
|
||||
# Addressable 0.1.0
|
||||
- initial release
|
||||
- implementation based on RFC 3986, 3987
|
||||
- support for IRIs via libidn
|
||||
- support for the URI Template draft spec
|
||||
@@ -1,32 +0,0 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gemspec
|
||||
|
||||
group :test do
|
||||
gem 'rspec', '~> 3.0'
|
||||
gem 'rspec-its', '~> 1.1'
|
||||
end
|
||||
|
||||
group :development do
|
||||
gem 'launchy', '~> 2.4', '>= 2.4.3'
|
||||
gem 'redcarpet', :platform => :mri_19
|
||||
gem 'yard'
|
||||
end
|
||||
|
||||
group :test, :development do
|
||||
gem 'rake', '> 10.0', '< 12'
|
||||
gem 'simplecov', :require => false
|
||||
gem 'coveralls', :require => false, :platforms => [
|
||||
:ruby_20, :ruby_21, :ruby_22, :ruby_23
|
||||
]
|
||||
# Used to test compatibility.
|
||||
gem 'rack-mount', git: 'https://github.com/sporkmonger/rack-mount.git', require: 'rack/mount'
|
||||
|
||||
if RUBY_VERSION.start_with?('2.0', '2.1')
|
||||
gem 'rack', '< 2', :require => false
|
||||
else
|
||||
gem 'rack', :require => false
|
||||
end
|
||||
end
|
||||
|
||||
gem 'idn-ruby', :platform => [:mri_20, :mri_21, :mri_22, :mri_23, :mri_24]
|
||||
@@ -1,202 +0,0 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -1,121 +0,0 @@
|
||||
# Addressable
|
||||
|
||||
<dl>
|
||||
<dt>Homepage</dt><dd><a href="https://github.com/sporkmonger/addressable">github.com/sporkmonger/addressable</a></dd>
|
||||
<dt>Author</dt><dd><a href="mailto:bob@sporkmonger.com">Bob Aman</a></dd>
|
||||
<dt>Copyright</dt><dd>Copyright © Bob Aman</dd>
|
||||
<dt>License</dt><dd>Apache 2.0</dd>
|
||||
</dl>
|
||||
|
||||
[][gem]
|
||||
[][travis]
|
||||
[][gemnasium]
|
||||
[][coveralls]
|
||||
[][inch]
|
||||
|
||||
[gem]: https://rubygems.org/gems/addressable
|
||||
[travis]: http://travis-ci.org/sporkmonger/addressable
|
||||
[gemnasium]: https://gemnasium.com/sporkmonger/addressable
|
||||
[coveralls]: https://coveralls.io/r/sporkmonger/addressable
|
||||
[inch]: http://inch-ci.org/github/sporkmonger/addressable
|
||||
|
||||
# Description
|
||||
|
||||
Addressable is a replacement for the URI implementation that is part of
|
||||
Ruby's standard library. It more closely conforms to RFC 3986, RFC 3987, and
|
||||
RFC 6570 (level 4), providing support for IRIs and URI templates.
|
||||
|
||||
# Reference
|
||||
|
||||
- {Addressable::URI}
|
||||
- {Addressable::Template}
|
||||
|
||||
# Example usage
|
||||
|
||||
```ruby
|
||||
require "addressable/uri"
|
||||
|
||||
uri = Addressable::URI.parse("http://example.com/path/to/resource/")
|
||||
uri.scheme
|
||||
#=> "http"
|
||||
uri.host
|
||||
#=> "example.com"
|
||||
uri.path
|
||||
#=> "/path/to/resource/"
|
||||
|
||||
uri = Addressable::URI.parse("http://www.詹姆斯.com/")
|
||||
uri.normalize
|
||||
#=> #<Addressable::URI:0xc9a4c8 URI:http://www.xn--8ws00zhy3a.com/>
|
||||
```
|
||||
|
||||
|
||||
# URI Templates
|
||||
|
||||
For more details, see [RFC 6570](https://www.rfc-editor.org/rfc/rfc6570.txt).
|
||||
|
||||
|
||||
```ruby
|
||||
|
||||
require "addressable/template"
|
||||
|
||||
template = Addressable::Template.new("http://example.com/{?query*}/")
|
||||
template.expand({
|
||||
"query" => {
|
||||
'foo' => 'bar',
|
||||
'color' => 'red'
|
||||
}
|
||||
})
|
||||
#=> #<Addressable::URI:0xc9d95c URI:http://example.com/?foo=bar&color=red>
|
||||
|
||||
template = Addressable::Template.new("http://example.com/{?one,two,three}")
|
||||
template.partial_expand({"one" => "1", "three" => 3}).pattern
|
||||
#=> "http://example.com/?one=1{&two}&three=3"
|
||||
|
||||
template = Addressable::Template.new(
|
||||
"http://{host}{/segments*}/{?one,two,bogus}{#fragment}"
|
||||
)
|
||||
uri = Addressable::URI.parse(
|
||||
"http://example.com/a/b/c/?one=1&two=2#foo"
|
||||
)
|
||||
template.extract(uri)
|
||||
#=>
|
||||
# {
|
||||
# "host" => "example.com",
|
||||
# "segments" => ["a", "b", "c"],
|
||||
# "one" => "1",
|
||||
# "two" => "2",
|
||||
# "fragment" => "foo"
|
||||
# }
|
||||
```
|
||||
|
||||
# Install
|
||||
|
||||
```console
|
||||
$ gem install addressable
|
||||
```
|
||||
|
||||
You may optionally turn on native IDN support by installing libidn and the
|
||||
idn gem:
|
||||
|
||||
```console
|
||||
$ sudo apt-get install idn # Debian/Ubuntu
|
||||
$ brew install libidn # OS X
|
||||
$ gem install idn-ruby
|
||||
```
|
||||
|
||||
# Semantic Versioning
|
||||
|
||||
This project uses sementic versioning. You can (and should) specify your
|
||||
dependency using a pessimistic version constraint covering the major and minor
|
||||
values:
|
||||
|
||||
```ruby
|
||||
spec.add_dependency 'addressable', '~> 2.5'
|
||||
```
|
||||
|
||||
If you need a specific bug fix, you can also specify minimum tiny versions
|
||||
without preventing updates to the latest minor release:
|
||||
|
||||
```ruby
|
||||
spec.add_dependency 'addressable', '~> 2.3', '>= 2.3.7'
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
require 'rubygems'
|
||||
require 'rake'
|
||||
|
||||
require File.join(File.dirname(__FILE__), 'lib', 'addressable', 'version')
|
||||
|
||||
PKG_DISPLAY_NAME = 'Addressable'
|
||||
PKG_NAME = PKG_DISPLAY_NAME.downcase
|
||||
PKG_VERSION = Addressable::VERSION::STRING
|
||||
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||
|
||||
RELEASE_NAME = "REL #{PKG_VERSION}"
|
||||
|
||||
PKG_SUMMARY = "URI Implementation"
|
||||
PKG_DESCRIPTION = <<-TEXT
|
||||
Addressable is a replacement for the URI implementation that is part of
|
||||
Ruby's standard library. It more closely conforms to the relevant RFCs and
|
||||
adds support for IRIs and URI templates.
|
||||
TEXT
|
||||
|
||||
PKG_FILES = FileList[
|
||||
"lib/**/*", "spec/**/*", "vendor/**/*", "data/**/*",
|
||||
"tasks/**/*",
|
||||
"[A-Z]*", "Rakefile"
|
||||
].exclude(/pkg/).exclude(/database\.yml/).
|
||||
exclude(/Gemfile\.lock/).exclude(/[_\.]git$/)
|
||||
|
||||
task :default => "spec"
|
||||
|
||||
WINDOWS = (RUBY_PLATFORM =~ /mswin|win32|mingw|bccwin|cygwin/) rescue false
|
||||
SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
|
||||
|
||||
Dir['tasks/**/*.rake'].each { |rake| load rake }
|
||||
Binary file not shown.
@@ -1,2 +0,0 @@
|
||||
require 'addressable/uri'
|
||||
require 'addressable/template'
|
||||
@@ -1,25 +0,0 @@
|
||||
# encoding:utf-8
|
||||
#--
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#++
|
||||
|
||||
|
||||
begin
|
||||
require "addressable/idna/native"
|
||||
rescue LoadError
|
||||
# libidn or the idn gem was not available, fall back on a pure-Ruby
|
||||
# implementation...
|
||||
require "addressable/idna/pure"
|
||||
end
|
||||
@@ -1,59 +0,0 @@
|
||||
# encoding:utf-8
|
||||
#--
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#++
|
||||
|
||||
|
||||
require "idn"
|
||||
|
||||
module Addressable
|
||||
module IDNA
|
||||
def self.punycode_encode(value)
|
||||
IDN::Punycode.encode(value.to_s)
|
||||
end
|
||||
|
||||
def self.punycode_decode(value)
|
||||
IDN::Punycode.decode(value.to_s)
|
||||
end
|
||||
|
||||
def self.unicode_normalize_kc(value)
|
||||
IDN::Stringprep.nfkc_normalize(value.to_s)
|
||||
end
|
||||
|
||||
def self.to_ascii(value)
|
||||
value.to_s.split('.', -1).map do |segment|
|
||||
if segment.size > 0 && segment.size < 64
|
||||
IDN::Idna.toASCII(segment, IDN::Idna::ALLOW_UNASSIGNED)
|
||||
elsif segment.size >= 64
|
||||
segment
|
||||
else
|
||||
''
|
||||
end
|
||||
end.join('.')
|
||||
end
|
||||
|
||||
def self.to_unicode(value)
|
||||
value.to_s.split('.', -1).map do |segment|
|
||||
if segment.size > 0 && segment.size < 64
|
||||
IDN::Idna.toUnicode(segment, IDN::Idna::ALLOW_UNASSIGNED)
|
||||
elsif segment.size >= 64
|
||||
segment
|
||||
else
|
||||
''
|
||||
end
|
||||
end.join('.')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,677 +0,0 @@
|
||||
# encoding:utf-8
|
||||
#--
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#++
|
||||
|
||||
|
||||
module Addressable
|
||||
module IDNA
|
||||
# This module is loosely based on idn_actionmailer by Mick Staugaard,
|
||||
# the unicode library by Yoshida Masato, and the punycode implementation
|
||||
# by Kazuhiro Nishiyama. Most of the code was copied verbatim, but
|
||||
# some reformatting was done, and some translation from C was done.
|
||||
#
|
||||
# Without their code to work from as a base, we'd all still be relying
|
||||
# on the presence of libidn. Which nobody ever seems to have installed.
|
||||
#
|
||||
# Original sources:
|
||||
# http://github.com/staugaard/idn_actionmailer
|
||||
# http://www.yoshidam.net/Ruby.html#unicode
|
||||
# http://rubyforge.org/frs/?group_id=2550
|
||||
|
||||
|
||||
UNICODE_TABLE = File.expand_path(
|
||||
File.join(File.dirname(__FILE__), '../../..', 'data/unicode.data')
|
||||
)
|
||||
|
||||
ACE_PREFIX = "xn--"
|
||||
|
||||
UTF8_REGEX = /\A(?:
|
||||
[\x09\x0A\x0D\x20-\x7E] # ASCII
|
||||
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|
||||
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|
||||
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|
||||
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|
||||
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|
||||
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4nil5
|
||||
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
|
||||
)*\z/mnx
|
||||
|
||||
UTF8_REGEX_MULTIBYTE = /(?:
|
||||
[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|
||||
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|
||||
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|
||||
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|
||||
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
|
||||
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4nil5
|
||||
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
|
||||
)/mnx
|
||||
|
||||
# :startdoc:
|
||||
|
||||
# Converts from a Unicode internationalized domain name to an ASCII
|
||||
# domain name as described in RFC 3490.
|
||||
def self.to_ascii(input)
|
||||
input = input.to_s unless input.is_a?(String)
|
||||
input = input.dup
|
||||
if input.respond_to?(:force_encoding)
|
||||
input.force_encoding(Encoding::ASCII_8BIT)
|
||||
end
|
||||
if input =~ UTF8_REGEX && input =~ UTF8_REGEX_MULTIBYTE
|
||||
parts = unicode_downcase(input).split('.')
|
||||
parts.map! do |part|
|
||||
if part.respond_to?(:force_encoding)
|
||||
part.force_encoding(Encoding::ASCII_8BIT)
|
||||
end
|
||||
if part =~ UTF8_REGEX && part =~ UTF8_REGEX_MULTIBYTE
|
||||
ACE_PREFIX + punycode_encode(unicode_normalize_kc(part))
|
||||
else
|
||||
part
|
||||
end
|
||||
end
|
||||
parts.join('.')
|
||||
else
|
||||
input
|
||||
end
|
||||
end
|
||||
|
||||
# Converts from an ASCII domain name to a Unicode internationalized
|
||||
# domain name as described in RFC 3490.
|
||||
def self.to_unicode(input)
|
||||
input = input.to_s unless input.is_a?(String)
|
||||
parts = input.split('.')
|
||||
parts.map! do |part|
|
||||
if part =~ /^#{ACE_PREFIX}(.+)/
|
||||
begin
|
||||
punycode_decode(part[/^#{ACE_PREFIX}(.+)/, 1])
|
||||
rescue Addressable::IDNA::PunycodeBadInput
|
||||
# toUnicode is explicitly defined as never-fails by the spec
|
||||
part
|
||||
end
|
||||
else
|
||||
part
|
||||
end
|
||||
end
|
||||
output = parts.join('.')
|
||||
if output.respond_to?(:force_encoding)
|
||||
output.force_encoding(Encoding::UTF_8)
|
||||
end
|
||||
output
|
||||
end
|
||||
|
||||
# Unicode normalization form KC.
|
||||
def self.unicode_normalize_kc(input)
|
||||
input = input.to_s unless input.is_a?(String)
|
||||
unpacked = input.unpack("U*")
|
||||
unpacked =
|
||||
unicode_compose(unicode_sort_canonical(unicode_decompose(unpacked)))
|
||||
return unpacked.pack("U*")
|
||||
end
|
||||
|
||||
##
|
||||
# Unicode aware downcase method.
|
||||
#
|
||||
# @api private
|
||||
# @param [String] input
|
||||
# The input string.
|
||||
# @return [String] The downcased result.
|
||||
def self.unicode_downcase(input)
|
||||
input = input.to_s unless input.is_a?(String)
|
||||
unpacked = input.unpack("U*")
|
||||
unpacked.map! { |codepoint| lookup_unicode_lowercase(codepoint) }
|
||||
return unpacked.pack("U*")
|
||||
end
|
||||
(class <<self; private :unicode_downcase; end)
|
||||
|
||||
def self.unicode_compose(unpacked)
|
||||
unpacked_result = []
|
||||
length = unpacked.length
|
||||
|
||||
return unpacked if length == 0
|
||||
|
||||
starter = unpacked[0]
|
||||
starter_cc = lookup_unicode_combining_class(starter)
|
||||
starter_cc = 256 if starter_cc != 0
|
||||
for i in 1...length
|
||||
ch = unpacked[i]
|
||||
cc = lookup_unicode_combining_class(ch)
|
||||
|
||||
if (starter_cc == 0 &&
|
||||
(composite = unicode_compose_pair(starter, ch)) != nil)
|
||||
starter = composite
|
||||
startercc = lookup_unicode_combining_class(composite)
|
||||
else
|
||||
unpacked_result << starter
|
||||
starter = ch
|
||||
startercc = cc
|
||||
end
|
||||
end
|
||||
unpacked_result << starter
|
||||
return unpacked_result
|
||||
end
|
||||
(class <<self; private :unicode_compose; end)
|
||||
|
||||
def self.unicode_compose_pair(ch_one, ch_two)
|
||||
if ch_one >= HANGUL_LBASE && ch_one < HANGUL_LBASE + HANGUL_LCOUNT &&
|
||||
ch_two >= HANGUL_VBASE && ch_two < HANGUL_VBASE + HANGUL_VCOUNT
|
||||
# Hangul L + V
|
||||
return HANGUL_SBASE + (
|
||||
(ch_one - HANGUL_LBASE) * HANGUL_VCOUNT + (ch_two - HANGUL_VBASE)
|
||||
) * HANGUL_TCOUNT
|
||||
elsif ch_one >= HANGUL_SBASE &&
|
||||
ch_one < HANGUL_SBASE + HANGUL_SCOUNT &&
|
||||
(ch_one - HANGUL_SBASE) % HANGUL_TCOUNT == 0 &&
|
||||
ch_two >= HANGUL_TBASE && ch_two < HANGUL_TBASE + HANGUL_TCOUNT
|
||||
# Hangul LV + T
|
||||
return ch_one + (ch_two - HANGUL_TBASE)
|
||||
end
|
||||
|
||||
p = []
|
||||
ucs4_to_utf8 = lambda do |ch|
|
||||
if ch < 128
|
||||
p << ch
|
||||
elsif ch < 2048
|
||||
p << (ch >> 6 | 192)
|
||||
p << (ch & 63 | 128)
|
||||
elsif ch < 0x10000
|
||||
p << (ch >> 12 | 224)
|
||||
p << (ch >> 6 & 63 | 128)
|
||||
p << (ch & 63 | 128)
|
||||
elsif ch < 0x200000
|
||||
p << (ch >> 18 | 240)
|
||||
p << (ch >> 12 & 63 | 128)
|
||||
p << (ch >> 6 & 63 | 128)
|
||||
p << (ch & 63 | 128)
|
||||
elsif ch < 0x4000000
|
||||
p << (ch >> 24 | 248)
|
||||
p << (ch >> 18 & 63 | 128)
|
||||
p << (ch >> 12 & 63 | 128)
|
||||
p << (ch >> 6 & 63 | 128)
|
||||
p << (ch & 63 | 128)
|
||||
elsif ch < 0x80000000
|
||||
p << (ch >> 30 | 252)
|
||||
p << (ch >> 24 & 63 | 128)
|
||||
p << (ch >> 18 & 63 | 128)
|
||||
p << (ch >> 12 & 63 | 128)
|
||||
p << (ch >> 6 & 63 | 128)
|
||||
p << (ch & 63 | 128)
|
||||
end
|
||||
end
|
||||
|
||||
ucs4_to_utf8.call(ch_one)
|
||||
ucs4_to_utf8.call(ch_two)
|
||||
|
||||
return lookup_unicode_composition(p)
|
||||
end
|
||||
(class <<self; private :unicode_compose_pair; end)
|
||||
|
||||
def self.unicode_sort_canonical(unpacked)
|
||||
unpacked = unpacked.dup
|
||||
i = 1
|
||||
length = unpacked.length
|
||||
|
||||
return unpacked if length < 2
|
||||
|
||||
while i < length
|
||||
last = unpacked[i-1]
|
||||
ch = unpacked[i]
|
||||
last_cc = lookup_unicode_combining_class(last)
|
||||
cc = lookup_unicode_combining_class(ch)
|
||||
if cc != 0 && last_cc != 0 && last_cc > cc
|
||||
unpacked[i] = last
|
||||
unpacked[i-1] = ch
|
||||
i -= 1 if i > 1
|
||||
else
|
||||
i += 1
|
||||
end
|
||||
end
|
||||
return unpacked
|
||||
end
|
||||
(class <<self; private :unicode_sort_canonical; end)
|
||||
|
||||
def self.unicode_decompose(unpacked)
|
||||
unpacked_result = []
|
||||
for cp in unpacked
|
||||
if cp >= HANGUL_SBASE && cp < HANGUL_SBASE + HANGUL_SCOUNT
|
||||
l, v, t = unicode_decompose_hangul(cp)
|
||||
unpacked_result << l
|
||||
unpacked_result << v if v
|
||||
unpacked_result << t if t
|
||||
else
|
||||
dc = lookup_unicode_compatibility(cp)
|
||||
unless dc
|
||||
unpacked_result << cp
|
||||
else
|
||||
unpacked_result.concat(unicode_decompose(dc.unpack("U*")))
|
||||
end
|
||||
end
|
||||
end
|
||||
return unpacked_result
|
||||
end
|
||||
(class <<self; private :unicode_decompose; end)
|
||||
|
||||
def self.unicode_decompose_hangul(codepoint)
|
||||
sindex = codepoint - HANGUL_SBASE;
|
||||
if sindex < 0 || sindex >= HANGUL_SCOUNT
|
||||
l = codepoint
|
||||
v = t = nil
|
||||
return l, v, t
|
||||
end
|
||||
l = HANGUL_LBASE + sindex / HANGUL_NCOUNT
|
||||
v = HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT
|
||||
t = HANGUL_TBASE + sindex % HANGUL_TCOUNT
|
||||
if t == HANGUL_TBASE
|
||||
t = nil
|
||||
end
|
||||
return l, v, t
|
||||
end
|
||||
(class <<self; private :unicode_decompose_hangul; end)
|
||||
|
||||
def self.lookup_unicode_combining_class(codepoint)
|
||||
codepoint_data = UNICODE_DATA[codepoint]
|
||||
(codepoint_data ?
|
||||
(codepoint_data[UNICODE_DATA_COMBINING_CLASS] || 0) :
|
||||
0)
|
||||
end
|
||||
(class <<self; private :lookup_unicode_combining_class; end)
|
||||
|
||||
def self.lookup_unicode_compatibility(codepoint)
|
||||
codepoint_data = UNICODE_DATA[codepoint]
|
||||
(codepoint_data ?
|
||||
codepoint_data[UNICODE_DATA_COMPATIBILITY] : nil)
|
||||
end
|
||||
(class <<self; private :lookup_unicode_compatibility; end)
|
||||
|
||||
def self.lookup_unicode_lowercase(codepoint)
|
||||
codepoint_data = UNICODE_DATA[codepoint]
|
||||
(codepoint_data ?
|
||||
(codepoint_data[UNICODE_DATA_LOWERCASE] || codepoint) :
|
||||
codepoint)
|
||||
end
|
||||
(class <<self; private :lookup_unicode_lowercase; end)
|
||||
|
||||
def self.lookup_unicode_composition(unpacked)
|
||||
return COMPOSITION_TABLE[unpacked]
|
||||
end
|
||||
(class <<self; private :lookup_unicode_composition; end)
|
||||
|
||||
HANGUL_SBASE = 0xac00
|
||||
HANGUL_LBASE = 0x1100
|
||||
HANGUL_LCOUNT = 19
|
||||
HANGUL_VBASE = 0x1161
|
||||
HANGUL_VCOUNT = 21
|
||||
HANGUL_TBASE = 0x11a7
|
||||
HANGUL_TCOUNT = 28
|
||||
HANGUL_NCOUNT = HANGUL_VCOUNT * HANGUL_TCOUNT # 588
|
||||
HANGUL_SCOUNT = HANGUL_LCOUNT * HANGUL_NCOUNT # 11172
|
||||
|
||||
UNICODE_DATA_COMBINING_CLASS = 0
|
||||
UNICODE_DATA_EXCLUSION = 1
|
||||
UNICODE_DATA_CANONICAL = 2
|
||||
UNICODE_DATA_COMPATIBILITY = 3
|
||||
UNICODE_DATA_UPPERCASE = 4
|
||||
UNICODE_DATA_LOWERCASE = 5
|
||||
UNICODE_DATA_TITLECASE = 6
|
||||
|
||||
begin
|
||||
if defined?(FakeFS)
|
||||
fakefs_state = FakeFS.activated?
|
||||
FakeFS.deactivate!
|
||||
end
|
||||
# This is a sparse Unicode table. Codepoints without entries are
|
||||
# assumed to have the value: [0, 0, nil, nil, nil, nil, nil]
|
||||
UNICODE_DATA = File.open(UNICODE_TABLE, "rb") do |file|
|
||||
Marshal.load(file.read)
|
||||
end
|
||||
ensure
|
||||
if defined?(FakeFS)
|
||||
FakeFS.activate! if fakefs_state
|
||||
end
|
||||
end
|
||||
|
||||
COMPOSITION_TABLE = {}
|
||||
for codepoint, data in UNICODE_DATA
|
||||
canonical = data[UNICODE_DATA_CANONICAL]
|
||||
exclusion = data[UNICODE_DATA_EXCLUSION]
|
||||
|
||||
if canonical && exclusion == 0
|
||||
COMPOSITION_TABLE[canonical.unpack("C*")] = codepoint
|
||||
end
|
||||
end
|
||||
|
||||
UNICODE_MAX_LENGTH = 256
|
||||
ACE_MAX_LENGTH = 256
|
||||
|
||||
PUNYCODE_BASE = 36
|
||||
PUNYCODE_TMIN = 1
|
||||
PUNYCODE_TMAX = 26
|
||||
PUNYCODE_SKEW = 38
|
||||
PUNYCODE_DAMP = 700
|
||||
PUNYCODE_INITIAL_BIAS = 72
|
||||
PUNYCODE_INITIAL_N = 0x80
|
||||
PUNYCODE_DELIMITER = 0x2D
|
||||
|
||||
PUNYCODE_MAXINT = 1 << 64
|
||||
|
||||
PUNYCODE_PRINT_ASCII =
|
||||
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" +
|
||||
"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" +
|
||||
" !\"\#$%&'()*+,-./" +
|
||||
"0123456789:;<=>?" +
|
||||
"@ABCDEFGHIJKLMNO" +
|
||||
"PQRSTUVWXYZ[\\]^_" +
|
||||
"`abcdefghijklmno" +
|
||||
"pqrstuvwxyz{|}~\n"
|
||||
|
||||
# Input is invalid.
|
||||
class PunycodeBadInput < StandardError; end
|
||||
# Output would exceed the space provided.
|
||||
class PunycodeBigOutput < StandardError; end
|
||||
# Input needs wider integers to process.
|
||||
class PunycodeOverflow < StandardError; end
|
||||
|
||||
def self.punycode_encode(unicode)
|
||||
unicode = unicode.to_s unless unicode.is_a?(String)
|
||||
input = unicode.unpack("U*")
|
||||
output = [0] * (ACE_MAX_LENGTH + 1)
|
||||
input_length = input.size
|
||||
output_length = [ACE_MAX_LENGTH]
|
||||
|
||||
# Initialize the state
|
||||
n = PUNYCODE_INITIAL_N
|
||||
delta = out = 0
|
||||
max_out = output_length[0]
|
||||
bias = PUNYCODE_INITIAL_BIAS
|
||||
|
||||
# Handle the basic code points:
|
||||
input_length.times do |j|
|
||||
if punycode_basic?(input[j])
|
||||
if max_out - out < 2
|
||||
raise PunycodeBigOutput,
|
||||
"Output would exceed the space provided."
|
||||
end
|
||||
output[out] = input[j]
|
||||
out += 1
|
||||
end
|
||||
end
|
||||
|
||||
h = b = out
|
||||
|
||||
# h is the number of code points that have been handled, b is the
|
||||
# number of basic code points, and out is the number of characters
|
||||
# that have been output.
|
||||
|
||||
if b > 0
|
||||
output[out] = PUNYCODE_DELIMITER
|
||||
out += 1
|
||||
end
|
||||
|
||||
# Main encoding loop:
|
||||
|
||||
while h < input_length
|
||||
# All non-basic code points < n have been
|
||||
# handled already. Find the next larger one:
|
||||
|
||||
m = PUNYCODE_MAXINT
|
||||
input_length.times do |j|
|
||||
m = input[j] if (n...m) === input[j]
|
||||
end
|
||||
|
||||
# Increase delta enough to advance the decoder's
|
||||
# <n,i> state to <m,0>, but guard against overflow:
|
||||
|
||||
if m - n > (PUNYCODE_MAXINT - delta) / (h + 1)
|
||||
raise PunycodeOverflow, "Input needs wider integers to process."
|
||||
end
|
||||
delta += (m - n) * (h + 1)
|
||||
n = m
|
||||
|
||||
input_length.times do |j|
|
||||
# Punycode does not need to check whether input[j] is basic:
|
||||
if input[j] < n
|
||||
delta += 1
|
||||
if delta == 0
|
||||
raise PunycodeOverflow,
|
||||
"Input needs wider integers to process."
|
||||
end
|
||||
end
|
||||
|
||||
if input[j] == n
|
||||
# Represent delta as a generalized variable-length integer:
|
||||
|
||||
q = delta; k = PUNYCODE_BASE
|
||||
while true
|
||||
if out >= max_out
|
||||
raise PunycodeBigOutput,
|
||||
"Output would exceed the space provided."
|
||||
end
|
||||
t = (
|
||||
if k <= bias
|
||||
PUNYCODE_TMIN
|
||||
elsif k >= bias + PUNYCODE_TMAX
|
||||
PUNYCODE_TMAX
|
||||
else
|
||||
k - bias
|
||||
end
|
||||
)
|
||||
break if q < t
|
||||
output[out] =
|
||||
punycode_encode_digit(t + (q - t) % (PUNYCODE_BASE - t))
|
||||
out += 1
|
||||
q = (q - t) / (PUNYCODE_BASE - t)
|
||||
k += PUNYCODE_BASE
|
||||
end
|
||||
|
||||
output[out] = punycode_encode_digit(q)
|
||||
out += 1
|
||||
bias = punycode_adapt(delta, h + 1, h == b)
|
||||
delta = 0
|
||||
h += 1
|
||||
end
|
||||
end
|
||||
|
||||
delta += 1
|
||||
n += 1
|
||||
end
|
||||
|
||||
output_length[0] = out
|
||||
|
||||
outlen = out
|
||||
outlen.times do |j|
|
||||
c = output[j]
|
||||
unless c >= 0 && c <= 127
|
||||
raise StandardError, "Invalid output char."
|
||||
end
|
||||
unless PUNYCODE_PRINT_ASCII[c]
|
||||
raise PunycodeBadInput, "Input is invalid."
|
||||
end
|
||||
end
|
||||
|
||||
output[0..outlen].map { |x| x.chr }.join("").sub(/\0+\z/, "")
|
||||
end
|
||||
(class <<self; private :punycode_encode; end)
|
||||
|
||||
def self.punycode_decode(punycode)
|
||||
input = []
|
||||
output = []
|
||||
|
||||
if ACE_MAX_LENGTH * 2 < punycode.size
|
||||
raise PunycodeBigOutput, "Output would exceed the space provided."
|
||||
end
|
||||
punycode.each_byte do |c|
|
||||
unless c >= 0 && c <= 127
|
||||
raise PunycodeBadInput, "Input is invalid."
|
||||
end
|
||||
input.push(c)
|
||||
end
|
||||
|
||||
input_length = input.length
|
||||
output_length = [UNICODE_MAX_LENGTH]
|
||||
|
||||
# Initialize the state
|
||||
n = PUNYCODE_INITIAL_N
|
||||
|
||||
out = i = 0
|
||||
max_out = output_length[0]
|
||||
bias = PUNYCODE_INITIAL_BIAS
|
||||
|
||||
# Handle the basic code points: Let b be the number of input code
|
||||
# points before the last delimiter, or 0 if there is none, then
|
||||
# copy the first b code points to the output.
|
||||
|
||||
b = 0
|
||||
input_length.times do |j|
|
||||
b = j if punycode_delimiter?(input[j])
|
||||
end
|
||||
if b > max_out
|
||||
raise PunycodeBigOutput, "Output would exceed the space provided."
|
||||
end
|
||||
|
||||
b.times do |j|
|
||||
unless punycode_basic?(input[j])
|
||||
raise PunycodeBadInput, "Input is invalid."
|
||||
end
|
||||
output[out] = input[j]
|
||||
out+=1
|
||||
end
|
||||
|
||||
# Main decoding loop: Start just after the last delimiter if any
|
||||
# basic code points were copied; start at the beginning otherwise.
|
||||
|
||||
in_ = b > 0 ? b + 1 : 0
|
||||
while in_ < input_length
|
||||
|
||||
# in_ is the index of the next character to be consumed, and
|
||||
# out is the number of code points in the output array.
|
||||
|
||||
# Decode a generalized variable-length integer into delta,
|
||||
# which gets added to i. The overflow checking is easier
|
||||
# if we increase i as we go, then subtract off its starting
|
||||
# value at the end to obtain delta.
|
||||
|
||||
oldi = i; w = 1; k = PUNYCODE_BASE
|
||||
while true
|
||||
if in_ >= input_length
|
||||
raise PunycodeBadInput, "Input is invalid."
|
||||
end
|
||||
digit = punycode_decode_digit(input[in_])
|
||||
in_+=1
|
||||
if digit >= PUNYCODE_BASE
|
||||
raise PunycodeBadInput, "Input is invalid."
|
||||
end
|
||||
if digit > (PUNYCODE_MAXINT - i) / w
|
||||
raise PunycodeOverflow, "Input needs wider integers to process."
|
||||
end
|
||||
i += digit * w
|
||||
t = (
|
||||
if k <= bias
|
||||
PUNYCODE_TMIN
|
||||
elsif k >= bias + PUNYCODE_TMAX
|
||||
PUNYCODE_TMAX
|
||||
else
|
||||
k - bias
|
||||
end
|
||||
)
|
||||
break if digit < t
|
||||
if w > PUNYCODE_MAXINT / (PUNYCODE_BASE - t)
|
||||
raise PunycodeOverflow, "Input needs wider integers to process."
|
||||
end
|
||||
w *= PUNYCODE_BASE - t
|
||||
k += PUNYCODE_BASE
|
||||
end
|
||||
|
||||
bias = punycode_adapt(i - oldi, out + 1, oldi == 0)
|
||||
|
||||
# I was supposed to wrap around from out + 1 to 0,
|
||||
# incrementing n each time, so we'll fix that now:
|
||||
|
||||
if i / (out + 1) > PUNYCODE_MAXINT - n
|
||||
raise PunycodeOverflow, "Input needs wider integers to process."
|
||||
end
|
||||
n += i / (out + 1)
|
||||
i %= out + 1
|
||||
|
||||
# Insert n at position i of the output:
|
||||
|
||||
# not needed for Punycode:
|
||||
# raise PUNYCODE_INVALID_INPUT if decode_digit(n) <= base
|
||||
if out >= max_out
|
||||
raise PunycodeBigOutput, "Output would exceed the space provided."
|
||||
end
|
||||
|
||||
#memmove(output + i + 1, output + i, (out - i) * sizeof *output)
|
||||
output[i + 1, out - i] = output[i, out - i]
|
||||
output[i] = n
|
||||
i += 1
|
||||
|
||||
out += 1
|
||||
end
|
||||
|
||||
output_length[0] = out
|
||||
|
||||
output.pack("U*")
|
||||
end
|
||||
(class <<self; private :punycode_decode; end)
|
||||
|
||||
def self.punycode_basic?(codepoint)
|
||||
codepoint < 0x80
|
||||
end
|
||||
(class <<self; private :punycode_basic?; end)
|
||||
|
||||
def self.punycode_delimiter?(codepoint)
|
||||
codepoint == PUNYCODE_DELIMITER
|
||||
end
|
||||
(class <<self; private :punycode_delimiter?; end)
|
||||
|
||||
def self.punycode_encode_digit(d)
|
||||
d + 22 + 75 * ((d < 26) ? 1 : 0)
|
||||
end
|
||||
(class <<self; private :punycode_encode_digit; end)
|
||||
|
||||
# Returns the numeric value of a basic codepoint
|
||||
# (for use in representing integers) in the range 0 to
|
||||
# base - 1, or PUNYCODE_BASE if codepoint does not represent a value.
|
||||
def self.punycode_decode_digit(codepoint)
|
||||
if codepoint - 48 < 10
|
||||
codepoint - 22
|
||||
elsif codepoint - 65 < 26
|
||||
codepoint - 65
|
||||
elsif codepoint - 97 < 26
|
||||
codepoint - 97
|
||||
else
|
||||
PUNYCODE_BASE
|
||||
end
|
||||
end
|
||||
(class <<self; private :punycode_decode_digit; end)
|
||||
|
||||
# Bias adaptation method
|
||||
def self.punycode_adapt(delta, numpoints, firsttime)
|
||||
delta = firsttime ? delta / PUNYCODE_DAMP : delta >> 1
|
||||
# delta >> 1 is a faster way of doing delta / 2
|
||||
delta += delta / numpoints
|
||||
difference = PUNYCODE_BASE - PUNYCODE_TMIN
|
||||
|
||||
k = 0
|
||||
while delta > (difference * PUNYCODE_TMAX) / 2
|
||||
delta /= difference
|
||||
k += PUNYCODE_BASE
|
||||
end
|
||||
|
||||
k + (difference + 1) * delta / (delta + PUNYCODE_SKEW)
|
||||
end
|
||||
(class <<self; private :punycode_adapt; end)
|
||||
end
|
||||
# :startdoc:
|
||||
end
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,30 +0,0 @@
|
||||
# encoding:utf-8
|
||||
#--
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#++
|
||||
|
||||
|
||||
# Used to prevent the class/module from being loaded more than once
|
||||
if !defined?(Addressable::VERSION)
|
||||
module Addressable
|
||||
module VERSION
|
||||
MAJOR = 2
|
||||
MINOR = 5
|
||||
TINY = 2
|
||||
|
||||
STRING = [MAJOR, MINOR, TINY].join('.')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,298 +0,0 @@
|
||||
# coding: utf-8
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
# Have to use RubyGems to load the idn gem.
|
||||
require "rubygems"
|
||||
|
||||
require "addressable/idna"
|
||||
|
||||
shared_examples_for "converting from unicode to ASCII" do
|
||||
it "should convert 'www.google.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii("www.google.com")).to eq("www.google.com")
|
||||
end
|
||||
|
||||
LONG = 'AcinusFallumTrompetumNullunCreditumVisumEstAtCuadLongumEtCefallum.com'
|
||||
it "should convert '#{LONG}' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(LONG)).to eq(LONG)
|
||||
end
|
||||
|
||||
it "should convert 'www.詹姆斯.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"www.詹姆斯.com"
|
||||
)).to eq("www.xn--8ws00zhy3a.com")
|
||||
end
|
||||
|
||||
it "should convert 'www.Iñtërnâtiônàlizætiøn.com' correctly" do
|
||||
"www.Iñtërnâtiônàlizætiøn.com"
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"www.I\xC3\xB1t\xC3\xABrn\xC3\xA2ti\xC3\xB4" +
|
||||
"n\xC3\xA0liz\xC3\xA6ti\xC3\xB8n.com"
|
||||
)).to eq("www.xn--itrntinliztin-vdb0a5exd8ewcye.com")
|
||||
end
|
||||
|
||||
it "should convert 'www.Iñtërnâtiônàlizætiøn.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"www.In\xCC\x83te\xCC\x88rna\xCC\x82tio\xCC\x82n" +
|
||||
"a\xCC\x80liz\xC3\xA6ti\xC3\xB8n.com"
|
||||
)).to eq("www.xn--itrntinliztin-vdb0a5exd8ewcye.com")
|
||||
end
|
||||
|
||||
it "should convert " +
|
||||
"'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " +
|
||||
"correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"www.\343\201\273\343\202\223\343\201\250\343\201\206\343\201\253\343" +
|
||||
"\201\252\343\201\214\343\201\204\343\202\217\343\201\221\343\201\256" +
|
||||
"\343\202\217\343\201\213\343\202\211\343\201\252\343\201\204\343\201" +
|
||||
"\251\343\202\201\343\201\204\343\202\223\343\202\201\343\201\204\343" +
|
||||
"\201\256\343\202\211\343\201\271\343\202\213\343\201\276\343\201\240" +
|
||||
"\343\201\252\343\201\214\343\201\217\343\201\227\343\201\252\343\201" +
|
||||
"\204\343\201\250\343\201\237\343\202\212\343\201\252\343\201\204." +
|
||||
"w3.mag.keio.ac.jp"
|
||||
)).to eq(
|
||||
"www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" +
|
||||
"fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
|
||||
)
|
||||
end
|
||||
|
||||
it "should convert " +
|
||||
"'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " +
|
||||
"correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"www.\343\201\273\343\202\223\343\201\250\343\201\206\343\201\253\343" +
|
||||
"\201\252\343\201\213\343\202\231\343\201\204\343\202\217\343\201\221" +
|
||||
"\343\201\256\343\202\217\343\201\213\343\202\211\343\201\252\343\201" +
|
||||
"\204\343\201\250\343\202\231\343\202\201\343\201\204\343\202\223\343" +
|
||||
"\202\201\343\201\204\343\201\256\343\202\211\343\201\270\343\202\231" +
|
||||
"\343\202\213\343\201\276\343\201\237\343\202\231\343\201\252\343\201" +
|
||||
"\213\343\202\231\343\201\217\343\201\227\343\201\252\343\201\204\343" +
|
||||
"\201\250\343\201\237\343\202\212\343\201\252\343\201\204." +
|
||||
"w3.mag.keio.ac.jp"
|
||||
)).to eq(
|
||||
"www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" +
|
||||
"fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
|
||||
)
|
||||
end
|
||||
|
||||
it "should convert '点心和烤鸭.w3.mag.keio.ac.jp' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"点心和烤鸭.w3.mag.keio.ac.jp"
|
||||
)).to eq("xn--0trv4xfvn8el34t.w3.mag.keio.ac.jp")
|
||||
end
|
||||
|
||||
it "should convert '가각갂갃간갅갆갇갈갉힢힣.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"가각갂갃간갅갆갇갈갉힢힣.com"
|
||||
)).to eq("xn--o39acdefghijk5883jma.com")
|
||||
end
|
||||
|
||||
it "should convert " +
|
||||
"'\347\242\274\346\250\231\346\272\226\350" +
|
||||
"\220\254\345\234\213\347\242\274.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"\347\242\274\346\250\231\346\272\226\350" +
|
||||
"\220\254\345\234\213\347\242\274.com"
|
||||
)).to eq("xn--9cs565brid46mda086o.com")
|
||||
end
|
||||
|
||||
it "should convert 'リ宠퐱〹.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"\357\276\230\345\256\240\355\220\261\343\200\271.com"
|
||||
)).to eq("xn--eek174hoxfpr4k.com")
|
||||
end
|
||||
|
||||
it "should convert 'リ宠퐱卄.com' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"\343\203\252\345\256\240\355\220\261\345\215\204.com"
|
||||
)).to eq("xn--eek174hoxfpr4k.com")
|
||||
end
|
||||
|
||||
it "should convert 'ᆵ' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"\341\206\265"
|
||||
)).to eq("xn--4ud")
|
||||
end
|
||||
|
||||
it "should convert 'ᆵ' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"\357\276\257"
|
||||
)).to eq("xn--4ud")
|
||||
end
|
||||
|
||||
it "should convert '🌹🌹🌹.ws' correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"\360\237\214\271\360\237\214\271\360\237\214\271.ws"
|
||||
)).to eq("xn--2h8haa.ws")
|
||||
end
|
||||
|
||||
it "should handle two adjacent '.'s correctly" do
|
||||
expect(Addressable::IDNA.to_ascii(
|
||||
"example..host"
|
||||
)).to eq("example..host")
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for "converting from ASCII to unicode" do
|
||||
LONG = 'AcinusFallumTrompetumNullunCreditumVisumEstAtCuadLongumEtCefallum.com'
|
||||
it "should convert '#{LONG}' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(LONG)).to eq(LONG)
|
||||
end
|
||||
|
||||
it "should return the identity conversion when punycode decode fails" do
|
||||
expect(Addressable::IDNA.to_unicode("xn--zckp1cyg1.sblo.jp")).to eq(
|
||||
"xn--zckp1cyg1.sblo.jp")
|
||||
end
|
||||
|
||||
it "should return the identity conversion when the ACE prefix has no suffix" do
|
||||
expect(Addressable::IDNA.to_unicode("xn--...-")).to eq("xn--...-")
|
||||
end
|
||||
|
||||
it "should convert 'www.google.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode("www.google.com")).to eq(
|
||||
"www.google.com")
|
||||
end
|
||||
|
||||
it "should convert 'www.詹姆斯.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"www.xn--8ws00zhy3a.com"
|
||||
)).to eq("www.詹姆斯.com")
|
||||
end
|
||||
|
||||
it "should convert '詹姆斯.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--8ws00zhy3a.com"
|
||||
)).to eq("詹姆斯.com")
|
||||
end
|
||||
|
||||
it "should convert 'www.iñtërnâtiônàlizætiøn.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"www.xn--itrntinliztin-vdb0a5exd8ewcye.com"
|
||||
)).to eq("www.iñtërnâtiônàlizætiøn.com")
|
||||
end
|
||||
|
||||
it "should convert 'iñtërnâtiônàlizætiøn.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--itrntinliztin-vdb0a5exd8ewcye.com"
|
||||
)).to eq("iñtërnâtiônàlizætiøn.com")
|
||||
end
|
||||
|
||||
it "should convert " +
|
||||
"'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " +
|
||||
"correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" +
|
||||
"fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp"
|
||||
)).to eq(
|
||||
"www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp"
|
||||
)
|
||||
end
|
||||
|
||||
it "should convert '点心和烤鸭.w3.mag.keio.ac.jp' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--0trv4xfvn8el34t.w3.mag.keio.ac.jp"
|
||||
)).to eq("点心和烤鸭.w3.mag.keio.ac.jp")
|
||||
end
|
||||
|
||||
it "should convert '가각갂갃간갅갆갇갈갉힢힣.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--o39acdefghijk5883jma.com"
|
||||
)).to eq("가각갂갃간갅갆갇갈갉힢힣.com")
|
||||
end
|
||||
|
||||
it "should convert " +
|
||||
"'\347\242\274\346\250\231\346\272\226\350" +
|
||||
"\220\254\345\234\213\347\242\274.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--9cs565brid46mda086o.com"
|
||||
)).to eq(
|
||||
"\347\242\274\346\250\231\346\272\226\350" +
|
||||
"\220\254\345\234\213\347\242\274.com"
|
||||
)
|
||||
end
|
||||
|
||||
it "should convert 'リ宠퐱卄.com' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--eek174hoxfpr4k.com"
|
||||
)).to eq("\343\203\252\345\256\240\355\220\261\345\215\204.com")
|
||||
end
|
||||
|
||||
it "should convert 'ᆵ' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--4ud"
|
||||
)).to eq("\341\206\265")
|
||||
end
|
||||
|
||||
it "should convert '🌹🌹🌹.ws' correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"xn--2h8haa.ws"
|
||||
)).to eq("\360\237\214\271\360\237\214\271\360\237\214\271.ws")
|
||||
end
|
||||
|
||||
it "should handle two adjacent '.'s correctly" do
|
||||
expect(Addressable::IDNA.to_unicode(
|
||||
"example..host"
|
||||
)).to eq("example..host")
|
||||
end
|
||||
|
||||
it "should normalize 'string' correctly" do
|
||||
expect(Addressable::IDNA.unicode_normalize_kc(:'string')).to eq("string")
|
||||
expect(Addressable::IDNA.unicode_normalize_kc("string")).to eq("string")
|
||||
end
|
||||
end
|
||||
|
||||
describe Addressable::IDNA, "when using the pure-Ruby implementation" do
|
||||
before do
|
||||
Addressable.send(:remove_const, :IDNA)
|
||||
load "addressable/idna/pure.rb"
|
||||
end
|
||||
|
||||
it_should_behave_like "converting from unicode to ASCII"
|
||||
it_should_behave_like "converting from ASCII to unicode"
|
||||
|
||||
begin
|
||||
require "fiber"
|
||||
|
||||
it "should not blow up inside fibers" do
|
||||
f = Fiber.new do
|
||||
Addressable.send(:remove_const, :IDNA)
|
||||
load "addressable/idna/pure.rb"
|
||||
end
|
||||
f.resume
|
||||
end
|
||||
rescue LoadError
|
||||
# Fibers aren't supported in this version of Ruby, skip this test.
|
||||
warn('Fibers unsupported.')
|
||||
end
|
||||
end
|
||||
|
||||
begin
|
||||
require "idn"
|
||||
|
||||
describe Addressable::IDNA, "when using the native-code implementation" do
|
||||
before do
|
||||
Addressable.send(:remove_const, :IDNA)
|
||||
load "addressable/idna/native.rb"
|
||||
end
|
||||
|
||||
it_should_behave_like "converting from unicode to ASCII"
|
||||
it_should_behave_like "converting from ASCII to unicode"
|
||||
end
|
||||
rescue LoadError
|
||||
# Cannot test the native implementation without libidn support.
|
||||
warn('Could not load native IDN implementation.')
|
||||
end
|
||||
@@ -1,28 +0,0 @@
|
||||
# coding: utf-8
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
require "addressable/uri"
|
||||
require "net/http"
|
||||
|
||||
describe Net::HTTP do
|
||||
it "should be compatible with Addressable" do
|
||||
response_body =
|
||||
Net::HTTP.get(Addressable::URI.parse('http://www.google.com/'))
|
||||
expect(response_body).not_to be_nil
|
||||
end
|
||||
end
|
||||
@@ -1,104 +0,0 @@
|
||||
# coding: utf-8
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
require "addressable/uri"
|
||||
require "addressable/template"
|
||||
require "rack/mount"
|
||||
|
||||
describe Rack::Mount do
|
||||
let(:app_one) do
|
||||
proc { |env| [200, {'Content-Type' => 'text/plain'}, 'Route 1'] }
|
||||
end
|
||||
let(:app_two) do
|
||||
proc { |env| [200, {'Content-Type' => 'text/plain'}, 'Route 2'] }
|
||||
end
|
||||
let(:app_three) do
|
||||
proc { |env| [200, {'Content-Type' => 'text/plain'}, 'Route 3'] }
|
||||
end
|
||||
let(:routes) do
|
||||
s = Rack::Mount::RouteSet.new do |set|
|
||||
set.add_route(app_one, {
|
||||
:request_method => 'GET',
|
||||
:path_info => Addressable::Template.new('/one/{id}/')
|
||||
}, {:id => 'unidentified'}, :one)
|
||||
set.add_route(app_two, {
|
||||
:request_method => 'GET',
|
||||
:path_info => Addressable::Template.new('/two/')
|
||||
}, {:id => 'unidentified'}, :two)
|
||||
set.add_route(app_three, {
|
||||
:request_method => 'GET',
|
||||
:path_info => Addressable::Template.new('/three/{id}/').to_regexp
|
||||
}, {:id => 'unidentified'}, :three)
|
||||
end
|
||||
s.rehash
|
||||
s
|
||||
end
|
||||
|
||||
it "should generate from routes with Addressable::Template" do
|
||||
path, _ = routes.generate(:path_info, :one, {:id => '123'})
|
||||
expect(path).to eq '/one/123/'
|
||||
end
|
||||
|
||||
it "should generate from routes with Addressable::Template using defaults" do
|
||||
path, _ = routes.generate(:path_info, :one, {})
|
||||
expect(path).to eq '/one/unidentified/'
|
||||
end
|
||||
|
||||
it "should recognize routes with Addressable::Template" do
|
||||
request = Rack::Request.new(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'PATH_INFO' => '/one/123/'
|
||||
)
|
||||
route, _, params = routes.recognize(request)
|
||||
expect(route).not_to be_nil
|
||||
expect(route.app).to eq app_one
|
||||
expect(params).to eq({id: '123'})
|
||||
end
|
||||
|
||||
it "should generate from routes with Addressable::Template" do
|
||||
path, _ = routes.generate(:path_info, :two, {:id => '654'})
|
||||
expect(path).to eq '/two/'
|
||||
end
|
||||
|
||||
it "should generate from routes with Addressable::Template using defaults" do
|
||||
path, _ = routes.generate(:path_info, :two, {})
|
||||
expect(path).to eq '/two/'
|
||||
end
|
||||
|
||||
it "should recognize routes with Addressable::Template" do
|
||||
request = Rack::Request.new(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'PATH_INFO' => '/two/'
|
||||
)
|
||||
route, _, params = routes.recognize(request)
|
||||
expect(route).not_to be_nil
|
||||
expect(route.app).to eq app_two
|
||||
expect(params).to eq({id: 'unidentified'})
|
||||
end
|
||||
|
||||
it "should recognize routes with derived Regexp" do
|
||||
request = Rack::Request.new(
|
||||
'REQUEST_METHOD' => 'GET',
|
||||
'PATH_INFO' => '/three/789/'
|
||||
)
|
||||
route, _, params = routes.recognize(request)
|
||||
expect(route).not_to be_nil
|
||||
expect(route.app).to eq app_three
|
||||
expect(params).to eq({id: '789'})
|
||||
end
|
||||
end
|
||||
@@ -1,57 +0,0 @@
|
||||
# coding: utf-8
|
||||
# Copyright (C) Bob Aman
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
require "spec_helper"
|
||||
|
||||
require "addressable/uri"
|
||||
|
||||
describe Addressable::URI, "when created with a URI known to cause crashes " +
|
||||
"in certain browsers" do
|
||||
it "should parse correctly" do
|
||||
uri = Addressable::URI.parse('%%30%30')
|
||||
expect(uri.path).to eq('%%30%30')
|
||||
expect(uri.normalize.path).to eq('%2500')
|
||||
end
|
||||
|
||||
it "should parse correctly as a full URI" do
|
||||
uri = Addressable::URI.parse('http://www.example.com/%%30%30')
|
||||
expect(uri.path).to eq('/%%30%30')
|
||||
expect(uri.normalize.path).to eq('/%2500')
|
||||
end
|
||||
end
|
||||
|
||||
describe Addressable::URI, "when created with a URI known to cause crashes " +
|
||||
"in certain browsers" do
|
||||
it "should parse correctly" do
|
||||
uri = Addressable::URI.parse('لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
|
||||
expect(uri.path).to eq('لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
|
||||
expect(uri.normalize.path).to eq(
|
||||
'%D9%84%D9%8F%D8%B5%D9%91%D8%A8%D9%8F%D9%84%D9%8F%D9%84%D8%B5%D9%91' +
|
||||
'%D8%A8%D9%8F%D8%B1%D8%B1%D9%8B%20%E0%A5%A3%20%E0%A5%A3h%20%E0%A5' +
|
||||
'%A3%20%E0%A5%A3%20%E5%86%97'
|
||||
)
|
||||
end
|
||||
|
||||
it "should parse correctly as a full URI" do
|
||||
uri = Addressable::URI.parse('http://www.example.com/لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
|
||||
expect(uri.path).to eq('/لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗')
|
||||
expect(uri.normalize.path).to eq(
|
||||
'/%D9%84%D9%8F%D8%B5%D9%91%D8%A8%D9%8F%D9%84%D9%8F%D9%84%D8%B5%D9%91' +
|
||||
'%D8%A8%D9%8F%D8%B1%D8%B1%D9%8B%20%E0%A5%A3%20%E0%A5%A3h%20%E0%A5' +
|
||||
'%A3%20%E0%A5%A3%20%E5%86%97'
|
||||
)
|
||||
end
|
||||
end
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,21 +0,0 @@
|
||||
require 'bundler/setup'
|
||||
require 'rspec/its'
|
||||
|
||||
begin
|
||||
require 'coveralls'
|
||||
Coveralls.wear! do
|
||||
add_filter "spec/"
|
||||
add_filter "vendor/"
|
||||
end
|
||||
rescue LoadError
|
||||
warn "warning: coveralls gem not found; skipping Coveralls"
|
||||
require 'simplecov'
|
||||
SimpleCov.start do
|
||||
add_filter "spec/"
|
||||
add_filter "vendor/"
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
config.warnings = true
|
||||
end
|
||||
@@ -1,2 +0,0 @@
|
||||
desc "Remove all build products"
|
||||
task "clobber"
|
||||
@@ -1,91 +0,0 @@
|
||||
require "rubygems/package_task"
|
||||
|
||||
namespace :gem do
|
||||
GEM_SPEC = Gem::Specification.new do |s|
|
||||
s.name = PKG_NAME
|
||||
s.version = PKG_VERSION
|
||||
s.summary = PKG_SUMMARY
|
||||
s.description = PKG_DESCRIPTION
|
||||
|
||||
s.files = PKG_FILES.to_a
|
||||
|
||||
s.has_rdoc = true
|
||||
s.extra_rdoc_files = %w( README.md )
|
||||
s.rdoc_options.concat ["--main", "README.md"]
|
||||
|
||||
if !s.respond_to?(:add_development_dependency)
|
||||
puts "Cannot build Gem with this version of RubyGems."
|
||||
exit(1)
|
||||
end
|
||||
|
||||
s.required_ruby_version = '>= 2.0'
|
||||
|
||||
s.add_runtime_dependency 'public_suffix', '>= 2.0.2', '< 4.0'
|
||||
s.add_development_dependency 'bundler', '~> 1.0'
|
||||
|
||||
s.require_path = "lib"
|
||||
|
||||
s.author = "Bob Aman"
|
||||
s.email = "bob@sporkmonger.com"
|
||||
s.homepage = "https://github.com/sporkmonger/addressable"
|
||||
s.license = "Apache-2.0"
|
||||
end
|
||||
|
||||
Gem::PackageTask.new(GEM_SPEC) do |p|
|
||||
p.gem_spec = GEM_SPEC
|
||||
p.need_tar = true
|
||||
p.need_zip = true
|
||||
end
|
||||
|
||||
desc "Generates .gemspec file"
|
||||
task :gemspec do
|
||||
spec_string = GEM_SPEC.to_ruby
|
||||
File.open("#{GEM_SPEC.name}.gemspec", 'w') do |file|
|
||||
file.write spec_string
|
||||
end
|
||||
end
|
||||
|
||||
desc "Show information about the gem"
|
||||
task :debug do
|
||||
puts GEM_SPEC.to_ruby
|
||||
end
|
||||
|
||||
desc "Install the gem"
|
||||
task :install => ["clobber", "gem:package"] do
|
||||
sh "#{SUDO} gem install --local pkg/#{GEM_SPEC.full_name}"
|
||||
end
|
||||
|
||||
desc "Uninstall the gem"
|
||||
task :uninstall do
|
||||
installed_list = Gem.source_index.find_name(PKG_NAME)
|
||||
if installed_list &&
|
||||
(installed_list.collect { |s| s.version.to_s}.include?(PKG_VERSION))
|
||||
sh(
|
||||
"#{SUDO} gem uninstall --version '#{PKG_VERSION}' " +
|
||||
"--ignore-dependencies --executables #{PKG_NAME}"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
desc "Reinstall the gem"
|
||||
task :reinstall => [:uninstall, :install]
|
||||
|
||||
desc 'Package for release'
|
||||
task :release => ["gem:package", "gem:gemspec"] do |t|
|
||||
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
||||
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PKG_VERSION
|
||||
pkg = "pkg/#{GEM_SPEC.full_name}"
|
||||
|
||||
changelog = File.open("CHANGELOG.md") { |file| file.read }
|
||||
|
||||
puts "Releasing #{PKG_NAME} v. #{PKG_VERSION}"
|
||||
Rake::Task["git:tag:create"].invoke
|
||||
end
|
||||
end
|
||||
|
||||
desc "Alias to gem:package"
|
||||
task "gem" => "gem:package"
|
||||
|
||||
task "gem:release" => "gem:gemspec"
|
||||
|
||||
task "clobber" => ["gem:clobber_package"]
|
||||
@@ -1,45 +0,0 @@
|
||||
namespace :git do
|
||||
namespace :tag do
|
||||
desc "List tags from the Git repository"
|
||||
task :list do
|
||||
tags = `git tag -l`
|
||||
tags.gsub!("\r", "")
|
||||
tags = tags.split("\n").sort {|a, b| b <=> a }
|
||||
puts tags.join("\n")
|
||||
end
|
||||
|
||||
desc "Create a new tag in the Git repository"
|
||||
task :create do
|
||||
changelog = File.open("CHANGELOG.md", "r") { |file| file.read }
|
||||
puts "-" * 80
|
||||
puts changelog
|
||||
puts "-" * 80
|
||||
puts
|
||||
|
||||
v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
|
||||
abort "Versions don't match #{v} vs #{PKG_VERSION}" if v != PKG_VERSION
|
||||
|
||||
git_status = `git status`
|
||||
if git_status !~ /^nothing to commit/
|
||||
abort "Working directory isn't clean."
|
||||
end
|
||||
|
||||
tag = "#{PKG_NAME}-#{PKG_VERSION}"
|
||||
msg = "Release #{PKG_NAME}-#{PKG_VERSION}"
|
||||
|
||||
existing_tags = `git tag -l #{PKG_NAME}-*`.split('\n')
|
||||
if existing_tags.include?(tag)
|
||||
warn("Tag already exists, deleting...")
|
||||
unless system "git tag -d #{tag}"
|
||||
abort "Tag deletion failed."
|
||||
end
|
||||
end
|
||||
puts "Creating git tag '#{tag}'..."
|
||||
unless system "git tag -a -m \"#{msg}\" #{tag}"
|
||||
abort "Tag creation failed."
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
task "gem:release" => "git:tag:create"
|
||||
@@ -1,22 +0,0 @@
|
||||
namespace :metrics do
|
||||
task :lines do
|
||||
lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
|
||||
for file_name in FileList["lib/**/*.rb"]
|
||||
f = File.open(file_name)
|
||||
while line = f.gets
|
||||
lines += 1
|
||||
next if line =~ /^\s*$/
|
||||
next if line =~ /^\s*#/
|
||||
codelines += 1
|
||||
end
|
||||
puts "L: #{sprintf("%4d", lines)}, " +
|
||||
"LOC #{sprintf("%4d", codelines)} | #{file_name}"
|
||||
total_lines += lines
|
||||
total_codelines += codelines
|
||||
|
||||
lines, codelines = 0, 0
|
||||
end
|
||||
|
||||
puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
|
||||
end
|
||||
end
|
||||
@@ -1,21 +0,0 @@
|
||||
require "rspec/core/rake_task"
|
||||
|
||||
namespace :spec do
|
||||
RSpec::Core::RakeTask.new(:simplecov) do |t|
|
||||
t.pattern = FileList['spec/**/*_spec.rb']
|
||||
t.rspec_opts = ['--color', '--format', 'documentation']
|
||||
end
|
||||
|
||||
namespace :simplecov do
|
||||
desc "Browse the code coverage report."
|
||||
task :browse => "spec:simplecov" do
|
||||
require "launchy"
|
||||
Launchy.open("coverage/index.html")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "Alias to spec:simplecov"
|
||||
task "spec" => "spec:simplecov"
|
||||
|
||||
task "clobber" => ["spec:clobber_simplecov"]
|
||||
@@ -1,27 +0,0 @@
|
||||
require "rake"
|
||||
|
||||
begin
|
||||
require "yard"
|
||||
require "yard/rake/yardoc_task"
|
||||
|
||||
namespace :doc do
|
||||
desc "Generate Yardoc documentation"
|
||||
YARD::Rake::YardocTask.new do |yardoc|
|
||||
yardoc.name = "yard"
|
||||
yardoc.options = ["--verbose", "--markup", "markdown"]
|
||||
yardoc.files = FileList[
|
||||
"lib/**/*.rb", "ext/**/*.c",
|
||||
"README.md", "CHANGELOG.md", "LICENSE.txt"
|
||||
].exclude(/idna/)
|
||||
end
|
||||
end
|
||||
|
||||
task "clobber" => ["doc:clobber_yard"]
|
||||
|
||||
desc "Alias to doc:yard"
|
||||
task "doc" => "doc:yard"
|
||||
rescue LoadError
|
||||
# If yard isn't available, it's not the end of the world
|
||||
desc "Alias to doc:rdoc"
|
||||
task "doc" => "doc:rdoc"
|
||||
end
|
||||
@@ -1,11 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
gemspec
|
||||
|
||||
gem "rake"
|
||||
group :development do
|
||||
gem "rspec-helpers", :require => false
|
||||
gem "luna-rspec-formatters", :require => false
|
||||
gem "pry", :require => false unless ENV[
|
||||
"CI"
|
||||
]
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
## 1.1.0 / 2016-06-28
|
||||
|
||||
### Minor Enhancements
|
||||
|
||||
* Support jruby (#8)
|
||||
|
||||
## 1.0.0 / 2016-04-28
|
||||
|
||||
### Major enhancements
|
||||
|
||||
- Merge Simple::ANSI and Colorator. (#7)
|
||||
|
||||
### Minor Enhancements
|
||||
|
||||
- Delete unnecessary `Symbol#to_sym` (#2)
|
||||
- Change argument name of `Enumerator#each` for better code legibility (#3)
|
||||
|
||||
### Development Fixes
|
||||
|
||||
- Convert to new RSpec expectation syntax (#1)
|
||||
- Fix `String#blue` result in README (#4)
|
||||
|
||||
## 0.1 / 2013-04-13
|
||||
|
||||
Birthday!
|
||||
@@ -1,21 +0,0 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) Parker Moore
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -1,47 +0,0 @@
|
||||
# colorator
|
||||
|
||||
Colorize your text for the terminal
|
||||
|
||||
[](https://travis-ci.org/octopress/colorator)
|
||||
|
||||
## Example
|
||||
|
||||
```ruby
|
||||
"this string".red
|
||||
# => \e[31mthis string\e[0m
|
||||
"my string".blue
|
||||
# => \e[34mmy string\e[0m
|
||||
# etc...
|
||||
```
|
||||
|
||||
## Supported Colors
|
||||
|
||||
- `red`
|
||||
- `black`
|
||||
- `green`
|
||||
- `yellow`
|
||||
- `magenta`
|
||||
- `white`
|
||||
- `blue`
|
||||
- `cyan`
|
||||
- `bold`
|
||||
|
||||
## Other supported Ansi methods
|
||||
|
||||
- `clear_line`
|
||||
- `has_ansi?`, `has_color?`
|
||||
- `strip_ansi`, `strip_color`
|
||||
- `reset_ansi`, `reset_color`
|
||||
- `clear_screen`
|
||||
- `ansi_jump`
|
||||
|
||||
## Why
|
||||
|
||||
There are a bunch of gems that provide functionality like this, but none have
|
||||
as simple an API as this. Just call `"string".color` and your text will be
|
||||
colorized.
|
||||
|
||||
## License
|
||||
|
||||
MIT. Written as a single Ruby file by Brandon Mathis, converted into a gem by
|
||||
Parker Moore.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user