commit
4f9af21fb2
|
@ -7,6 +7,7 @@
|
||||||
* CHANGED: Upgrading libraries to: zlib 1.2.13
|
* CHANGED: Upgrading libraries to: zlib 1.2.13
|
||||||
* FIXED: Revert to CREATE INDEX without IF NOT EXISTS clauses, to support MySQL (#943)
|
* FIXED: Revert to CREATE INDEX without IF NOT EXISTS clauses, to support MySQL (#943)
|
||||||
* FIXED: Apply table prefix to indexes as well, to support multiple instances sharing a single database (#943)
|
* FIXED: Apply table prefix to indexes as well, to support multiple instances sharing a single database (#943)
|
||||||
|
* FIXED: YOURLS integration via new proxy, storing signature in configuration (#725)
|
||||||
* **1.4 (2022-04-09)**
|
* **1.4 (2022-04-09)**
|
||||||
* ADDED: Translations for Corsican, Estonian, Finnish and Lojban
|
* ADDED: Translations for Corsican, Estonian, Finnish and Lojban
|
||||||
* ADDED: new HTTP headers improving security (#765)
|
* ADDED: new HTTP headers improving security (#765)
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
* Mark van Holsteijn - Google Cloud Storage backend
|
* Mark van Holsteijn - Google Cloud Storage backend
|
||||||
* Austin Huang - Oracle database support
|
* Austin Huang - Oracle database support
|
||||||
* Felix J. Ogris - S3 Storage backend
|
* Felix J. Ogris - S3 Storage backend
|
||||||
|
* Mounir Idrassi & J. Mozdzen - secure YOURLS integration
|
||||||
|
|
||||||
## Translations
|
## Translations
|
||||||
* Hexalyse - French
|
* Hexalyse - French
|
||||||
|
|
|
@ -227,3 +227,20 @@ dir = PATH "data"
|
||||||
;bucket = "my-bucket"
|
;bucket = "my-bucket"
|
||||||
;accesskey = "access key id"
|
;accesskey = "access key id"
|
||||||
;secretkey = "secret access key"
|
;secretkey = "secret access key"
|
||||||
|
|
||||||
|
[yourls]
|
||||||
|
; don't mix this up with "urlshortener" config item:
|
||||||
|
; - when using a standard configuration, "urlshortener" will point to the YOURLS
|
||||||
|
; API, including access credentials, and will be part of the PrivateBin public
|
||||||
|
; web page (insecure!)
|
||||||
|
; - when using the parameters in this section ("signature" and "apiurl"),
|
||||||
|
; "urlshortener" will point to a fixed PrivateBin page
|
||||||
|
; ("$basepath/shortenviayourls?link=") and that URL will in turn call YOURLS
|
||||||
|
; server-side, using the URL from "apiurl" and the "access signature" from the
|
||||||
|
; "signature" parameters below.
|
||||||
|
|
||||||
|
; (optional) the "signature" (access key) issued by YOURLS for the using account
|
||||||
|
; signature = ""
|
||||||
|
|
||||||
|
; (optional) the URL of the YOURLS API, called to shorten a PrivateBin URL
|
||||||
|
; apiurl = ""
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visitate stu liame per vede a nota. Date l’indirizzu à qualunque li permette d’accede à a nota dinù.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visitate stu liame per vede a nota. Date l’indirizzu à qualunque li permette d’accede à a nota dinù.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Un ammuzzatore d’indirizzu pò palisà a vostra chjave di dicifratura in l’indirizzu.",
|
"URL shortener may expose your decrypt key in URL.": "Un ammuzzatore d’indirizzu pò palisà a vostra chjave di dicifratura in l’indirizzu.",
|
||||||
"Save paste": "Arregistrà l’appiccicu",
|
"Save paste": "Arregistrà l’appiccicu",
|
||||||
"Your IP is not authorized to create pastes.": "U vostru indirizzu IP ùn hè micca auturizatu à creà l’appiccichi."
|
"Your IP is not authorized to create pastes.": "U vostru indirizzu IP ùn hè micca auturizatu à creà l’appiccichi.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Navštivte tento odkaz pro zobrazení poznámky. Přeposláním URL umožníte také jiným lidem přístup.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Navštivte tento odkaz pro zobrazení poznámky. Přeposláním URL umožníte také jiným lidem přístup.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Zkracovač URL může odhalit váš dešifrovací klíč v URL.",
|
"URL shortener may expose your decrypt key in URL.": "Zkracovač URL může odhalit váš dešifrovací klíč v URL.",
|
||||||
"Save paste": "Uložit příspěvek",
|
"Save paste": "Uložit příspěvek",
|
||||||
"Your IP is not authorized to create pastes.": "Vaše IP adresa nemá oprávnění k vytvoření vložení."
|
"Your IP is not authorized to create pastes.": "Vaše IP adresa nemá oprávnění k vytvoření vložení.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besuche diesen Link um das Dokument zu sehen. Wird die URL an eine andere Person gegeben, so kann diese Person ebenfalls auf dieses Dokument zugreifen.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besuche diesen Link um das Dokument zu sehen. Wird die URL an eine andere Person gegeben, so kann diese Person ebenfalls auf dieses Dokument zugreifen.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Der URL-Verkürzer kann den Schlüssel in der URL enthüllen.",
|
"URL shortener may expose your decrypt key in URL.": "Der URL-Verkürzer kann den Schlüssel in der URL enthüllen.",
|
||||||
"Save paste": "Text speichern",
|
"Save paste": "Text speichern",
|
||||||
"Your IP is not authorized to create pastes.": "Deine IP ist nicht berechtigt, Texte zu erstellen."
|
"Your IP is not authorized to create pastes.": "Deine IP ist nicht berechtigt, Texte zu erstellen.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Επισκεφτείτε αυτόν τον σύνδεσμο για να δείτε το μήνυμα. Δίνοντας τον σύνδεσμο σε οποιονδήποτε, του επιτρέπετε να επισκεφτεί το μήνυμα επίσης.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Επισκεφτείτε αυτόν τον σύνδεσμο για να δείτε το μήνυμα. Δίνοντας τον σύνδεσμο σε οποιονδήποτε, του επιτρέπετε να επισκεφτεί το μήνυμα επίσης.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Συντομευτές συνδέσμων πιθανώς να δημοσιοποιήσουν το κλειδί αποκρυπτογράφισης στον σύνδεσμο.",
|
"URL shortener may expose your decrypt key in URL.": "Συντομευτές συνδέσμων πιθανώς να δημοσιοποιήσουν το κλειδί αποκρυπτογράφισης στον σύνδεσμο.",
|
||||||
"Save paste": "Αποθήκευση επικόλλησης",
|
"Save paste": "Αποθήκευση επικόλλησης",
|
||||||
"Your IP is not authorized to create pastes.": "Η IP σας δεν επιτρέπεται να δημιουργεί επικολλήσεις."
|
"Your IP is not authorized to create pastes.": "Η IP σας δεν επιτρέπεται να δημιουργεί επικολλήσεις.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visite este enlace para ver la nota. Dar la URL a cualquier persona también les permite acceder a la nota.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visite este enlace para ver la nota. Dar la URL a cualquier persona también les permite acceder a la nota.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "El acortador de URL puede exponer su clave de descifrado en el URL.",
|
"URL shortener may expose your decrypt key in URL.": "El acortador de URL puede exponer su clave de descifrado en el URL.",
|
||||||
"Save paste": "Guardar \"paste\"",
|
"Save paste": "Guardar \"paste\"",
|
||||||
"Your IP is not authorized to create pastes.": "Tu IP no está autorizada para crear contenido."
|
"Your IP is not authorized to create pastes.": "Tu IP no está autorizada para crear contenido.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Kirja nägemiseks külasta seda linki. Teistele URL-i andmine lubab ka neil ligi pääseda kirjale.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Kirja nägemiseks külasta seda linki. Teistele URL-i andmine lubab ka neil ligi pääseda kirjale.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL-i lühendaja võib paljastada sinu dekrüpteerimisvõtme URL-is.",
|
"URL shortener may expose your decrypt key in URL.": "URL-i lühendaja võib paljastada sinu dekrüpteerimisvõtme URL-is.",
|
||||||
"Save paste": "Salvesta kleebe",
|
"Save paste": "Salvesta kleebe",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Käy tässä linkissä nähdäksesi viestin. URL:n antaminen kenellekään antaa heidänkin päästä katsomeen viestiä. ",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Käy tässä linkissä nähdäksesi viestin. URL:n antaminen kenellekään antaa heidänkin päästä katsomeen viestiä. ",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL-lyhentäjä voi paljastaa purkuavaimesi URL:ssä.",
|
"URL shortener may expose your decrypt key in URL.": "URL-lyhentäjä voi paljastaa purkuavaimesi URL:ssä.",
|
||||||
"Save paste": "Tallenna paste",
|
"Save paste": "Tallenna paste",
|
||||||
"Your IP is not authorized to create pastes.": "IP:llesi ei ole annettu oikeutta luoda pasteja."
|
"Your IP is not authorized to create pastes.": "IP:llesi ei ole annettu oikeutta luoda pasteja.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visiter ce lien pour voir la note. Donner l'URL à une autre personne lui permet également d'accéder à la note.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visiter ce lien pour voir la note. Donner l'URL à une autre personne lui permet également d'accéder à la note.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Raccourcir l'URL peut exposer votre clé de déchiffrement dans l'URL.",
|
"URL shortener may expose your decrypt key in URL.": "Raccourcir l'URL peut exposer votre clé de déchiffrement dans l'URL.",
|
||||||
"Save paste": "Sauver le paste",
|
"Save paste": "Sauver le paste",
|
||||||
"Your IP is not authorized to create pastes.": "Votre adresse IP n'est pas autorisée à créer des pastes."
|
"Your IP is not authorized to create pastes.": "Votre adresse IP n'est pas autorisée à créer des pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "נא לבקר בקישור כדי לצפות בהערה. מסירת הקישור לאנשים כלשהם תאפשר גם להם לגשת להערה.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "נא לבקר בקישור כדי לצפות בהערה. מסירת הקישור לאנשים כלשהם תאפשר גם להם לגשת להערה.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Látogasd meg ezt a hivatkozást a bejegyzés megtekintéséhez. Ha mások számára is megadod ezt a linket, azzal hozzáférnek ők is.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Látogasd meg ezt a hivatkozást a bejegyzés megtekintéséhez. Ha mások számára is megadod ezt a linket, azzal hozzáférnek ők is.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Kunjungi tautan ini untuk melihat catatan. Memberikan alamat URL pada siapapun juga, akan mengizinkan mereka untuk mengakses catatan, so pasti gitu loh Kaka.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Kunjungi tautan ini untuk melihat catatan. Memberikan alamat URL pada siapapun juga, akan mengizinkan mereka untuk mengakses catatan, so pasti gitu loh Kaka.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Pemendek URL mungkin akan menampakkan kunci dekrip Anda dalam URL.",
|
"URL shortener may expose your decrypt key in URL.": "Pemendek URL mungkin akan menampakkan kunci dekrip Anda dalam URL.",
|
||||||
"Save paste": "Simpan paste",
|
"Save paste": "Simpan paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visita questo collegamento per vedere la nota. Dare l'URL a chiunque consente anche a loro di accedere alla nota.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visita questo collegamento per vedere la nota. Dare l'URL a chiunque consente anche a loro di accedere alla nota.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener può esporre la tua chiave decrittografata nell'URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener può esporre la tua chiave decrittografata nell'URL.",
|
||||||
"Save paste": "Salva il messagio",
|
"Save paste": "Salva il messagio",
|
||||||
"Your IP is not authorized to create pastes.": "Il tuo IP non è autorizzato a creare dei messaggi."
|
"Your IP is not authorized to create pastes.": "Il tuo IP non è autorizzato a creare dei messaggi.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "rejgau fukpi",
|
"Save paste": "rejgau fukpi",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Norėdami matyti užrašus, aplankykite šį tinklalapį. Pasidalinus šiuo URL adresu su kitais žmonėmis, jiems taip pat bus leidžiama prieiga prie šių užrašų.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Norėdami matyti užrašus, aplankykite šį tinklalapį. Pasidalinus šiuo URL adresu su kitais žmonėmis, jiems taip pat bus leidžiama prieiga prie šių užrašų.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL trumpinimo įrankis gali atskleisti URL adrese jūsų iššifravimo raktą.",
|
"URL shortener may expose your decrypt key in URL.": "URL trumpinimo įrankis gali atskleisti URL adrese jūsų iššifravimo raktą.",
|
||||||
"Save paste": "Įrašyti įdėjimą",
|
"Save paste": "Įrašyti įdėjimą",
|
||||||
"Your IP is not authorized to create pastes.": "Jūsų IP adresas neturi įgaliojimų kurti įdėjimų."
|
"Your IP is not authorized to create pastes.": "Jūsų IP adresas neturi įgaliojimų kurti įdėjimų.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Bezoek deze link om de notitie te bekijken. Als je de URL aan iemand geeft, kan die de notitie ook bekijken.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Bezoek deze link om de notitie te bekijken. Als je de URL aan iemand geeft, kan die de notitie ook bekijken.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL-verkorter kan uw ontcijferingssleutel in URL blootleggen.",
|
"URL shortener may expose your decrypt key in URL.": "URL-verkorter kan uw ontcijferingssleutel in URL blootleggen.",
|
||||||
"Save paste": "Notitie opslaan",
|
"Save paste": "Notitie opslaan",
|
||||||
"Your IP is not authorized to create pastes.": "Uw IP-adres is niet gemachtigd om geplakte tekst te maken."
|
"Your IP is not authorized to create pastes.": "Uw IP-adres is niet gemachtigd om geplakte tekst te maken.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besøk denne lenken for å se notatet. Hvis lenken deles med andre, vil de også kunne se notatet.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Besøk denne lenken for å se notatet. Hvis lenken deles med andre, vil de også kunne se notatet.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL forkorter kan avsløre dekrypteringsnøkkelen.",
|
"URL shortener may expose your decrypt key in URL.": "URL forkorter kan avsløre dekrypteringsnøkkelen.",
|
||||||
"Save paste": "Lagre utklipp",
|
"Save paste": "Lagre utklipp",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visitatz aqueste ligam per veire la nòta. Fornir lo ligam a qualqu’un mai li permet tanben d’accedir a la nòta.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visitatz aqueste ligam per veire la nòta. Fornir lo ligam a qualqu’un mai li permet tanben d’accedir a la nòta.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Los espleches d’acorchiment d’URL pòdon expausar la clau de deschiframent dins l’URL.",
|
"URL shortener may expose your decrypt key in URL.": "Los espleches d’acorchiment d’URL pòdon expausar la clau de deschiframent dins l’URL.",
|
||||||
"Save paste": "Enregistrar lo tèxt",
|
"Save paste": "Enregistrar lo tèxt",
|
||||||
"Your IP is not authorized to create pastes.": "Vòstra adreça IP a pas l’autorizacion de crear de tèxtes."
|
"Your IP is not authorized to create pastes.": "Vòstra adreça IP a pas l’autorizacion de crear de tèxtes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visite esse link para ver a nota. Dar a URL para qualquer um permite que eles também acessem a nota.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visite esse link para ver a nota. Dar a URL para qualquer um permite que eles também acessem a nota.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Посетите эту ссылку чтобы просмотреть запись. Передача ссылки кому либо позволит им получить доступ к записи тоже.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Посетите эту ссылку чтобы просмотреть запись. Передача ссылки кому либо позволит им получить доступ к записи тоже.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Сервис сокращения ссылок может получить ваш ключ расшифровки из ссылки.",
|
"URL shortener may expose your decrypt key in URL.": "Сервис сокращения ссылок может получить ваш ключ расшифровки из ссылки.",
|
||||||
"Save paste": "Сохранить запись",
|
"Save paste": "Сохранить запись",
|
||||||
"Your IP is not authorized to create pastes.": "Вашему IP адресу не разрешено создавать записи."
|
"Your IP is not authorized to create pastes.": "Вашему IP адресу не разрешено создавать записи.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Ak chcete zobraziť poznámku, navštívte tento odkaz. Poskytnutie adresy URL komukoľvek im umožní prístup aj k poznámke.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Ak chcete zobraziť poznámku, navštívte tento odkaz. Poskytnutie adresy URL komukoľvek im umožní prístup aj k poznámke.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Skracovač adries URL môže odhaliť váš dešifrovací kľúč v adrese URL.",
|
"URL shortener may expose your decrypt key in URL.": "Skracovač adries URL môže odhaliť váš dešifrovací kľúč v adrese URL.",
|
||||||
"Save paste": "Uložiť príspevok",
|
"Save paste": "Uložiť príspevok",
|
||||||
"Your IP is not authorized to create pastes.": "Vaša IP adresa nie je oprávnená vytvárať príspevky."
|
"Your IP is not authorized to create pastes.": "Vaša IP adresa nie je oprávnená vytvárať príspevky.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
"URL shortener may expose your decrypt key in URL.": "URL shortener may expose your decrypt key in URL.",
|
||||||
"Save paste": "Save paste",
|
"Save paste": "Save paste",
|
||||||
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes."
|
"Your IP is not authorized to create pastes.": "Your IP is not authorized to create pastes.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Notu görmek için bu bağlantıyı ziyaret et. Bağlantıya sahip olan birisi notu görebilir.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Notu görmek için bu bağlantıyı ziyaret et. Bağlantıya sahip olan birisi notu görebilir.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "URL kısaltıcı şifreleme anahtarınızı URL içerisinde gösterebilir.",
|
"URL shortener may expose your decrypt key in URL.": "URL kısaltıcı şifreleme anahtarınızı URL içerisinde gösterebilir.",
|
||||||
"Save paste": "Yazıyı kaydet",
|
"Save paste": "Yazıyı kaydet",
|
||||||
"Your IP is not authorized to create pastes.": "IP adresinizin yazı oluşturmaya yetkisi yoktur."
|
"Your IP is not authorized to create pastes.": "IP adresinizin yazı oluşturmaya yetkisi yoktur.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Відвідайте посилання, щоб переглянути нотатку. Передача посилання будь-кому дозволить їм переглянути нотатку.",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "Відвідайте посилання, щоб переглянути нотатку. Передача посилання будь-кому дозволить їм переглянути нотатку.",
|
||||||
"URL shortener may expose your decrypt key in URL.": "Сервіс скорочення посилань може викрити ваш ключ дешифрування з URL.",
|
"URL shortener may expose your decrypt key in URL.": "Сервіс скорочення посилань може викрити ваш ключ дешифрування з URL.",
|
||||||
"Save paste": "Зберегти вставку",
|
"Save paste": "Зберегти вставку",
|
||||||
"Your IP is not authorized to create pastes.": "Вашому IP не дозволено створювати вставки."
|
"Your IP is not authorized to create pastes.": "Вашому IP не дозволено створювати вставки.",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -186,5 +186,8 @@
|
||||||
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "访问此链接来查看该笔记。将此 URL 发送给任何人即可允许其访问该笔记。",
|
"Visit this link to see the note. Giving the URL to anyone allows them to access the note, too.": "访问此链接来查看该笔记。将此 URL 发送给任何人即可允许其访问该笔记。",
|
||||||
"URL shortener may expose your decrypt key in URL.": "短链接服务可能会暴露您在 URL 中的解密密钥。",
|
"URL shortener may expose your decrypt key in URL.": "短链接服务可能会暴露您在 URL 中的解密密钥。",
|
||||||
"Save paste": "保存内容",
|
"Save paste": "保存内容",
|
||||||
"Your IP is not authorized to create pastes.": "您的 IP 无权创建粘贴。"
|
"Your IP is not authorized to create pastes.": "您的 IP 无权创建粘贴。",
|
||||||
|
"Trying to shorten a URL that isn't pointing at our instance.": "Trying to shorten a URL that isn't pointing at our instance.",
|
||||||
|
"Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".": "Error calling YOURLS. Probably a configuration issue, like wrong or missing \"apiurl\" or \"signature\".",
|
||||||
|
"Error parsing YOURLS response.": "Error parsing YOURLS response."
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,6 +93,10 @@ class Configuration
|
||||||
'model_options' => array(
|
'model_options' => array(
|
||||||
'dir' => 'data',
|
'dir' => 'data',
|
||||||
),
|
),
|
||||||
|
'yourls' => array(
|
||||||
|
'signature' => '',
|
||||||
|
'apiurl' => '',
|
||||||
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -136,6 +136,9 @@ class Controller
|
||||||
case 'jsonld':
|
case 'jsonld':
|
||||||
$this->_jsonld($this->_request->getParam('jsonld'));
|
$this->_jsonld($this->_request->getParam('jsonld'));
|
||||||
return;
|
return;
|
||||||
|
case 'yourlsproxy':
|
||||||
|
$this->_yourlsproxy($this->_request->getParam('link'));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// output JSON or HTML
|
// output JSON or HTML
|
||||||
|
@ -378,9 +381,15 @@ class Controller
|
||||||
);
|
);
|
||||||
|
|
||||||
$page = new View;
|
$page = new View;
|
||||||
$page->assign('NAME', $this->_conf->getKey('name'));
|
$page->assign('CSPHEADER', $metacspheader);
|
||||||
$page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath')));
|
|
||||||
$page->assign('ERROR', I18n::_($this->_error));
|
$page->assign('ERROR', I18n::_($this->_error));
|
||||||
|
$page->assign('NAME', $this->_conf->getKey('name'));
|
||||||
|
if ($this->_request->getOperation() === 'yourlsproxy') {
|
||||||
|
$page->assign('SHORTURL', $this->_status);
|
||||||
|
$page->draw('yourlsproxy');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$page->assign('BASEPATH', I18n::_($this->_conf->getKey('basepath')));
|
||||||
$page->assign('STATUS', I18n::_($this->_status));
|
$page->assign('STATUS', I18n::_($this->_status));
|
||||||
$page->assign('VERSION', self::VERSION);
|
$page->assign('VERSION', self::VERSION);
|
||||||
$page->assign('DISCUSSION', $this->_conf->getKey('discussion'));
|
$page->assign('DISCUSSION', $this->_conf->getKey('discussion'));
|
||||||
|
@ -405,7 +414,6 @@ class Controller
|
||||||
$page->assign('HTTPWARNING', $this->_conf->getKey('httpwarning'));
|
$page->assign('HTTPWARNING', $this->_conf->getKey('httpwarning'));
|
||||||
$page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri());
|
$page->assign('HTTPSLINK', 'https://' . $this->_request->getHost() . $this->_request->getRequestUri());
|
||||||
$page->assign('COMPRESSION', $this->_conf->getKey('compression'));
|
$page->assign('COMPRESSION', $this->_conf->getKey('compression'));
|
||||||
$page->assign('CSPHEADER', $metacspheader);
|
|
||||||
$page->draw($this->_conf->getKey('template'));
|
$page->draw($this->_conf->getKey('template'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -439,6 +447,22 @@ class Controller
|
||||||
echo $content;
|
echo $content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* proxies link to YOURLS, updates status or error with response
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @param string $link
|
||||||
|
*/
|
||||||
|
private function _yourlsproxy($link)
|
||||||
|
{
|
||||||
|
$yourls = new YourlsProxy($this->_conf, $link);
|
||||||
|
if ($yourls->isError()) {
|
||||||
|
$this->_error = $yourls->getError();
|
||||||
|
} else {
|
||||||
|
$this->_status = $yourls->getUrl();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* prepares JSON encoded status message
|
* prepares JSON encoded status message
|
||||||
*
|
*
|
||||||
|
|
|
@ -120,6 +120,7 @@ class Request
|
||||||
if (
|
if (
|
||||||
!array_key_exists('pasteid', $this->_params) &&
|
!array_key_exists('pasteid', $this->_params) &&
|
||||||
!array_key_exists('jsonld', $this->_params) &&
|
!array_key_exists('jsonld', $this->_params) &&
|
||||||
|
!array_key_exists('link', $this->_params) &&
|
||||||
array_key_exists('QUERY_STRING', $_SERVER) &&
|
array_key_exists('QUERY_STRING', $_SERVER) &&
|
||||||
!empty($_SERVER['QUERY_STRING'])
|
!empty($_SERVER['QUERY_STRING'])
|
||||||
) {
|
) {
|
||||||
|
@ -135,6 +136,10 @@ class Request
|
||||||
}
|
}
|
||||||
} elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) {
|
} elseif (array_key_exists('jsonld', $this->_params) && !empty($this->_params['jsonld'])) {
|
||||||
$this->_operation = 'jsonld';
|
$this->_operation = 'jsonld';
|
||||||
|
} elseif (array_key_exists('link', $this->_params) && !empty($this->_params['link'])) {
|
||||||
|
if (strpos($this->getRequestUri(), '/shortenviayourls') !== false) {
|
||||||
|
$this->_operation = 'yourlsproxy';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PrivateBin
|
||||||
|
*
|
||||||
|
* a zero-knowledge paste bin
|
||||||
|
*
|
||||||
|
* @link https://github.com/PrivateBin/PrivateBin
|
||||||
|
* @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
|
||||||
|
* @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
|
||||||
|
* @version 1.4.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace PrivateBin;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* YourlsProxy
|
||||||
|
*
|
||||||
|
* Forwards a URL for shortening to YOURLS (your own URL shortener) and stores
|
||||||
|
* the result.
|
||||||
|
*/
|
||||||
|
class YourlsProxy
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* error message
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $_error = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* shortened URL
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $_url = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
*
|
||||||
|
* initializes and runs PrivateBin
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param string $link
|
||||||
|
*/
|
||||||
|
public function __construct(Configuration $conf, $link)
|
||||||
|
{
|
||||||
|
if (strpos($link, $conf->getKey('basepath') . '/?') === false) {
|
||||||
|
$this->_error = 'Trying to shorten a URL that isn\'t pointing at our instance.';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$yourls_api_url = $conf->getKey('apiurl', 'yourls');
|
||||||
|
if (empty($yourls_api_url)) {
|
||||||
|
$this->_error = 'Error calling YOURLS. Probably a configuration issue, like wrong or missing "apiurl" or "signature".';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = file_get_contents(
|
||||||
|
$yourls_api_url, false, stream_context_create(
|
||||||
|
array(
|
||||||
|
'http' => array(
|
||||||
|
'method' => 'POST',
|
||||||
|
'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
|
||||||
|
'content' => http_build_query(
|
||||||
|
array(
|
||||||
|
'signature' => $conf->getKey('signature', 'yourls'),
|
||||||
|
'format' => 'json',
|
||||||
|
'action' => 'shorturl',
|
||||||
|
'url' => $link,
|
||||||
|
)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
$data = Json::decode($data);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->_error = 'Error calling YOURLS. Probably a configuration issue, like wrong or missing "apiurl" or "signature".';
|
||||||
|
error_log('Error calling YOURLS: ' . $e->getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!is_null($data) &&
|
||||||
|
array_key_exists('statusCode', $data) &&
|
||||||
|
$data['statusCode'] == 200 &&
|
||||||
|
array_key_exists('shorturl', $data)
|
||||||
|
) {
|
||||||
|
$this->_url = $data['shorturl'];
|
||||||
|
} else {
|
||||||
|
$this->_error = 'Error parsing YOURLS response.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the (untranslated) error message
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getError()
|
||||||
|
{
|
||||||
|
return $this->_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the shortened URL
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return $this->_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if any error has occurred
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isError()
|
||||||
|
{
|
||||||
|
return !empty($this->_error);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
use PrivateBin\I18n;
|
||||||
|
?><!DOCTYPE html>
|
||||||
|
<html lang="<?php echo I18n::_('en'); ?>">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="Content-Security-Policy" content="<?php echo I18n::encode($CSPHEADER); ?>">
|
||||||
|
<meta name="robots" content="noindex" />
|
||||||
|
<meta name="google" content="notranslate">
|
||||||
|
<title><?php echo I18n::_($NAME); ?></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<?php
|
||||||
|
if (empty($ERROR)) :
|
||||||
|
?>
|
||||||
|
<p><?php echo I18n::_('Your paste is <a id="pasteurl" href="%s">%s</a> <span id="copyhint">(Hit [Ctrl]+[c] to copy)</span>', $SHORTURL, $SHORTURL); ?></p>
|
||||||
|
<?php
|
||||||
|
else:
|
||||||
|
?>
|
||||||
|
<div id="errormessage">
|
||||||
|
<p><?php echo I18n::_('Could not create paste: %s', $ERROR); ?></p>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
endif;
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -48,6 +48,7 @@ class ControllerTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testView()
|
public function testView()
|
||||||
{
|
{
|
||||||
|
$_SERVER['HTTP_HOST'] = 'example.com';
|
||||||
$_SERVER['QUERY_STRING'] = Helper::getPasteId();
|
$_SERVER['QUERY_STRING'] = Helper::getPasteId();
|
||||||
$_GET[Helper::getPasteId()] = '';
|
$_GET[Helper::getPasteId()] = '';
|
||||||
ob_start();
|
ob_start();
|
||||||
|
@ -64,6 +65,11 @@ class ControllerTest extends PHPUnit_Framework_TestCase
|
||||||
$content,
|
$content,
|
||||||
'doesn\'t output shortener button'
|
'doesn\'t output shortener button'
|
||||||
);
|
);
|
||||||
|
$this->assertRegExp(
|
||||||
|
'# href="https://' . preg_quote($_SERVER['HTTP_HOST']) . '/">switching to HTTPS#',
|
||||||
|
$content,
|
||||||
|
'outputs configured https URL correctly'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -15,6 +15,9 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
/* Setup Routine */
|
/* Setup Routine */
|
||||||
$this->_path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'privatebin_data';
|
$this->_path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'privatebin_data';
|
||||||
|
if (!is_dir($this->_path)) {
|
||||||
|
mkdir($this->_path);
|
||||||
|
}
|
||||||
$this->_model = Filesystem::getInstance(array('dir' => $this->_path));
|
$this->_model = Filesystem::getInstance(array('dir' => $this->_path));
|
||||||
ServerSalt::setStore($this->_model);
|
ServerSalt::setStore($this->_model);
|
||||||
|
|
||||||
|
@ -186,8 +189,6 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testJsonLdPaste()
|
public function testJsonLdPaste()
|
||||||
{
|
{
|
||||||
$paste = Helper::getPaste();
|
|
||||||
$this->_model->create(Helper::getPasteId(), $paste);
|
|
||||||
$_GET['jsonld'] = 'paste';
|
$_GET['jsonld'] = 'paste';
|
||||||
ob_start();
|
ob_start();
|
||||||
new Controller;
|
new Controller;
|
||||||
|
@ -205,8 +206,6 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testJsonLdComment()
|
public function testJsonLdComment()
|
||||||
{
|
{
|
||||||
$paste = Helper::getPaste();
|
|
||||||
$this->_model->create(Helper::getPasteId(), $paste);
|
|
||||||
$_GET['jsonld'] = 'comment';
|
$_GET['jsonld'] = 'comment';
|
||||||
ob_start();
|
ob_start();
|
||||||
new Controller;
|
new Controller;
|
||||||
|
@ -224,8 +223,6 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testJsonLdPasteMeta()
|
public function testJsonLdPasteMeta()
|
||||||
{
|
{
|
||||||
$paste = Helper::getPaste();
|
|
||||||
$this->_model->create(Helper::getPasteId(), $paste);
|
|
||||||
$_GET['jsonld'] = 'pastemeta';
|
$_GET['jsonld'] = 'pastemeta';
|
||||||
ob_start();
|
ob_start();
|
||||||
new Controller;
|
new Controller;
|
||||||
|
@ -243,8 +240,6 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testJsonLdCommentMeta()
|
public function testJsonLdCommentMeta()
|
||||||
{
|
{
|
||||||
$paste = Helper::getPaste();
|
|
||||||
$this->_model->create(Helper::getPasteId(), $paste);
|
|
||||||
$_GET['jsonld'] = 'commentmeta';
|
$_GET['jsonld'] = 'commentmeta';
|
||||||
ob_start();
|
ob_start();
|
||||||
new Controller;
|
new Controller;
|
||||||
|
@ -262,8 +257,6 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
*/
|
*/
|
||||||
public function testJsonLdInvalid()
|
public function testJsonLdInvalid()
|
||||||
{
|
{
|
||||||
$paste = Helper::getPaste();
|
|
||||||
$this->_model->create(Helper::getPasteId(), $paste);
|
|
||||||
$_GET['jsonld'] = CONF;
|
$_GET['jsonld'] = CONF;
|
||||||
ob_start();
|
ob_start();
|
||||||
new Controller;
|
new Controller;
|
||||||
|
@ -271,4 +264,42 @@ class JsonApiTest extends PHPUnit_Framework_TestCase
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
$this->assertEquals('{}', $content, 'does not output nasty data');
|
$this->assertEquals('{}', $content, 'does not output nasty data');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @runInSeparateProcess
|
||||||
|
*/
|
||||||
|
public function testShortenViaYourls()
|
||||||
|
{
|
||||||
|
$mock_yourls_service = $this->_path . DIRECTORY_SEPARATOR . 'yourls.json';
|
||||||
|
$options = parse_ini_file(CONF, true);
|
||||||
|
$options['main']['basepath'] = 'https://example.com/path';
|
||||||
|
$options['main']['urlshortener'] = 'https://example.com/path/shortenviayourls?link=';
|
||||||
|
$options['yourls']['apiurl'] = $mock_yourls_service;
|
||||||
|
Helper::createIniFile(CONF, $options);
|
||||||
|
|
||||||
|
// the real service answer is more complex, but we only look for the shorturl & statusCode
|
||||||
|
file_put_contents($mock_yourls_service, '{"shorturl":"https:\/\/example.com\/1","statusCode":200}');
|
||||||
|
|
||||||
|
$_SERVER['REQUEST_URI'] = '/path/shortenviayourls?link=https%3A%2F%2Fexample.com%2Fpath%2F%3Ffoo%23bar';
|
||||||
|
$_GET['link'] = 'https://example.com/path/?foo#bar';
|
||||||
|
ob_start();
|
||||||
|
new Controller;
|
||||||
|
$content = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
$this->assertContains('id="pasteurl" href="https://example.com/1"', $content, 'outputs shortened URL correctly');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @runInSeparateProcess
|
||||||
|
*/
|
||||||
|
public function testShortenViaYourlsFailure()
|
||||||
|
{
|
||||||
|
$_SERVER['REQUEST_URI'] = '/path/shortenviayourls?link=https%3A%2F%2Fexample.com%2Fpath%2F%3Ffoo%23bar';
|
||||||
|
$_GET['link'] = 'https://example.com/path/?foo#bar';
|
||||||
|
ob_start();
|
||||||
|
new Controller;
|
||||||
|
$content = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
$this->assertContains('Error calling YOURLS.', $content, 'outputs error correctly');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,10 @@ class ViewTest extends PHPUnit_Framework_TestCase
|
||||||
$content,
|
$content,
|
||||||
$template . ': outputs error correctly'
|
$template . ': outputs error correctly'
|
||||||
);
|
);
|
||||||
|
if ($template === 'yourlsproxy') {
|
||||||
|
// yourlsproxy template only displays error message
|
||||||
|
continue;
|
||||||
|
}
|
||||||
$this->assertRegExp(
|
$this->assertRegExp(
|
||||||
'#<[^>]+id="password"[^>]*>#',
|
'#<[^>]+id="password"[^>]*>#',
|
||||||
$content,
|
$content,
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use PrivateBin\Configuration;
|
||||||
|
use PrivateBin\YourlsProxy;
|
||||||
|
|
||||||
|
class YourlsProxyTest extends PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
private $_conf;
|
||||||
|
|
||||||
|
private $_path;
|
||||||
|
|
||||||
|
private $_mock_yourls_service;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
/* Setup Routine */
|
||||||
|
$this->_path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'privatebin_data';
|
||||||
|
if (!is_dir($this->_path)) {
|
||||||
|
mkdir($this->_path);
|
||||||
|
}
|
||||||
|
$this->_mock_yourls_service = $this->_path . DIRECTORY_SEPARATOR . 'yourls.json';
|
||||||
|
$options = parse_ini_file(CONF_SAMPLE, true);
|
||||||
|
$options['main']['basepath'] = 'https://example.com';
|
||||||
|
$options['main']['urlshortener'] = 'https://example.com/shortenviayourls?link=';
|
||||||
|
$options['yourls']['apiurl'] = $this->_mock_yourls_service;
|
||||||
|
Helper::confBackup();
|
||||||
|
Helper::createIniFile(CONF, $options);
|
||||||
|
$this->_conf = new Configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tearDown()
|
||||||
|
{
|
||||||
|
/* Tear Down Routine */
|
||||||
|
unlink(CONF);
|
||||||
|
Helper::confRestore();
|
||||||
|
Helper::rmDir($this->_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testYourlsProxy()
|
||||||
|
{
|
||||||
|
// the real service answer is more complex, but we only look for the shorturl & statusCode
|
||||||
|
file_put_contents($this->_mock_yourls_service, '{"shorturl":"https:\/\/example.com\/1","statusCode":200}');
|
||||||
|
|
||||||
|
$yourls = new YourlsProxy($this->_conf, 'https://example.com/?foo#bar');
|
||||||
|
$this->assertFalse($yourls->isError());
|
||||||
|
$this->assertEquals($yourls->getUrl(), 'https://example.com/1');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testForeignUrl()
|
||||||
|
{
|
||||||
|
$yourls = new YourlsProxy($this->_conf, 'https://other.example.com/?foo#bar');
|
||||||
|
$this->assertTrue($yourls->isError());
|
||||||
|
$this->assertEquals($yourls->getError(), 'Trying to shorten a URL that isn\'t pointing at our instance.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testYourlsError()
|
||||||
|
{
|
||||||
|
// when statusCode is not 200, shorturl may not have been set
|
||||||
|
file_put_contents($this->_mock_yourls_service, '{"statusCode":403}');
|
||||||
|
|
||||||
|
$yourls = new YourlsProxy($this->_conf, 'https://example.com/?foo#bar');
|
||||||
|
$this->assertTrue($yourls->isError());
|
||||||
|
$this->assertEquals($yourls->getError(), 'Error parsing YOURLS response.');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testServerError()
|
||||||
|
{
|
||||||
|
// simulate some other server error that results in a non-JSON reply
|
||||||
|
file_put_contents($this->_mock_yourls_service, '500 Internal Server Error');
|
||||||
|
|
||||||
|
$yourls = new YourlsProxy($this->_conf, 'https://example.com/?foo#bar');
|
||||||
|
$this->assertTrue($yourls->isError());
|
||||||
|
$this->assertEquals($yourls->getError(), 'Error calling YOURLS. Probably a configuration issue, like wrong or missing "apiurl" or "signature".');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue