Skip to content

Instantly share code, notes, and snippets.

@owulveryck
Last active February 13, 2022 08:42
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save owulveryck/ae042077a74102f5bf61e3b1cdff24b4 to your computer and use it in GitHub Desktop.
Save owulveryck/ae042077a74102f5bf61e3b1cdff24b4 to your computer and use it in GitHub Desktop.
Generateur de QR Code tous anti covid

go run . > output.png

package main
import (
"bytes"
"fmt"
_ "image/jpeg"
_ "image/png"
"io"
"log"
"os"
"text/template"
"time"
"github.com/skip2/go-qrcode"
)
func main() {
a := &Authorization{
CreateDate: myTime{time.Now()},
Name: "Doe",
FirstName: "John",
BirthDate: myTime{time.Now()},
BirthCity: "Paris",
Address: "1 rue de Paris 75000 Paris",
AuthorizationDate: myTime{time.Now()},
Purpose: "demarche",
}
err := a.Png(os.Stdout)
if err != nil {
log.Fatal(err)
}
}
type Authorization struct {
CreateDate myTime
Name string
FirstName string
BirthDate myTime
BirthCity string
Address string
AuthorizationDate myTime
/* Purpose is one of
"travail"
"sante"
"famille"
"handicap"
"judiciaire"
"missions"
"transit"
"animaux"
"courses"
"sport"
"rassemblement"
"demarche"
// source https://gitlab.inria.fr/stopcovid19/stopcovid-android/-/blob/master/stopcovid/src/main/assets/Attestations/form.json
*/
Purpose string
}
const tmpl = `Cree le: {{ .CreateDate.Date }} a {{ .CreateDate.HourMinute }};
Nom: {{ .Name }};
Prenom: {{ .FirstName }};
Naissance: {{ .BirthDate.Date }} a {{ .BirthCity }};
Adresse: {{ .Address }};
Sortie: {{ .AuthorizationDate.Date }} a {{ .AuthorizationDate.HourMinute }};
Motifs: {{ .Purpose }}`
func (a *Authorization) String() string {
var b bytes.Buffer
t := template.Must(template.New("attestation").Parse(tmpl))
err := t.Execute(&b, a)
if err != nil {
panic(err)
}
return b.String()
}
func (a *Authorization) Png(w io.Writer) error {
qrCode, err := qrcode.New(a.String(), qrcode.Medium)
if err != nil {
return err
}
return qrCode.Write(256, w)
}
type myTime struct {
time.Time
}
var months = [...]string{
"janvier",
"fevrier",
"mars",
"avri",
"mai",
"juin",
"juillet",
"aout",
"septembre",
"octobre",
"novembre",
"decembre",
}
func (m myTime) Date() string {
return fmt.Sprintf("%v %v %v", m.Format("02"), months[m.Month()-1], m.Format("2006"))
}
func (m myTime) HourMinute() string {
return m.Format("15:04")
}
package main
import (
_ "image/jpeg"
_ "image/png"
"testing"
"time"
)
func TestAuthorization_String(t *testing.T) {
const longForm = "Jan 2, 2006 at 3:04pm (MST)"
testTime, _ := time.Parse(longForm, "Feb 3, 2013 at 7:54pm (PST)")
type fields struct {
CreateDate myTime
Name string
FirstName string
BirthDate myTime
BirthCity string
Address string
AuthorizationDate myTime
Purpose string
}
tests := []struct {
name string
fields fields
want string
}{
{
"simple",
fields{
CreateDate: myTime{testTime},
BirthDate: myTime{testTime},
AuthorizationDate: myTime{testTime},
},
`Cree le: 03 fevrier 2013 a 19:54;
Nom: ;
Prenom: ;
Naissance: 03 fevrier 2013 a ;
Adresse: ;
Sortie: 03 fevrier 2013 a 19:54;
Motifs: `,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
a := &Authorization{
CreateDate: tt.fields.CreateDate,
Name: tt.fields.Name,
FirstName: tt.fields.FirstName,
BirthDate: tt.fields.BirthDate,
BirthCity: tt.fields.BirthCity,
Address: tt.fields.Address,
AuthorizationDate: tt.fields.AuthorizationDate,
Purpose: tt.fields.Purpose,
}
got := a.String()
if got != tt.want {
t.Errorf("Authorization.String() = %v, want %v", got, tt.want)
}
})
}
}
@owulveryck
Copy link
Author

Hello @carlito79,

Quelle ligne de commande executes-tu ?

@lulubulle38
Copy link

lulubulle38 commented Aug 10, 2021

Hello @owuveryck,

Que faut-il lancer exactement pour exécuter ce générateur de QR code ?
sachant que j'ai téléchargé le zip sur mon PC (sous Windows 10) et que les fichiers sont maintenant "associés" au bloc-notes/notepad

Merci de ton aide

@Elodie45
Copy link

Hello @owuveryck , j'ai bien entré la commande go run . > output.png après avoir cloné le dépôt, sauf que j'obtiens ce message :
main.go:14:2: cannot find package "go-qrcode" in any of: /usr/lib/go-1.13/src/go-qrcode (from $GOROOT) /home/elodie/go/src/go-qrcode (from $GOPATH)

Faut il récupérer manuellement le github.com/skip2/go-qrcode ? ou autre chose avant l'exécution ? :)

@Flodu31
Copy link

Flodu31 commented Aug 12, 2021

Bonjour,

Avant, il faut faire: go get -u github.com/skip2/go-qrcode/...

Florent

@Elodie45
Copy link

super merci @Flodu31 :)

@minuss87
Copy link

Bonjour tout le monde,
Je suis novice en la matière, je souhaiterai savoir la procédure pour exécuter ce code.

J'ai installer : go version go1.16.7 windows/amd64
J'ai exécuter avec cmd : go get -u github.com/skip2/go-qrcode/...
Dans le GOPATH je retrouve bien le pkg
J'ai mis les 3 fichiers main.go ; main_test.go et AAA README.md dans un dossier sur mon bureau

Ensuite je bloque, comment exécuter le code ? j'ai essayé plusieurs commandes en pointant dans le dossier sur mon bureau, je n'y arrive pas.

Merci pour votre aide.
Cordialement.

@pcm-x
Copy link

pcm-x commented Aug 18, 2021

bonjour Olivier j'ai essayé Twitter mais impossible d'envoyer un message car il n'y a pas l'icône enveloppe sur ton profil, je voulais savoir si ce projet est toujours d'actualité...
si tu peux, reponds moi sur Twitter en MP
@Pchaibriant
Merci
@owulveryck

@owulveryck
Copy link
Author

Hello @pcm-x je réponds ici c'est plus simple et tout le monde verra la réponse.
Ce "bout de code" était utile au moment ou il était nécessaire d'avoir des attestations dérogatoires pour se déplacer.
Je ne voulais pas utiliser tous-anti-covid pour ça, et ce code permettait de générer le QR code automatiquement. Il était "legal" car il reposait sur une attestation sur l'honneur.
Je vois beaucoup de gens qui s'intéressent à ce gist récemment. Ce code ne sera pas maintenu car nous n'avons plus besoin d'attestation de déplacement désormais.

Pour info, il n'a pas vocation à générer les certificats de passes-sanitaires.

@pcm-x
Copy link

pcm-x commented Aug 19, 2021

Merci pour ta réponse, effectivement en voyant les fichiers je me demandais si on allait avoir droit à un autre QR code/autorisation de sortie à remplir en plus du pass sanitaire....
Ce qui était pas mal inquiétant !
Bonne journée

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment