Skip to content

Commit

Permalink
Merge pull request #33 from jokoframework/issue#28
Browse files Browse the repository at this point in the history
Closes #32
  • Loading branch information
alefq authored Aug 9, 2022
2 parents 5d799a6 + 26fcb38 commit 5d42b43
Show file tree
Hide file tree
Showing 10 changed files with 128 additions and 35 deletions.
47 changes: 26 additions & 21 deletions RUN.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,16 @@

### Step 2) Configuración del /opt/starter-kit/dev

Clonar el repositorio joko_backend_starter_kit
Acceder y copiar el archivo "application.properties.example" y "development.vars":

cd joko_backend_starter_kit/
cp application.properties.example /opt/starter-kit/dev/
cp development.vars /opt/starter-kit/


Fuente: https://github.com/jokoframework/joko_backend_starter_kit

### Step 3) Configuración del archivo "development.vars"
Se debe configurar el archivo "development.vars", que servirá para la ejecucion de liquibase. Este es un archivo bash que debe tener dos variables:

Expand Down Expand Up @@ -58,45 +63,45 @@ Se recomienda que este archivo esté fuera del workspsace en el directorio padre
```
$ ./scripts/updater update
```
## Opción 1: Correr con Docker

Si ya se tienen instaladas las librerías Joko necesarias (joko-utils y security) entonces se puede proceder a empaquetar el proyecto (Ej: mvn package) y luego:
La forma más simple de levantar el proyecto es con la utilización de Docker, ejecutando el siguiente comando dentro del proyecto:

```shell
$ docker-compose up
```


## Corren con Maven
## Opción 2: Correr con Maven

Una vez hechos estos cambios, solo debemos correr el proyecto como una
aplicación de Spring Boot, o con la línea de comando (se requiere maven instalado).

```shell
$ mvn spring-boot:run -Dext.prop.dir=/opt/starter-kit/dev -Dspring.config.location=file:///opt/starter-kit/dev/application.properties
$ mvn spring-boot:run
```


El usuario/password default que se crea con la base de datos, es admin/123456

## Configuración de red dentro de Android Studio:
1.- Agregar un archivo "network_security_config" en res/xml.

2.- Agregar una configuración de dominio y establecer cleartextTrafficPermitted="true":
### Step 7) Configuración de red dentro de Android Studio:
1.- Modificar el archivo "network_security_config" en res/xml.
Agregar una configuración de dominio y establecer cleartextTrafficPermitted="true":
```shell
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false"/>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">yourip</domain>
</domain-config>
</network-security-config>
```
3.- Agregar configuración de seguridad de red al archivo AndroidManifest.xml:
```shell
<application
android:name=".MyApplication"
android:networkSecurityConfig="@xml/network_security_config"
...
```
3.- Cambiar ip existente en jwt_URL y user_acces_URL dentro del archivo xml :
```shell
<string name="jwt_URL">http://10.1.1.117:8080/api/login</string>
<string name="user_acces_URL">http://10.1.1.117:8080/api/token/user-access</string>
```

Obs: En "yourip" debes agregar la ip de tu máquina.

2.- Habilitar APIs de Google o servicios de Firebase

OBS: Para habilitar las APIs de Google o servicios de Firebase es necesario agregar el archivo google-services.json en el directorio de /app. Este proceso es obligatorio para cada vez que se importe el proyecto.
Para habilitar las APIs de Google o servicios de Firebase es necesario agregar el archivo google-services.json en el directorio de /app. Este proceso es obligatorio para cada vez que se importe el proyecto.
Puedes seguir las indicaciones de: https://support.google.com/firebase/answer/7015592?hl=en#zippy=%2Cin-this-article

Fuente: https://developers.google.com/android/guides/google-services-plugin
9 changes: 9 additions & 0 deletions app/src/debug/res/xml/network_security_config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false"/>
<domain-config cleartextTrafficPermitted="true">
<!--- whitelist of secure host/domains -->
<domain includeSubdomains="true">192.168.43.143</domain>
<domain includeSubdomains="true">10.1.1.113</domain>
</domain-config>
</network-security-config>
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import io.fabric.sdk.android.Fabric;
import io.github.jokoframework.BuildConfig;
import io.github.jokoframework.R;
import io.github.jokoframework.constants.AppConstants;
import io.github.jokoframework.eula.Eula;
import io.github.jokoframework.login.CredentialsTextView;
import io.github.jokoframework.mboehaolib.constants.Constants;
Expand All @@ -42,6 +43,7 @@
import io.github.jokoframework.model.UserAccessResponse;
import io.github.jokoframework.model.UserData;
import io.github.jokoframework.otp.OtpActivityNotLogged;
import io.github.jokoframework.singleton.MboehaoApp;
import io.github.jokoframework.utilities.AppUtils;
import rx.Observable;
import rx.Subscriber;
Expand Down Expand Up @@ -95,6 +97,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
initializeUI();
MboehaoApp.prompDevHostName(this);
}

private void initializeUI() {
Expand Down Expand Up @@ -299,7 +302,7 @@ private void loginJWT(LoginRequest loginRequest) {

// Instanciar el RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url = getString(R.string.jwt_URL);
String url = MboehaoApp.getHostName() + getString(R.string.jwt_URL);

Map<String, String> params = new HashMap();
params.put("username", loginRequest.getUsername());
Expand All @@ -319,7 +322,7 @@ private void loginJWT(LoginRequest loginRequest) {
loginSuccess = response.getString("success");
if (loginSuccess.equals("true")){
secret = response.getString("secret");
i.putExtra("SECRET", secret);
i.putExtra(AppConstants.SECRET, secret);
Utils.showToast(getBaseContext(), "Login succesful.");
thisActivity().startActivity(i);// Iniciar Home activity
//loginSuccessful();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
import java.util.Map;

import io.github.jokoframework.R;
import io.github.jokoframework.constants.AppConstants;
import io.github.jokoframework.mboehaolib.util.Utils;
import io.github.jokoframework.singleton.MboehaoApp;

public class SecondAuthenticationActivity extends BaseActivity {
private EditText otpTextField;
private String secret;
private Activity thisActivity;

public Activity thisActivity() {
return thisActivity;
}
Expand All @@ -33,7 +36,7 @@ protected void onCreate(Bundle savedInstanceState) {
initializeUI();
Bundle b = getIntent().getExtras();
assert b != null;
secret = (String) b.get("SECRET");
secret = (String) b.get(AppConstants.SECRET);
}

private void initializeUI(){
Expand All @@ -58,7 +61,8 @@ private void initializeUI(){

private void otpValid(View view){
RequestQueue queue = Volley.newRequestQueue(this);
String url = getString(R.string.user_acces_URL);

String url = MboehaoApp.getHostName() + getString(R.string.user_acces_URL);

final Context ctx = view.getContext();
Intent intent = new Intent(ctx, HomeActivity.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public class AppConstants {
public static final String DEVICE_NAME = "deviceName";
//Default code para la app de ejemplo de Joko Security
public static final String DEFAULT_DEMO_ACCCESS_CODE = "123456";
public static final String SECRET = "SECRET";
public static Integer msgId = 0;

public static final String FROM_BACKGROUND_SERVICE = "FROM_BACKGROUND_SERVICE";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
import io.github.jokoframework.mboehaolib.util.Utils;
import io.github.jokoframework.otp.token.Token;
import io.github.jokoframework.otp.token.TokenPersistence;
import io.github.jokoframework.singleton.MboehaoApp;

public class SaveActivity extends BaseActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -44,7 +44,6 @@ public void onClick(View v) {
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

saveSeed(token);
finish();
}
Expand All @@ -54,7 +53,8 @@ public void onClick(View v) {
private void saveSeed(Token token){
RequestQueue queue = Volley.newRequestQueue(this);

String url = getString(R.string.user_acces_URL); //<--saveseed_URL url to request, change values/strings.xml
// saveseed_URL url to request, change values/strings.xml
String url = MboehaoApp.getHostName() + getString(R.string.user_acces_URL);

//Creates parameters
Map<String, String> params = new HashMap();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
package io.github.jokoframework.singleton;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.preference.PreferenceManager;
import androidx.multidex.MultiDex;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.crashlytics.android.Crashlytics;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;


import org.apache.commons.lang3.StringUtils;

import java.util.concurrent.TimeUnit;

import io.fabric.sdk.android.Fabric;
Expand All @@ -35,6 +42,9 @@ public class MboehaoApp extends Application {

private static Context singletonApplicationContext;
private static MboehaoApp mySelf;
private static String hostName = "https://sodep.com.py";
private static Boolean devHostNameDefined = false;

/**
* Instance variables
*/
Expand Down Expand Up @@ -80,6 +90,46 @@ public void onCreate() {
MboehaoApp.setSingletonApplicationContext(this.getApplicationContext());
}

public static void setHostName(String newHostName){
hostName = newHostName;
}

public static String getHostName(){
return hostName;
}

/* Contribución basado en https://github.com/GonzaloGaleano/Mboehao */
public static void prompDevHostName(Activity ctx) {
if ( BuildConfig.DEBUG ) {
if ( !devHostNameDefined ) {
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
LayoutInflater inflater = ctx.getLayoutInflater();

View view = inflater.inflate(R.layout.prompt_hostname_view, null);
EditText inputHostName = view.findViewById(R.id.hostNameInput);

builder.setView(view)
.setPositiveButton(R.string.button_accept, (dialog, id) -> {
if ( StringUtils.isBlank(inputHostName.getText())) {
MboehaoApp.prompDevHostName(ctx);
return;
}
MboehaoApp.setHostName(inputHostName.getText().toString());
devHostNameDefined = true;
})
.setNegativeButton(R.string.button_cancel, (dialog, id) -> {
if ( StringUtils.isBlank(inputHostName.getText())) {
MboehaoApp.prompDevHostName(ctx);
}
dialog.cancel();
});

AlertDialog dialog = builder.create();
dialog.show();
}
}
}

public OkHttpClient.Builder getHttpClient() {
return httpClient;
}
Expand Down Expand Up @@ -121,11 +171,12 @@ public static void setSingletonApplicationContext(Context singletonApplicationCo

synchronized public Tracker getDefaultTracker() {
if (mTracker == null) {
this.analytics = GoogleAnalytics.getInstance(this);
analytics.getInstance(this).setLocalDispatchPeriod(1);
analytics = GoogleAnalytics.getInstance(this);
analytics.setLocalDispatchPeriod(1);
// To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG
mTracker = analytics.newTracker(0x7f070000);
mTracker.enableAutoActivityTracking(true);

}
return mTracker;
}
Expand Down
20 changes: 20 additions & 0 deletions app/src/main/res/layout/prompt_hostname_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
android:id="@+id/hostNameInput"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/dummyHostname"
android:inputType="textUri"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:autofillHints="" />


</androidx.constraintlayout.widget.ConstraintLayout>
2 changes: 0 additions & 2 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mboehao</string>
<string name="parse_server_url">https://testing.sodep.com.py/parse</string>
<string name="parse_app_id">DqiNAD6RDWT</string>
<string name="remembercredentials">Recordar Credenciales?</string>
<string name="dataSaved">Elije tu imagen!</string>
<string name="dataHint">Nota de Descripcion</string>
Expand Down
8 changes: 5 additions & 3 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@
<string name="settings_pwd_too_short">New password must have at least 8 characters</string>
<string name="eula_warning_body">Ud. no aceptó aún los términos de uso de la aplicación. Por favor lea hasta el final y marque la casilla de aceptación si está de acuerdo con las condiciones</string>
<string name="eula_URL">http://example.com/</string>
<string name="jwt_URL">http://192.168.0.33:8080/api/login</string>
<string name="user_acces_URL">http://192.168.0.33:8080/api/token/user-access</string>
<string name="jwt_URL">/api/login</string>
<string name="user_acces_URL">/api/token/user-access</string>
<string name="rest_URL">https://restcountries.eu/rest/v2/all?fields=name;alpha2Code</string>
<string name="eula_warning_title"></string>
<string name="eula_title">Aviso Legal de Responsabilidades</string>
Expand Down Expand Up @@ -183,7 +183,7 @@
<!-- Example settings for Notifications -->
<string name="pref_header_notifications">Notifications</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="dummyHostname">http://localhost\\</string>
<string name="dummyHostname">http://localhost:port\</string>
<string name="defaultSwitchMessage">Sin entrada</string>
<string name="mistakeToSignIn">Usuario y/o clave son incorrectas</string>
<string name="error_field_required">Campo Obligatorio</string>
Expand All @@ -199,6 +199,8 @@
<string name="rewrite_password">Rewrite Password</string>
<string name="otp_qr_scanner">OTP - QR SCANNER</string>
<string name="enter">Enter</string>
<string name="parse_server_url">https://testing.sodep.com.py/parse</string>
<string name="parse_app_id">DqiNAD6RDWT</string>


</resources>

0 comments on commit 5d42b43

Please sign in to comment.