Le mois dernier, j’ai eu connaissance de l’existence de l’application Refl.me disponible sur le magasin d’applications Android de Google.
Refl.me permet de recevoir des notifications sur son mobile grâce au format JSON.
Refl.me fonctionne directement avec un service web, aucun serveur tiers n’est utilisé, aucune inscription n’est requise et aucun stockage de vos données personnelles n’a lieu.
Refl.me permet simplement de recevoir des données statistiques, des notifications, de superviser des données…
La documentation disponible fournit un exemple en PHP ainsi que la manière de sécuriser l’accès au service web à l’aide d’une clé.
Pour tester un peu l’application, j’ai développé un mini service web fournissant des données météorologiques du service OpenWeatherMap avec la fonctionnalité de sécurisation de l’accès par clé en utilisant le language Go.
Pour ce mini service web, j’ai utilisé les technologies suivantes :
- OpenBSD pour le serveur,
- le démon httpd (OpenBSD),
- le framework Gin en FastGGI,
- la bibliothèque en Go d’accès à l’API OpenWeatherMap.
Au préalable, j’ai renseigné dans les variables d’environnement du système d’exploitation, la clé de l’API OpenWeatherMap ainsi que la clé secrète d’authentification au service web.
Pour la configuration du démon httpd, j’utilise les directives suivantes à adapter à votre configuration :
server "notification.mondomaine.fr" {
listen on * tls port 443
log style combined
connection { max requests 500, timeout 3600 }
location "*" { fastcgi socket ":9999" }
hsts
tls {
certificate "/etc/ssl/notification.mondomaine.fr.fullchain.pem"
key "/etc/ssl/private/notification.mondomaine.fr.key"
}
}
Pour le service web, j’ai utilisé un contrôleur Gin :
// Cette structure permet de stocker les données exportées en JSON
var data struct {
Refl bool `json:"refl.me"`
Title string `json:"title"`
Message string `json:"message"`
Image string `json:"image"`
Number int `json:"refresh"`
Close bool `json:"close"`
UseSecret bool `json:"use_secret"`
SecretOk bool `json:"secret_ok"`
}
func Weather(c *gin.Context) {
key := os.Getenv("MA_CLE")
secret := c.Query("secret")
data.Refl = true
data.Number = 96
data.Close = false
data.UseSecret = true
if len(secret) != 0 {
lsecret := strings.Split(secret, "_")
timestamp := lsecret[0]
checksum := lsecret[1]
sum := fmt.Sprintf("%x", md5.Sum([]byte(timestamp + key)))
if sum == checksum {
w, err := owm.NewCurrent("C", "fr", os.Getenv("WEATHER_TOKEN"))
if err != nil {
log.Fatal(err)
}
w.CurrentByName(c.Param("station"))
city := fmt.Sprintf("%s", strings.ToUpper(c.Param("station")))
temp := fmt.Sprintf("%.1f °C", w.Main.Temp)
data.Title = city
data.Message = temp
data.SecretOk = true
}
} else {
data.Title = fmt.Sprintf("%s", strings.ToUpper(c.Param("station")))
data.Message = "Error. Enter the secret key."
data.SecretOk = false
}
c.JSON(http.StatusOK, data)
}
Pour accéder au service web dans l’application Refl.me, il suffit de renseigner l’URL :
https://notification.mondomaine.fr/meteo/toulouse
Et de fournir la clé d’authentification.
Refl.me est facile à mettre en place et permet de nouvelles possibilités de notification sous Android.