# Demo OpenID connect application This repository contains a demo application using OAuth2/OpenID Connect to authenticate and authorize users. The code in this repository is licensed under the terms of the Apache License Version 2.0. Copyright © 2020-2023 CAcert Inc. ## Setup ### Certificates You need a server certificate and corresponding private key to run `demo-app`. An easy way to generate server certificate and key for local testing is [`mkcert`](https://github.com/FiloSottile/mkcert/releases). Run `mkcert` to generate `app.cacert.localhost.pem` and `app.cacert.localhost-key.pem`: ```shell mkcert -cert-file app.cacert.localhost ``` ### Configure the Demo Application You will need a 32 byte and a 64 byte random secret for the session authentication and encryption keys: ``` openssl rand -base64 64 openssl rand -base64 32 ``` You also need the client id and the client secret, that have been generated during the OIDC client setup described above. Put the data into `resource_app.toml`: ```ini [oidc] client-id = "" client-secret = "" [session] auth-key = "<64 bytes of base64 encoded data>" enc-key = "<32 bytes of base64 encoded data>" ``` ## Start Now you can start the demo application: ```shell make ./demo-app ``` Visit https://app.cacert.localhost:4000/ in a Browser and you will be directed through the OpenID connect authorization code flow. ## Translations This application uses [go-i18n](https://github.com/nicksnyder/go-i18n/) for internationalization (i18n) support. The translation workflow needs the `go18n` binary which can be installed via ``` go install github.com/nicksnyder/go-i18n/v2/goi18n ``` To extract new messages from the code run ```shell cd translations goi18n extract .. ``` Then use ```shell cd translations goi18n merge active.*.toml ``` to create TOML files for translation as `translate..toml`. After translating the messages run ```shell cd translations goi18n merge active.*.toml translate.*.toml ``` to merge the messages back into the active translation files. To add a new language you need to add the language code to the languages configuration option (default is defined in the configmap in `services/configuration.go`).