├── .watchmanconfig ├── App ├── Config │ ├── .gitignore │ ├── index.dev.js │ ├── index.staging.js │ ├── index.production.js │ └── README.md ├── package.json ├── Theme │ ├── README.md │ ├── Images.js │ ├── index.js │ ├── Colors.js │ ├── Fonts.js │ ├── Metrics.js │ ├── ApplicationStyles.js │ └── Helpers.js ├── Assets │ ├── Images │ │ ├── icon.png │ │ ├── logo.png │ │ └── TOM-Legend.png │ └── README.md ├── Services │ ├── README.md │ ├── GunService.js │ ├── IrisService.js │ └── NavigationService.js ├── Navigators │ ├── README.md │ └── AppNavigator.js ├── Components │ ├── README.md │ ├── Button.js │ ├── ListItem.js │ ├── Svg.js │ ├── Identicon.js │ └── ChatListItem.js ├── Containers │ ├── README.md │ ├── Root │ │ ├── RootScreenStyle.js │ │ └── RootScreen.js │ ├── SplashScreen │ │ ├── SplashScreen.js │ │ └── SplashScreenStyle.js │ ├── ScanChatLink │ │ ├── Style.js │ │ └── Scan.js │ ├── ScanPrivateKey │ │ ├── Style.js │ │ └── Scan.js │ ├── Contacts │ │ ├── Share.js │ │ ├── Style.js │ │ ├── Show.js │ │ ├── Create.js │ │ └── List.js │ ├── Settings │ │ ├── ShowPrivateKeyScreen.js │ │ ├── SettingsScreenStyle.js │ │ ├── SettingsScreen.js │ │ ├── EditPhotoScreen.js │ │ ├── EditProfileScreen.js │ │ └── PeersScreen.js │ ├── Welcome │ │ ├── WelcomeScreenStyle.js │ │ └── WelcomeScreen.js │ ├── Chat │ │ ├── Style.js │ │ ├── Create.js │ │ ├── Show.js │ │ └── List.js │ └── Login │ │ ├── LoginScreenStyle.js │ │ └── LoginScreen.js └── App.js ├── android ├── app │ ├── src │ │ ├── main │ │ │ ├── assets │ │ │ │ └── blank.html │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── iris │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ └── MainApplication.java │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ ├── AndroidManifest.xml │ │ │ └── google-services.json │ │ └── release │ │ │ └── google-services.json │ ├── proguard-rules.pro │ ├── build_defs.bzl │ ├── google-services.json │ ├── BUCK │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle ├── gradle.properties ├── build.gradle ├── gradlew.bat └── gradlew ├── app.json ├── .eslintignore ├── .prettierignore ├── babel.config.js ├── screenshots ├── screen1.png ├── screen2.png └── screen3.png ├── ios ├── Iris │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── 120.png │ │ │ ├── 180.png │ │ │ ├── 40.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 1024.png │ │ │ ├── 120-1.png │ │ │ └── Contents.json │ │ └── Lollero.imageset │ │ │ ├── iris_icon_blue_rgb_1536.png │ │ │ └── Contents.json │ ├── Iris.entitlements │ ├── AppDelegate.h │ ├── main.m │ ├── AppDelegate.m │ ├── Base.lproj │ │ └── LaunchScreen.xib │ └── Info.plist ├── .gitignore ├── Iris.xcworkspace │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── contents.xcworkspacedata ├── IrisTests │ ├── Info.plist │ └── IrisTests.m ├── Iris-tvOSTests │ └── Info.plist ├── Iris-tvOS │ └── Info.plist ├── Podfile ├── Iris.xcodeproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── Iris.xcscheme │ │ └── Iris-tvOS.xcscheme └── Podfile.lock ├── .babelrc ├── .buckconfig ├── .gitlab-ci.yml ├── __tests__ └── App-test.js ├── metro.config.js ├── .prettierrc ├── index.js ├── README.md ├── .github └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── .eslintrc ├── .gitattributes ├── .gitignore ├── LICENSE ├── package.json ├── .flowconfig └── docs ├── setup cocoapods.md └── beta builds.md /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /App/Config/.gitignore: -------------------------------------------------------------------------------- 1 | index.js -------------------------------------------------------------------------------- /App/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App" 3 | } 4 | -------------------------------------------------------------------------------- /android/app/src/main/assets/blank.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Iris", 3 | "displayName": "Iris" 4 | } -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/** 2 | android/** 3 | ios/** 4 | __tests__/** -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules/** 2 | android/** 3 | ios/** 4 | __tests__/** -------------------------------------------------------------------------------- /App/Theme/README.md: -------------------------------------------------------------------------------- 1 | This directory contains the base for the application styles. 2 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | } 4 | -------------------------------------------------------------------------------- /screenshots/screen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/screenshots/screen1.png -------------------------------------------------------------------------------- /screenshots/screen2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/screenshots/screen2.png -------------------------------------------------------------------------------- /screenshots/screen3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/screenshots/screen3.png -------------------------------------------------------------------------------- /App/Assets/Images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/App/Assets/Images/icon.png -------------------------------------------------------------------------------- /App/Assets/Images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/App/Assets/Images/logo.png -------------------------------------------------------------------------------- /App/Assets/Images/TOM-Legend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/App/Assets/Images/TOM-Legend.png -------------------------------------------------------------------------------- /App/Config/index.dev.js: -------------------------------------------------------------------------------- 1 | export const Config = { 2 | API_URL: 'https://jsonplaceholder.typicode.com/users/', 3 | } 4 | -------------------------------------------------------------------------------- /App/Config/index.staging.js: -------------------------------------------------------------------------------- 1 | export const Config = { 2 | API_URL: 'https://jsonplaceholder.typicode.com/users/', 3 | } 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Iris 3 | 4 | -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "production": { 4 | "plugins": ["transform-remove-console"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /App/Config/index.production.js: -------------------------------------------------------------------------------- 1 | export const Config = { 2 | API_URL: 'https://jsonplaceholder.typicode.com/users/', 3 | } 4 | -------------------------------------------------------------------------------- /App/Services/README.md: -------------------------------------------------------------------------------- 1 | This directory contains application services, for example services to connect the application to APIs. 2 | -------------------------------------------------------------------------------- /App/Assets/README.md: -------------------------------------------------------------------------------- 1 | This directory contains all the assets files (i.e. images, audio files or videos...) used by the application. 2 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /App/Navigators/README.md: -------------------------------------------------------------------------------- 1 | This directory contains your main Navigator (AppNavigator.js) 2 | 3 | You can add nested navigators on this folder if you need it. 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/Lollero.imageset/iris_icon_blue_rgb_1536.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/irislib/iris-mobile/HEAD/ios/Iris/Images.xcassets/Lollero.imageset/iris_icon_blue_rgb_1536.png -------------------------------------------------------------------------------- /App/Components/README.md: -------------------------------------------------------------------------------- 1 | This directory contains [presentational components](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0), i.e. React components responsible for the UI of the application. 2 | -------------------------------------------------------------------------------- /App/Containers/README.md: -------------------------------------------------------------------------------- 1 | This directory contains [container components](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0), i.e. React components responsible for the logic of the application. 2 | -------------------------------------------------------------------------------- /App/Services/GunService.js: -------------------------------------------------------------------------------- 1 | import {Gun, SEA} from 'gun/browser.ios.js'; 2 | import GunOpen from 'gun/lib/open'; 3 | import GunLoad from 'gun/lib/load'; 4 | 5 | const gun = new Gun(['https://gun-us.herokuapp.com/gun']); 6 | 7 | export default gun; 8 | -------------------------------------------------------------------------------- /App/App.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import RootScreen from './Containers/Root/RootScreen' 3 | 4 | export default class App extends Component { 5 | render() { 6 | return ( 7 | 8 | ) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | image: node:8.10.0 2 | 3 | cache: 4 | paths: 5 | - node_modules 6 | 7 | before_script: 8 | - yarn 9 | 10 | prettier: 11 | script: 12 | - npm run prettier-check 13 | 14 | eslint: 15 | script: 16 | - npm run lint-check 17 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /App/Containers/Root/RootScreenStyle.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native' 2 | import ApplicationStyles from 'App/Theme/ApplicationStyles' 3 | 4 | export default StyleSheet.create({ 5 | container: { 6 | ...ApplicationStyles.screen.container, 7 | }, 8 | }) 9 | -------------------------------------------------------------------------------- /App/Theme/Images.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Images should be stored in the `App/Images` directory and referenced using variables defined here. 3 | */ 4 | 5 | export default { 6 | icon: require('App/Assets/Images/icon.png'), 7 | logo: require('App/Assets/Images/logo.png'), 8 | } 9 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | # fastlane specific 2 | fastlane/report.xml 3 | 4 | # deliver temporary files 5 | fastlane/Preview.html 6 | 7 | # snapshot generated screenshots 8 | fastlane/screenshots 9 | 10 | # scan temporary files 11 | fastlane/test_output 12 | 13 | # Fastlane builds 14 | builds/* -------------------------------------------------------------------------------- /ios/Iris/Iris.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | # fastlane specific 2 | fastlane/report.xml 3 | 4 | # deliver temporary files 5 | fastlane/Preview.html 6 | 7 | # snapshot generated screenshots 8 | fastlane/screenshots 9 | 10 | # scan temporary files 11 | fastlane/test_output 12 | 13 | # Faslane builds 14 | builds/* 15 | *.xcarchive -------------------------------------------------------------------------------- /App/Theme/index.js: -------------------------------------------------------------------------------- 1 | import Colors from './Colors' 2 | import Fonts from './Fonts' 3 | import Metrics from './Metrics' 4 | import Images from './Images' 5 | import ApplicationStyles from './ApplicationStyles' 6 | import Helpers from './Helpers' 7 | 8 | export { Colors, Fonts, Images, Metrics, ApplicationStyles, Helpers } 9 | -------------------------------------------------------------------------------- /ios/Iris.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native'; 6 | import React from 'react'; 7 | import App from '../App/App'; 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from 'react-test-renderer'; 11 | 12 | jest.useFakeTimers(); 13 | 14 | it('renders correctly', async () => { 15 | renderer.create(); 16 | }); 17 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | printWidth : 100, 3 | tabWidth : 2, 4 | useTabs : false, 5 | semi : false, 6 | singleQuote : true, 7 | trailingComma : "es5", 8 | bracketSpacing : true, 9 | jsxBracketSameLine : false, 10 | arrowParens : "always", 11 | rangeStart : 0, 12 | parser : "babel", 13 | requirePragma : false, 14 | insertPragma : false, 15 | proseWrap : "preserve" 16 | } 17 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Iris' 2 | include ':react-native-notifications' 3 | project(':react-native-notifications').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-notifications/lib/android/app/') 4 | 5 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 6 | include ':app' 7 | -------------------------------------------------------------------------------- /App/Theme/Colors.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains the application's colors. 3 | * 4 | * Define color here instead of duplicating them throughout the components. 5 | * That allows to change them more easily later on. 6 | */ 7 | 8 | export default { 9 | transparent: 'rgba(0,0,0,0)', 10 | //Example colors: 11 | text: '#212529', 12 | primary: '#007bff', 13 | success: '#28a745', 14 | error: '#dc3545', 15 | } 16 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Iris.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native-get-random-values' 6 | import '@gooddollar/gun-asyncstorage' 7 | import { Client } from 'bugsnag-react-native' 8 | const bugsnag = new Client("bb9298087eb87d2c78929a201ddb3e88") 9 | import { AppRegistry } from 'react-native' 10 | import App from './App/App' 11 | import { name as appName } from './app.json' 12 | 13 | AppRegistry.registerComponent(appName, () => App) 14 | -------------------------------------------------------------------------------- /App/Theme/Fonts.js: -------------------------------------------------------------------------------- 1 | const size = { 2 | h1: 38, 3 | h2: 34, 4 | h3: 30, 5 | input: 18, 6 | regular: 17, 7 | medium: 14, 8 | small: 12, 9 | } 10 | 11 | const style = { 12 | h1: { 13 | fontSize: size.h1, 14 | }, 15 | h2: { 16 | fontSize: size.h2, 17 | }, 18 | h3: { 19 | fontSize: size.h3, 20 | }, 21 | normal: { 22 | fontSize: size.regular, 23 | }, 24 | } 25 | 26 | export default { 27 | size, 28 | style, 29 | } 30 | -------------------------------------------------------------------------------- /ios/Iris/Images.xcassets/Lollero.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "iris_icon_blue_rgb_1536.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 12 March 2020: 2 | 3 | Basic features are working, but it's unusably slow. Using native crypto for SEA could be a solution. 4 | 5 | Play Store Beta release: 6 | https://play.google.com/apps/testing/to.iris.Iris 7 | 8 | APK:https://github.com/irislib/iris-mobile/releases 9 | 10 | Testflight pending 11 | 12 | 13 | -------------------------------------------------------------------------------- /ios/Iris/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (nonatomic, strong) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /ios/Iris/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: -------------------------------------------------------------------------------- /App/Containers/SplashScreen/SplashScreen.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Text, View, Image } from 'react-native' 3 | import Style from './SplashScreenStyle' 4 | import { Images } from 'App/Theme' 5 | 6 | export default class SplashScreen extends React.Component { 7 | render() { 8 | return ( 9 | 10 | 11 | 12 | 13 | 14 | ) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /App/Containers/ScanChatLink/Style.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native' 2 | import Fonts from 'App/Theme/Fonts' 3 | import ApplicationStyles from 'App/Theme/ApplicationStyles' 4 | 5 | export default StyleSheet.create({ 6 | centerText: { 7 | flex: 1, 8 | fontSize: 18, 9 | padding: 32, 10 | color: '#777', 11 | }, 12 | textBold: { 13 | fontWeight: '500', 14 | color: '#000', 15 | }, 16 | buttonText: { 17 | fontSize: 21, 18 | color: 'rgb(0,122,255)', 19 | }, 20 | buttonTouchable: { 21 | padding: 16, 22 | }, 23 | }) 24 | -------------------------------------------------------------------------------- /App/Containers/ScanPrivateKey/Style.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native' 2 | import Fonts from 'App/Theme/Fonts' 3 | import ApplicationStyles from 'App/Theme/ApplicationStyles' 4 | 5 | export default StyleSheet.create({ 6 | centerText: { 7 | flex: 1, 8 | fontSize: 18, 9 | padding: 32, 10 | color: '#777', 11 | }, 12 | textBold: { 13 | fontWeight: '500', 14 | color: '#000', 15 | }, 16 | buttonText: { 17 | fontSize: 21, 18 | color: 'rgb(0,122,255)', 19 | }, 20 | buttonTouchable: { 21 | padding: 16, 22 | }, 23 | }) 24 | -------------------------------------------------------------------------------- /android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /App/Containers/SplashScreen/SplashScreenStyle.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native' 2 | import Colors from 'App/Theme/Colors' 3 | import ApplicationStyles from 'App/Theme/ApplicationStyles' 4 | 5 | export default StyleSheet.create({ 6 | container: { 7 | ...ApplicationStyles.screen.container, 8 | display: 'flex', 9 | justifyContent: 'center', 10 | alignItems: 'center', 11 | backgroundColor: Colors.primary, 12 | }, 13 | logoContainer: { 14 | display: 'flex', 15 | justifyContent: 'center', 16 | alignItems: 'center', 17 | height: 70, 18 | width: 70, 19 | backgroundColor: 'white', 20 | }, 21 | logo: { 22 | width: '100%', 23 | height: '100%', 24 | }, 25 | }) 26 | -------------------------------------------------------------------------------- /App/Components/Button.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { TouchableOpacity, Text, StyleSheet } from 'react-native'; 4 | import ApplicationStyles from 'App/Theme/ApplicationStyles' 5 | 6 | class Button extends Component { 7 | render() { 8 | const { text, onPress} = this.props; 9 | return ( 10 | onPress()} 12 | > 13 | {text} 14 | 15 | ); 16 | } 17 | } 18 | 19 | Button.propTypes = { 20 | text: PropTypes.string.isRequired, 21 | onPress: PropTypes.func.isRequired 22 | }; 23 | 24 | export default Button; 25 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "react", 4 | "react-native", 5 | "prettier" 6 | ], 7 | "parserOptions": { 8 | "ecmaVersion": 2018, 9 | "ecmaFeatures": { 10 | "jsx": true, 11 | "modules": true 12 | }, 13 | "sourceType": "module", 14 | "useJSXTextNode": false 15 | }, 16 | "env": { 17 | "react-native/react-native": true 18 | }, 19 | "extends": [ 20 | "standard", 21 | "plugin:react/recommended", 22 | "plugin:react-native/all", 23 | "plugin:prettier/recommended" 24 | ], 25 | "settings": { 26 | "react": { 27 | "version": "detect", 28 | }, 29 | }, 30 | "rules": { 31 | "react-native/no-raw-text": 0 // Avoid false positive, wait for fix 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /App/Components/ListItem.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { TouchableOpacity, Text, StyleSheet, View } from 'react-native'; 4 | import ApplicationStyles from 'App/Theme/ApplicationStyles' 5 | 6 | class ListItem extends Component { 7 | render() { 8 | const { text, onPress} = this.props; 9 | return ( 10 | onPress()}> 11 | 12 | {text} 13 | 14 | 15 | ); 16 | } 17 | } 18 | 19 | ListItem.propTypes = { 20 | text: PropTypes.string.isRequired, 21 | onPress: PropTypes.func.isRequired 22 | }; 23 | 24 | export default ListItem; 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Smartphone (please complete the following information):** 27 | - Device: [e.g. iPhone6] 28 | - OS: [e.g. iOS8.1] 29 | - Version [e.g. 22] 30 | 31 | **Additional context** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /ios/IrisTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | * text=auto 3 | 4 | # Force the following filetypes to have unix eols, so Windows does not break them 5 | **/*.* text eol=lf 6 | 7 | # Windows forced line-endings 8 | /.idea/* text eol=crlf 9 | 10 | # 11 | ## These files are binary and should be left untouched 12 | # 13 | 14 | # (binary is a macro for -text -diff) 15 | *.png binary 16 | *.jpg binary 17 | *.jpeg binary 18 | *.gif binary 19 | *.ico binary 20 | *.mov binary 21 | *.mp4 binary 22 | *.mp3 binary 23 | *.flv binary 24 | *.fla binary 25 | *.swf binary 26 | *.gz binary 27 | *.zip binary 28 | *.7z binary 29 | *.ttf binary 30 | *.eot binary 31 | *.woff binary 32 | *.woff2 binary 33 | *.pyc binary 34 | *.pdf binary 35 | *.ez binary 36 | *.bz2 binary 37 | *.swp binary 38 | *.swp binary 39 | *.ipa binary 40 | *.apk binary 41 | *.jar binary 42 | *gradlew binary 43 | *BUCK binary 44 | -------------------------------------------------------------------------------- /App/Config/README.md: -------------------------------------------------------------------------------- 1 | This directory contains configuration variables in 3 files: 2 | - `index.dev.js` : contains development variables 3 | - `index.production.js` : contains production variables 4 | - `index.staging.js` : contains beta tests variables 5 | 6 | You need to create `index.js` by copying the right file. 7 | 8 | #### Warning 9 | Each time you need to build, you need to verify if your `index.js` is the right one. 10 | For example, during development, before building your app do: 11 | ``` 12 | cp App\Config\index.dev.js App\Config\index.js 13 | ``` 14 | In other environment, you must pay attention to change your `index.js` with the good one. 15 | Also, make sure you add each configuration variable in each configuration file. 16 | 17 | #### Usage 18 | ``` 19 | import Config from 'App/Config' 20 | 21 | ... 22 | let uri = Config.API_URL 23 | ... 24 | 25 | ``` 26 | -------------------------------------------------------------------------------- /ios/Iris-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | to.iris.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useAndroidX=true 21 | android.enableJetifier=true 22 | -------------------------------------------------------------------------------- /App/Services/IrisService.js: -------------------------------------------------------------------------------- 1 | import keypair from '../privateKey.json'; 2 | import gun from './GunService'; 3 | import { Chat } from 'iris-lib'; 4 | import AsyncStorage from '@react-native-community/async-storage'; 5 | 6 | export const session = {}; 7 | 8 | export const login = (gun, keypair, name) => { 9 | session.gun = gun 10 | session.keypair = keypair 11 | session.user = gun.user() 12 | session.user.auth(keypair) 13 | session.chatLinks = {} 14 | if (name) { 15 | session.user.get('profile').get('name').put(name) 16 | } 17 | AsyncStorage.setItem('iris_keypair', JSON.stringify(keypair)) 18 | Chat.getMyChatLinks(gun, keypair, undefined, ({url, id}) => { 19 | session.chatLinks[id] = url 20 | }, true) 21 | } 22 | 23 | export const isValidKey = (key) => { 24 | return (!!(typeof key === `object` && key.pub && key.epub && key.priv && key.epriv)) 25 | } 26 | 27 | export const logout = () => { 28 | AsyncStorage.removeItem('iris_keypair') 29 | session.keypair = null 30 | session.user = null 31 | } 32 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/iris/MainActivity.java: -------------------------------------------------------------------------------- 1 | package to.iris.Iris; 2 | 3 | import com.facebook.react.ReactActivity; 4 | import com.facebook.react.ReactActivityDelegate; 5 | import com.facebook.react.ReactRootView; 6 | import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; 7 | 8 | public class MainActivity extends ReactActivity { 9 | 10 | /** 11 | * Returns the name of the main component registered from JavaScript. 12 | * This is used to schedule rendering of the component. 13 | */ 14 | @Override 15 | protected String getMainComponentName() { 16 | return "Iris"; 17 | } 18 | 19 | @Override 20 | protected ReactActivityDelegate createReactActivityDelegate() { 21 | return new ReactActivityDelegate(this, getMainComponentName()) { 22 | @Override 23 | protected ReactRootView createRootView() { 24 | return new RNGestureHandlerEnabledRootView(MainActivity.this); 25 | } 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /App/Containers/Root/RootScreen.js: -------------------------------------------------------------------------------- 1 | import WebviewCrypto from '@gooddollar/react-native-webview-crypto' 2 | import React, { Component } from 'react' 3 | import NavigationService from 'App/Services/NavigationService' 4 | import AppNavigator from 'App/Navigators/AppNavigator' 5 | import { View } from 'react-native' 6 | import styles from './RootScreenStyle' 7 | import { PropTypes } from 'prop-types' 8 | 9 | class RootScreen extends Component { 10 | componentDidMount() { 11 | 12 | } 13 | 14 | render() { 15 | return ( 16 | 17 | 18 | { 21 | NavigationService.setTopLevelNavigator(navigatorRef) 22 | }} 23 | /> 24 | 25 | ) 26 | } 27 | } 28 | 29 | RootScreen.propTypes = { 30 | startup: PropTypes.func, 31 | } 32 | 33 | export default RootScreen 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | yarn-error.log 38 | 39 | # BUCK 40 | buck-out/ 41 | \.buckd/ 42 | *.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | 58 | # CocoaPods 59 | /ios/Pods/ 60 | 61 | privateKey.json 62 | -------------------------------------------------------------------------------- /App/Containers/Contacts/Share.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { View, Clipboard } from 'react-native' 3 | import Button from 'App/Components/Button' 4 | import QRCode from 'react-native-qrcode-svg' 5 | import Style from './Style' 6 | 7 | class ShareContactScreen extends React.Component { 8 | state = { 9 | url: null 10 | } 11 | 12 | static navigationOptions = { 13 | title: '', 14 | } 15 | 16 | componentDidMount() { 17 | const type = encodeURIComponent(this.props.navigation.getParam('type')) 18 | const value = encodeURIComponent(this.props.navigation.getParam('value')) 19 | const url = `https://iris.to/#/contacts/${type}/${value}` 20 | this.setState({url}) 21 | } 22 | 23 | render() { 24 | return this.state.url ? ( 25 | 26 | 30 |