Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jlengrand/kotlin-ports-demo


https://github.com/jlengrand/kotlin-ports-demo

Last synced: about 10 hours ago
JSON representation

Awesome Lists containing this project

README

        

# Kotlin Ports Demo

[![Netlify Status](https://api.netlify.com/api/v1/badges/a5e6c09a-f21f-4d3a-834c-78e5f9dfff15/deploy-status)](https://app.netlify.com/sites/kotlin-ports-demo/deploys)

This repository is a demo of how the [Elm ports](https://guide.elm-lang.org/interop/ports.html) method can be used to quickly introduce a Javascript library into a Kotlin/JS project without too much work with external declarations.

* This repository contains a short [Kotlin/Js](https://kotlinlang.org/docs/js-interop.html) project with a [Firebase integration](https://firebase.google.com/).
* You can demo the app **[here](https://kotlin-ports-demo.netlify.app/)**.
* It is a support to **[this blog post](https://lengrand.fr/using-elm-knowledge-to-dive-into-kotlin-js)**

## Getting started

To run this app locally, you will need to :

- Set up your [Firebase Cloud Firestore](https://firebase.google.com/docs/firestore) to handle and receive users and messages.
- Be able to run this repository

### Setting up the Database and Auth

- Go to the [Firebase console](https://console.firebase.google.com/?pli=1) and create a new project
- Setup Google Signin in the Authentication part.

![How to setup Google Sign-In](https://github.com/jlengrand/elm-firebase/blob/master/images/auth-setup.png)

- Create a new Cloud Firestore in locked mode
- Change the Firestore rules so that only logged requests can be written / read.

```
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/messages/{messageId} {
allow create, read, update, delete: if request.auth.uid == userId;
}
}
}
```

Using those rules, each user will get its own space, with a messages store inside it. So this doubles down as database setup, and security.

That should be it! If needed, test your rules using the [Simulator](https://firebase.google.com/docs/firestore/security/get-started#testing_rules).

### Running the code

To run the code, only a few steps are needed :).

- Clone the repo : `$ git clone [email protected]:jlengrand/kotlin-ports-demo.git`
- Move in the repo : `$ cd kotlin-ports-demo`
- You will need to modify the `src/jsMain/kotlin/resources/firebase-ports/constants.js` file to let the app know about your Firestore project. The file looks like this :

```
export const FIREBASE_CONFIG = {
apiKey: "AIzaSyAbDxaYepNPHJSSnUtWAH9VmYQXWPVm3gI",
authDomain: "kotlin-js-ports-demo.firebaseapp.com",
projectId: "kotlin-js-ports-demo",
storageBucket: "kotlin-js-ports-demo.appspot.com",
messagingSenderId: "246888979761",
appId: "1:246888979761:web:e4dd65801c34ed5abfa410",
measurementId: "G-BG8D2JGLQD"
};
```

The required information is the same as described in the [Firebase config object](https://firebase.google.com/docs/web/setup#config-object).
The easiest way is to go to the settings page of your project, and scroll down until you see the javascript snippet. It will contain all the information needed.

_Note : All the information in the .env file is not secret, and can be shared. In fact, it will be accessible to anyone using your app via the console. [This is not a problem](https://stackoverflow.com/questions/37482366/is-it-safe-to-expose-firebase-apikey-to-the-public)!_

![Settings page of Firebase project](https://github.com/jlengrand/elm-firebase/blob/master/images/settings.png)

- Run the app : `$ ./gradlew clean build jsBrowserDevelopmentRun`. You will be able to test the app at `http://localhost:8080`!

### Deploying

If for some reason you want to deploy the code somewhere, you can run `$ ./gradlew jsBrowserDistribution`. Now you have to serve the content of the `build/distributions` folder, and you're done!

## Contributing

Contributions are more than welcome ! You can [pick one of the issues of the list](https://github.com/jlengrand/kotlin-ports-demo/issues) or simply create your own :).

## Authors

* [Julien Lengrand-Lambert](https://twitter.com/jlengrand)

Happy hacking!