ported to IntelliJ Idea

pull/5/head
Felix Prahl-Kamps 2018-06-10 16:28:28 +02:00
parent 3eb0d68750
commit d3c25b8be9
26 changed files with 1137 additions and 527 deletions

View File

@ -2,8 +2,9 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "de.overview.wg.its.misp_authentificator"
applicationId "de.overview.wg.its.mispauth"
minSdkVersion 21
targetSdkVersion 27
versionCode 1
@ -21,7 +22,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

View File

@ -1,4 +1,4 @@
package de.overview.wg.its.misp_authentificator;
package de.overview.wg.its.mispauth;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
@ -17,10 +17,10 @@ import static org.junit.Assert.*;
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("de.overview.wg.its.misp_authentificator", appContext.getPackageName());
assertEquals("de.overview.wg.its.mispauth", appContext.getPackageName());
}
}

View File

@ -1,33 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.overview.wg.its.misp_authentificator">
package="de.overview.wg.its.mispauth">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<activity
android:label="@string/title_activity_settings"
android:name=".activity.SettingsActivity"
android:parentActivityName=".activity.MainActivity" />
<activity
android:parentActivityName=".activity.MainActivity"
android:name=".activity.SyncActivity"
android:label="@string/title_activity_sync"
android:theme="@style/AppTheme"/>
</application>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".activity.SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName=".activity.MainActivity"/>
<activity
android:name=".activity.SyncActivity"
android:label="@string/title_activity_sync"
android:parentActivityName=".activity.MainActivity"/>
</application>
</manifest>

View File

@ -1,54 +0,0 @@
package de.overview.wg.its.misp_authentificator;
import android.content.Context;
import android.content.SharedPreferences;
public class PreferenceManager {
private static PreferenceManager instance;
private Context context;
private SharedPreferences sharedPreferences;
private String PREF_KEY_SERVER_URL;
private String PREF_KEY_SERVER_API_KEY;
private PreferenceManager(Context context) {
this.context = context;
sharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context);
PREF_KEY_SERVER_URL = context.getResources().getString(R.string.key_server_url);
PREF_KEY_SERVER_API_KEY = context.getResources().getString(R.string.key_server_api_key);
}
public String getMyServerUrl() {
return sharedPreferences.getString(PREF_KEY_SERVER_URL, "");
}
public void setMyServerUrl(String serverUrl) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_KEY_SERVER_URL, serverUrl);
editor.apply();
}
public String getMyServerApiKey() {
return sharedPreferences.getString(PREF_KEY_SERVER_API_KEY, "");
}
public void setMyServerApiKey(String apiKey) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_KEY_SERVER_API_KEY, apiKey);
editor.apply();
}
public void deleteAllLocalData() {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.apply();
}
public static PreferenceManager Instance(Context context) {
if(instance == null) {
instance = new PreferenceManager(context);
}
return instance;
}
}

View File

@ -1,48 +0,0 @@
package de.overview.wg.its.misp_authentificator.activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import net.glxn.qrgen.android.QRCode;
import java.lang.reflect.Field;
import de.overview.wg.its.misp_authentificator.R;
public class SyncActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sync);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
generateMyQR();
}
private void generateMyQR() {
// ImageView qrImageView = findViewById(R.id.sync_my_qr);
Bitmap myBitmap = QRCode.from("This is my organisation information!")
.withColor(0xFF000000, 0x00000000)
.withSize(512,512)
.bitmap();
// qrImageView.setImageBitmap(myBitmap);
}
}

View File

@ -1,48 +0,0 @@
package de.overview.wg.its.misp_authentificator.adapter;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import de.overview.wg.its.misp_authentificator.R;
public class ExtOrgAdapter extends RecyclerView.Adapter<ExtOrgAdapter.ViewHolder> {
private String[] dataSet;
public ExtOrgAdapter(String[] dataSet) {
this.dataSet = dataSet;
}
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View extOrgView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.view_holder_ext_org, parent, false);
return new ViewHolder(extOrgView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.orgTitle.setText(dataSet[position]);
}
@Override
public int getItemCount() {
return dataSet.length;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView orgTitle;
public ViewHolder(View v) {
super(v);
orgTitle = v.findViewById(R.id.ext_org_title);
}
}
}

View File

@ -1,9 +1,10 @@
package de.overview.wg.its.misp_authentificator.activity;
package de.overview.wg.its.mispauth.activity;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@ -11,47 +12,25 @@ import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import de.overview.wg.its.misp_authentificator.PreferenceManager;
import de.overview.wg.its.misp_authentificator.R;
import de.overview.wg.its.misp_authentificator.adapter.ExtOrgAdapter;
import de.overview.wg.its.mispauth.R;
import de.overview.wg.its.mispauth.adapter.ExtOrgAdapter;
import de.overview.wg.its.mispauth.auxiliary.PreferenceManager;
import de.overview.wg.its.mispauth.model.Organisation;
public class MainActivity extends AppCompatActivity {
PreferenceManager preferenceManager;
private Organisation[] externalOrganisations;
@Override
protected void onCreate(Bundle savedInstanceState) {
preferenceManager = PreferenceManager.Instance(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RecyclerView orgRecyclerView = findViewById(R.id.orgRecyclerView);
orgRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager orgLayoutManager = new LinearLayoutManager(this);
orgRecyclerView.setLayoutManager(orgLayoutManager);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(orgRecyclerView.getContext(), 1);
orgRecyclerView.addItemDecoration(dividerItemDecoration);
String[] dataSet = {};
RecyclerView.Adapter orgAdapter = new ExtOrgAdapter(dataSet);
orgRecyclerView.setAdapter(orgAdapter);
if(dataSet.length == 0){
orgRecyclerView.setVisibility(View.GONE);
findViewById(R.id.empty_view).setVisibility(View.VISIBLE);
} else {
orgRecyclerView.setVisibility(View.VISIBLE);
findViewById(R.id.empty_view).setVisibility(View.GONE);
}
getExternalOrganisations();
setUpRecyclerView();
FloatingActionButton fabAdd = findViewById(R.id.fab_add);
final FloatingActionButton fabSync = findViewById(R.id.fab_sync);
@ -80,7 +59,6 @@ public class MainActivity extends AppCompatActivity {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
@ -93,6 +71,47 @@ public class MainActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
private void setUpRecyclerView() {
RecyclerView orgRecyclerView = findViewById(R.id.orgRecyclerView);
orgRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager orgLayoutManager = new LinearLayoutManager(this);
orgRecyclerView.setLayoutManager(orgLayoutManager);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(orgRecyclerView.getContext(), 1);
orgRecyclerView.addItemDecoration(dividerItemDecoration);
RecyclerView.Adapter orgAdapter = new ExtOrgAdapter(this, externalOrganisations);
orgRecyclerView.setAdapter(orgAdapter);
if(externalOrganisations.length == 0){
orgRecyclerView.setVisibility(View.GONE);
findViewById(R.id.empty_view).setVisibility(View.VISIBLE);
} else {
orgRecyclerView.setVisibility(View.VISIBLE);
findViewById(R.id.empty_view).setVisibility(View.GONE);
}
final SwipeRefreshLayout refreshLayout = findViewById(R.id.recycler_refresh);
refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// TODO do stuff
// refreshLayout.setRefreshing(false);
}
});
}
private void getExternalOrganisations(){
Organisation a = new Organisation();
a.setName("Ferrari");
a.setDescription("Ferrari has nothing to share");
a.setSector("Fast cars");
a.setNationality("Italy");
a.setUserCount(67);
externalOrganisations = new Organisation[] {a};
}
private void startSyncActivity(){
startActivity(new Intent(this, SyncActivity.class));

View File

@ -1,38 +1,40 @@
package de.overview.wg.its.misp_authentificator.activity;
package de.overview.wg.its.mispauth.activity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ProgressBar;
import com.android.volley.AuthFailureError;
import com.android.volley.NoConnectionError;
import android.widget.TextView;
import com.android.volley.VolleyError;
import org.json.JSONException;
import de.overview.wg.its.mispauth.R;
import de.overview.wg.its.mispauth.auxiliary.PreferenceManager;
import de.overview.wg.its.mispauth.auxiliary.ReadableError;
import de.overview.wg.its.mispauth.model.Organisation;
import de.overview.wg.its.mispauth.model.User;
import de.overview.wg.its.mispauth.network.MispRequest;
import org.json.JSONObject;
import de.overview.wg.its.misp_authentificator.PreferenceManager;
import de.overview.wg.its.misp_authentificator.R;
import de.overview.wg.its.misp_authentificator.network.MispRequest;
public class SettingsActivity extends AppCompatActivity {
private static final String TAG = "MISP-TAG";
private static final String TAG = "DEBUG";
private PreferenceManager preferenceManager;
private ProgressBar progressBar;
private TextInputLayout serverUrlLayout, apiKeyLayout;
private EditText serverUrlText, apiKeyText;
private Organisation org;
private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -48,18 +50,26 @@ public class SettingsActivity extends AppCompatActivity {
apiKeyLayout = findViewById(R.id.input_layout_api_key);
serverUrlText = findViewById(R.id.edit_server_url);
apiKeyText = findViewById(R.id.edit_api_key);
progressBar = findViewById(R.id.progressBar);
FloatingActionButton fabDlOrgInfo = findViewById(R.id.fab_download_own_org_info);
fabDlOrgInfo.setOnClickListener(new View.OnClickListener() {
findViewById(R.id.fab_download_own_org_info).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadMyOrgInfo();
}
});
apiKeyText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == 66) {
hideKeyboard(v);
apiKeyText.clearFocus();
return true;
}
return false;
}
});
restoreSavedValues();
}
@ -68,7 +78,6 @@ public class SettingsActivity extends AppCompatActivity {
getMenuInflater().inflate(R.menu.menu_settings, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
@ -83,15 +92,39 @@ public class SettingsActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
private void setOrganisation(Organisation org) {
if(org == null) {
return;
}
TextView title = findViewById(R.id.organisation_title);
TextView uuid = findViewById(R.id.organisation_uuid);
TextView description = findViewById(R.id.organisation_description);
TextView nationality = findViewById(R.id.organisation_nationality);
TextView sector = findViewById(R.id.organisation_sector);
TextView userCount = findViewById(R.id.organisation_user_count);
title.setText(org.getName());
uuid.setText(org.getUuid());
description.setText(org.getDescription());
nationality.setText(org.getNationality());
sector.setText(org.getSector());
userCount.setText("" + org.getUserCount());
}
private void restoreSavedValues() {
preferenceManager = PreferenceManager.Instance(this);
serverUrlText.setText(preferenceManager.getMyServerUrl());
apiKeyText.setText(preferenceManager.getMyServerApiKey());
setOrganisation(preferenceManager.getMyOrganisation());
}
private void downloadMyOrgInfo(){
user = new User();
org = new Organisation();
boolean failed = false;
@ -110,70 +143,69 @@ public class SettingsActivity extends AppCompatActivity {
if(failed) {
return;
} else {
serverUrlLayout.setError(null);
apiKeyLayout.setError(null);
}
final MispRequest request = MispRequest.Instance(this);
request.setServerCredentials(tmpServerUrl, tmpApiKey);
progressBar.setVisibility(View.VISIBLE);
request.myUserInformation(new MispRequest.UserInformationCallback() {
@Override
public void onResult(JSONObject myUserInformation) {
int orgID;
user.fromJSON(myUserInformation);
preferenceManager.setMyUser(user);
try {
orgID = myUserInformation.getInt("org_id");
int orgID = user.getOrgId();
request.OrganisationInformation(orgID, new MispRequest.OrganisationInformationCallback() {
@Override
public void onResult(JSONObject organisationInformation) {
progressBar.setVisibility(View.GONE);
Log.i(TAG, "onResult: " + organisationInformation.toString());
}
request.OrganisationInformation(orgID, new MispRequest.OrganisationInformationCallback() {
@Override
public void onError(VolleyError volleyError) {
progressBar.setVisibility(View.GONE);
Log.e(TAG, "onError: " + volleyError.toString());
}
});
@Override
public void onResult(JSONObject organisationInformation) {
progressBar.setVisibility(View.GONE);
} catch (JSONException e) {
e.printStackTrace();
}
org.fromJSON(organisationInformation);
preferenceManager.setMyOrganisation(org);
setOrganisation(org);
}
@Override
public void onError(VolleyError volleyError) {
progressBar.setVisibility(View.GONE);
MakeSnackbar(ReadableError.toReadable(volleyError));
Log.e(TAG, "onError: " + volleyError.toString());
}
});
}
@Override
public void onError(VolleyError volleyError) {
progressBar.setVisibility(View.GONE);
if(volleyError instanceof NoConnectionError) {
MakeAlert("No connection to server");
} else if(volleyError instanceof AuthFailureError) {
MakeAlert("Wrong API key");
}
MakeSnackbar(ReadableError.toReadable(volleyError));
}
});
// If auth was successful: save new credentials
preferenceManager.setMyServerUrl(tmpServerUrl);
preferenceManager.setMyServerApiKey(tmpApiKey);
}
private void MakeAlert(String msg){
private void MakeSnackbar(String msg){
View contextView = findViewById(R.id.coordinator);
Snackbar.make(contextView, msg, Snackbar.LENGTH_LONG)
.addCallback(new Snackbar.Callback(){
@Override
public void onShown(Snackbar sb) {
progressBar.setVisibility(View.GONE);
}
}).show();
Snackbar.make(contextView, msg, Snackbar.LENGTH_LONG).show();
}
private void hideKeyboard(View view) {
InputMethodManager manager = (InputMethodManager) view.getContext().getSystemService(INPUT_METHOD_SERVICE);
if (manager != null) {
manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
}

View File

@ -0,0 +1,14 @@
package de.overview.wg.its.mispauth.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import de.overview.wg.its.mispauth.R;
public class SyncActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sync);
}
}

View File

@ -0,0 +1,65 @@
package de.overview.wg.its.mispauth.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import de.overview.wg.its.mispauth.R;
import de.overview.wg.its.mispauth.auxiliary.OrganisationDialog;
import de.overview.wg.its.mispauth.model.Organisation;
public class ExtOrgAdapter extends RecyclerView.Adapter<ExtOrgAdapter.ViewHolder> {
private Context context;
private Organisation[] dataSet;
public ExtOrgAdapter(Context context, Organisation[] dataSet) {
this.context = context;
this.dataSet = dataSet;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View extOrgView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_holder_ext_org, parent, false);
return new ViewHolder(extOrgView);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.orgTitle.setText(dataSet[position].getName());
holder.subTitle.setText(dataSet[position].getDescription());
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OrganisationDialog d = new OrganisationDialog(context);
d.createDialog(dataSet[position]);
}
});
}
@Override
public int getItemCount() {
return dataSet.length;
}
public static class ViewHolder extends RecyclerView.ViewHolder{
RelativeLayout parentLayout;
TextView orgTitle;
TextView subTitle;
public ViewHolder(View v) {
super(v);
parentLayout = v.findViewById(R.id.parent_layout);
orgTitle = v.findViewById(R.id.ext_org_title);
subTitle = v.findViewById(R.id.ext_org_sub_title);
}
}
}

View File

@ -0,0 +1,45 @@
package de.overview.wg.its.mispauth.auxiliary;
import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import de.overview.wg.its.mispauth.R;
import de.overview.wg.its.mispauth.model.Organisation;
public class OrganisationDialog {
private AlertDialog.Builder dialogBuilder;
private LayoutInflater inflater;
public OrganisationDialog(Context context) {
dialogBuilder = new AlertDialog.Builder(context);
inflater = ((Activity)context).getLayoutInflater();
}
public void createDialog(Organisation org) {
View dialogContent = inflater.inflate(R.layout.view_holder_organisation, null);
dialogBuilder.setView(dialogContent);
TextView title = dialogContent.findViewById(R.id.organisation_title);
title.setText(org.getName());
TextView description = dialogContent.findViewById(R.id.organisation_description);
description.setText(org.getDescription());
TextView sector = dialogContent.findViewById(R.id.organisation_sector);
sector.setText(org.getSector());
TextView nationality = dialogContent.findViewById(R.id.organisation_nationality);
nationality.setText(org.getNationality());
TextView userCount = dialogContent.findViewById(R.id.organisation_user_count);
userCount.setText("" + org.getUserCount());
dialogBuilder.setPositiveButton("OK", null);
dialogBuilder.show();
}
}

View File

@ -0,0 +1,95 @@
package de.overview.wg.its.mispauth.auxiliary;
import android.content.Context;
import android.content.SharedPreferences;
import de.overview.wg.its.mispauth.model.Organisation;
import de.overview.wg.its.mispauth.model.User;
import org.json.JSONException;
import org.json.JSONObject;
public class PreferenceManager {
private static PreferenceManager instance;
private SharedPreferences sharedPreferences;
private static String PREF_KEY_SERVER_URL = "key_server_url";
private static String PREF_KEY_SERVER_API_KEY = "key_server_api_key";
private static String PREF_KEY_MY_ORGANISATION = "key_my_organisation";
private static String PREF_KEY_MY_USER = "key_my_user";
private PreferenceManager(Context context) {
sharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context);
}
/**
* @return own Organisation if available, else null
*/
public Organisation getMyOrganisation() {
try {
JSONObject jsonObject = new JSONObject(sharedPreferences.getString(PREF_KEY_MY_ORGANISATION, ""));
Organisation org = new Organisation();
org.fromJSON(jsonObject);
return org;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public void setMyOrganisation(Organisation org) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_KEY_MY_ORGANISATION, org.toJSON().toString());
editor.apply();
}
public User getMyUser() {
try {
JSONObject jsonObject = new JSONObject(sharedPreferences.getString(PREF_KEY_MY_USER, ""));
User user = new User();
user.fromJSON(jsonObject);
return user;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public void setMyUser(User user) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_KEY_MY_USER, user.toJSON().toString());
editor.apply();
}
public String getMyServerUrl() {
return sharedPreferences.getString(PREF_KEY_SERVER_URL, "");
}
public void setMyServerUrl(String serverUrl) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_KEY_SERVER_URL, serverUrl);
editor.apply();
}
public String getMyServerApiKey() {
return sharedPreferences.getString(PREF_KEY_SERVER_API_KEY, "");
}
public void setMyServerApiKey(String apiKey) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(PREF_KEY_SERVER_API_KEY, apiKey);
editor.apply();
}
public void deleteAllLocalData() {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.apply();
}
public static PreferenceManager Instance(Context context) {
if(instance == null) {
instance = new PreferenceManager(context);
}
return instance;
}
}

View File

@ -0,0 +1,19 @@
package de.overview.wg.its.mispauth.auxiliary;
import com.android.volley.AuthFailureError;
import com.android.volley.NoConnectionError;
import com.android.volley.VolleyError;
public class ReadableError {
public static String toReadable(VolleyError volleyError) {
if(volleyError instanceof NoConnectionError) {
return "Connection failed";
} else if(volleyError instanceof AuthFailureError) {
return "Authentication failed";
}
return "Unknown error";
}
}

View File

@ -0,0 +1,186 @@
package de.overview.wg.its.mispauth.model;
import org.json.JSONException;
import org.json.JSONObject;
public class Organisation {
private static String ID_KEY = "id";
private static String NAME_KEY = "name";
private static String DATE_CREATED_KEY = "date_created";
private static String DATE_MODIFIED_KEY = "date_modified";
private static String TYPE_KEY = "type";
private static String NATIONALITY_KEY = "nationality";
private static String SECTOR_KEY = "sector";
private static String CONTACTS_KEY = "contacts";
private static String DESCRIPTION_KEY = "description";
private static String LOCAL_KEY = "local";
private static String UUID_KEY = "uuid";
private static String RESTRICTED_TO_DOMAIN_KEY = "restricted_to_domain";
private static String CREATED_BY_KEY = "created_by";
private static String USER_COUNT_KEY = "user_count";
private int id;
private String name;
private String dateCreated, dateModified;
private String type;
private String nationality;
private String sector;
private String contacts;
private String description;
private boolean local;
private String uuid;
private String restrictedToDomain;
private int createdBy;
private int userCount;
public Organisation() {}
public void fromJSON(JSONObject org) {
try {
id = org.getInt(ID_KEY);
dateCreated = org.getString(DATE_CREATED_KEY);
dateModified = org.getString(DATE_MODIFIED_KEY);
name = org.getString(NAME_KEY);
type = org.getString(TYPE_KEY);
nationality = org.getString(NATIONALITY_KEY);
sector = org.getString(SECTOR_KEY);
contacts = org.getString(CONTACTS_KEY);
description = org.getString(DESCRIPTION_KEY);
local = org.getBoolean(LOCAL_KEY);
uuid = org.getString(UUID_KEY);
restrictedToDomain = org.getString(RESTRICTED_TO_DOMAIN_KEY);
createdBy = org.getInt(CREATED_BY_KEY);
userCount = org.getInt(USER_COUNT_KEY);
} catch (JSONException e) {
e.printStackTrace();
}
}
public JSONObject toJSON() {
JSONObject org = new JSONObject();
try {
org.put(ID_KEY, id);
org.put(NAME_KEY, name);
org.put(DATE_CREATED_KEY, dateCreated);
org.put(DATE_MODIFIED_KEY, dateModified);
org.put(TYPE_KEY, type);
org.put(NATIONALITY_KEY, nationality);
org.put(SECTOR_KEY, sector);
org.put(CONTACTS_KEY, contacts);
org.put(DESCRIPTION_KEY, description);
org.put(LOCAL_KEY, local);
org.put(UUID_KEY, uuid);
org.put(RESTRICTED_TO_DOMAIN_KEY, restrictedToDomain);
org.put(CREATED_BY_KEY, createdBy);
org.put(USER_COUNT_KEY, userCount);
} catch (JSONException e) {
e.printStackTrace();
}
return org;
}
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getSector() {
return sector;
}
public void setSector(String sector) {
this.sector = sector;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDateCreated() {
return dateCreated;
}
public void setDateCreated(String dateCreated) {
this.dateCreated = dateCreated;
}
public String getDateModified() {
return dateModified;
}
public void setDateModified(String dateModified) {
this.dateModified = dateModified;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getContacts() {
return contacts;
}
public void setContacts(String contacts) {
this.contacts = contacts;
}
public boolean isLocal() {
return local;
}
public void setLocal(boolean local) {
this.local = local;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getRestrictedToDomain() {
return restrictedToDomain;
}
public void setRestrictedToDomain(String restrictedToDomain) {
this.restrictedToDomain = restrictedToDomain;
}
public int getCreatedBy() {
return createdBy;
}
public void setCreatedBy(int createdBy) {
this.createdBy = createdBy;
}
public int getUserCount() {
return userCount;
}
public void setUserCount(int userCount) {
this.userCount = userCount;
}
}

View File

@ -0,0 +1,298 @@
package de.overview.wg.its.mispauth.model;
import org.json.JSONException;
import org.json.JSONObject;
public class User {
private static String ID_KEY = "id";
private static String PASSWORD_KEY = "password";
private static String ORG_ID_KEY = "org_id";
private static String EMAIL_KEY = "email";
private static String AUTOALERT_KEY = "autoalert";
private static String AUTHKEY_KEY = "authkey";
private static String INVITED_BY_KEY = "invited_by";
private static String GPGKEY_KEY = "gpgkey";
private static String CERTIF_PUBLIC = "certif_public";
private static String NIDS_SID = "nids_sid";
private static String TERMS_ACCEPTED_KEY = "termsaccepted";
private static String NEWSREAD_KEY = "newsread";
private static String ROLE_ID_KEY = "role_id";
private static String CHANGE_PW_KEY = "change_pw";
private static String CONTACT_ALERT_KEY = "contactalert";
private static String DISABLED_KEY = "disabled";
private static String EXPIRATION_KEY = "expiration";
private static String CURRENT_LOGIN_KEY = "current_login";
private static String LAST_LOGIN_KEY = "last_login";
private static String FORCE_LOGOUT_KEY = "force_logout";
private static String DATE_CREATED_KEY = "date_created";
private static String DATE_MODIFIED_KEY = "date_modified";
private int id;
private String password;
private int orgId;
private String email;
private boolean autoAlert;
private String authkey;
private int invitedBy;
private String gpgKey;
private String certifPublic;
private int nidsSid;
private boolean termsAccepted;
private int newsRead; // Integer??
private int roleId;
private String changePw;
private boolean contactAlert;
private boolean disabled;
private String expiration;
private String currentLogin;
private String lastLogin;
private boolean forceLogout;
private String dateCreated;
private String dateModified;
public User() {}
public void fromJSON(JSONObject user) {
try {
id = user.getInt(ID_KEY);
password = user.getString(PASSWORD_KEY);
orgId = user.getInt(ORG_ID_KEY);
email = user.getString(EMAIL_KEY);
autoAlert = user.getBoolean(AUTOALERT_KEY);
authkey = user.getString(AUTHKEY_KEY);
invitedBy = user.getInt(INVITED_BY_KEY);
gpgKey = user.getString(GPGKEY_KEY);
certifPublic = user.getString(CERTIF_PUBLIC);
nidsSid = user.getInt(NIDS_SID);
termsAccepted = user.getBoolean(TERMS_ACCEPTED_KEY);
newsRead = user.getInt(NEWSREAD_KEY);
roleId = user.getInt(ROLE_ID_KEY);
changePw = user.getString(CHANGE_PW_KEY);
contactAlert = user.getBoolean(CONTACT_ALERT_KEY);
disabled = user.getBoolean(DISABLED_KEY);
expiration = user.getString(EXPIRATION_KEY);
currentLogin = user.getString(CURRENT_LOGIN_KEY);
lastLogin = user.getString(LAST_LOGIN_KEY);
forceLogout = user.getBoolean(FORCE_LOGOUT_KEY);
dateCreated = user.getString(DATE_CREATED_KEY);
dateModified = user.getString(DATE_MODIFIED_KEY);
} catch (JSONException e) {
e.printStackTrace();
}
}
public JSONObject toJSON() {
JSONObject user = new JSONObject();
try {
user.put(ID_KEY, id);
user.put(PASSWORD_KEY, password);
user.put(ORG_ID_KEY, orgId);
user.put(EMAIL_KEY, email);
user.put(AUTOALERT_KEY, autoAlert);
user.put(AUTHKEY_KEY, authkey);
user.put(INVITED_BY_KEY, invitedBy);
user.put(GPGKEY_KEY, gpgKey);
user.put(CERTIF_PUBLIC, certifPublic);
user.put(NIDS_SID, nidsSid);
user.put(TERMS_ACCEPTED_KEY, termsAccepted);
user.put(NEWSREAD_KEY, newsRead);
user.put(ROLE_ID_KEY, roleId);
user.put(CHANGE_PW_KEY, changePw);
user.put(CONTACT_ALERT_KEY, contactAlert);
user.put(DISABLED_KEY, disabled);
user.put(EXPIRATION_KEY, expiration);
user.put(CURRENT_LOGIN_KEY, currentLogin);
user.put(LAST_LOGIN_KEY, lastLogin);
user.put(FORCE_LOGOUT_KEY, forceLogout);
user.put(DATE_CREATED_KEY, dateCreated);
user.put(DATE_MODIFIED_KEY, dateModified);
} catch (JSONException e) {
e.printStackTrace();
}
return user;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getOrgId() {
return orgId;
}
public void setOrgId(int orgId) {
this.orgId = orgId;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isAutoAlert() {
return autoAlert;
}
public void setAutoAlert(boolean autoAlert) {
this.autoAlert = autoAlert;
}
public String getAuthkey() {
return authkey;
}
public void setAuthkey(String authkey) {
this.authkey = authkey;
}
public int getInvitedBy() {
return invitedBy;
}
public void setInvitedBy(int invitedBy) {
this.invitedBy = invitedBy;
}
public String getGpgKey() {
return gpgKey;
}
public void setGpgKey(String gpgKey) {
this.gpgKey = gpgKey;
}
public String getCertifPublic() {
return certifPublic;
}
public void setCertifPublic(String certifPublic) {
this.certifPublic = certifPublic;
}
public int getNidsSid() {
return nidsSid;
}
public void setNidsSid(int nidsSid) {
this.nidsSid = nidsSid;
}
public boolean isTermsAccepted() {
return termsAccepted;
}
public void setTermsAccepted(boolean termsAccepted) {
this.termsAccepted = termsAccepted;
}
public int getNewsRead() {
return newsRead;
}
public void setNewsRead(int newsRead) {
this.newsRead = newsRead;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public String getChangePw() {
return changePw;
}
public void setChangePw(String changePw) {
this.changePw = changePw;
}
public boolean isContactAlert() {
return contactAlert;
}
public void setContactAlert(boolean contactAlert) {
this.contactAlert = contactAlert;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public String getExpiration() {
return expiration;
}
public void setExpiration(String expiration) {
this.expiration = expiration;
}
public String getCurrentLogin() {
return currentLogin;
}
public void setCurrentLogin(String currentLogin) {
this.currentLogin = currentLogin;
}
public String getLastLogin() {
return lastLogin;
}
public void setLastLogin(String lastLogin) {
this.lastLogin = lastLogin;
}
public boolean isForceLogout() {
return forceLogout;
}
public void setForceLogout(boolean forceLogout) {
this.forceLogout = forceLogout;
}
public String getDateCreated() {
return dateCreated;
}
public void setDateCreated(String dateCreated) {
this.dateCreated = dateCreated;
}
public String getDateModified() {
return dateModified;
}
public void setDateModified(String dateModified) {
this.dateModified = dateModified;
}
}

View File

@ -1,24 +1,21 @@
package de.overview.wg.its.misp_authentificator.network;
package de.overview.wg.its.mispauth.network;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.Log;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import de.overview.wg.its.mispauth.auxiliary.PreferenceManager;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import de.overview.wg.its.misp_authentificator.PreferenceManager;
/**
* Simple JSON based API to communicate with MISP-Instances
*/
@ -33,7 +30,6 @@ public class MispRequest {
private String serverUrl, apiKey;
/**
*
* @param context for Volley and PreferenceManager
*/
private MispRequest(Context context) {
@ -42,7 +38,6 @@ public class MispRequest {
}
/**
*
* @param orgId organisation ID on the MISP-Instance
* @param callback returns a single Organisation-JSON
*/

View File

@ -1,81 +1,92 @@
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.SettingsActivity"
android:background="@color/colorPrimary">
tools:context=".activity.SettingsActivity"
android:background="@color/colorPrimary">
<android.support.design.widget.AppBarLayout
android:id="@+id/settings.appbar"
app:elevation="0dp"
android:background="@color/colorPrimaryDark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
android:id="@+id/settings.appbar"
app:elevation="0dp"
android:background="@color/colorPrimaryDark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:backgroundTint="@color/colorPrimary"
android:background="@drawable/background_rounded_main"
app:popupTheme="@style/AppTheme.PopupOverlay" />
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:backgroundTint="@color/colorPrimary"
android:background="@drawable/background_rounded_main"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_rounded_main"
android:padding="16dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/orgRecyclerView"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="match_parent"
android:background="@drawable/background_rounded_main"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView
android:id="@+id/empty_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="@string/empty_ext_org_dataset"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:id="@+id/empty_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:text="@string/empty_ext_org_dataset"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/recycler_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/orgRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.constraint.ConstraintLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
app:fabSize="normal"
app:layout_anchor="@+id/constraintLayout"
app:layout_anchorGravity="right|bottom"
app:srcCompat="@drawable/ic_add_white" />
android:id="@+id/fab_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
app:fabSize="normal"
app:layout_anchor="@+id/constraintLayout"
app:layout_anchorGravity="right|bottom"
app:srcCompat="@drawable/ic_add_white"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_sync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="100dp"
android:visibility="gone"
app:fabSize="mini"
app:layout_anchor="@+id/fab_add"
app:layout_anchorGravity="top|center_horizontal"
app:srcCompat="@drawable/ic_sync_white" />
android:id="@+id/fab_sync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="100dp"
android:visibility="gone"
app:fabSize="mini"
app:layout_anchor="@+id/fab_add"
app:layout_anchorGravity="top|center_horizontal"
app:srcCompat="@drawable/ic_sync_white"/>
</android.support.design.widget.CoordinatorLayout>

View File

@ -77,7 +77,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_rounded_main"
android:padding="16dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<ProgressBar
@ -91,101 +90,12 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/organisation_title"
android:layout_width="309dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:text="My Organisation Title"
android:textAlignment="center"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:text="15360ef8-68ba-11e8-adc0-fa7ae01bbebc"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/organisation_title" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:tint="@color/colorPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:srcCompat="@drawable/ic_edit_white_24dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:text="Sample description of my organisation. This is imported directly from your MISP server."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView2"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:tint="@color/colorPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:srcCompat="@drawable/ic_flag_white_24dp" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
android:text="Bonn, Germany"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView3"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:tint="@color/colorPrimary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3"
app:srcCompat="@drawable/ic_sector" />
<TextView
android:id="@+id/textView4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:text="Software development"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView4"
app:layout_constraintTop_toBottomOf="@+id/textView3" />
<include layout="@layout/view_holder_organisation"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="0dp" android:layout_height="0dp" android:id="@+id/include"/>
</android.support.constraint.ConstraintLayout>

View File

@ -1,33 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/ext_org_title"
android:layout_marginEnd="40dp"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="Title"
android:textSize="20sp"
android:textStyle="bold"/>
android:padding="16dp"
android:clickable="true"
android:focusable="true">
<TextView
android:id="@+id/ext_org_sub_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ext_org_title"
android:text="http://192.168.178.200"
android:textSize="15sp"/>
android:id="@+id/ext_org_title"
android:layout_marginEnd="40dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="Title"
android:textSize="20sp"
android:textStyle="bold"/>
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_info_white"
android:tint="@color/colorPrimary"
android:layout_alignParentEnd="true" />
<TextView
android:id="@+id/ext_org_sub_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ext_org_title"
android:text="Short description describing the description ..."
android:textSize="15sp"/>
</RelativeLayout>

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/organisation_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:textSize="20sp"
android:textStyle="bold"
android:text="Title"/>
<TextView
android:id="@+id/organisation_uuid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:textStyle="italic"
android:text="uuid"/>
<GridLayout
android:orientation="horizontal"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:rowCount="5"
android:columnCount="2">
<TextView
android:paddingTop="32dp"
android:text="Description"
android:textStyle="bold"/>
<TextView
android:layout_width="0dip"
android:layout_gravity="fill_horizontal"
android:paddingLeft="16dp"
android:id="@+id/organisation_description"
android:text="Description"/>
<TextView
android:paddingTop="16dp"
android:text="Nationality"
android:textStyle="bold"/>
<TextView
android:layout_width="0dip"
android:layout_gravity="fill_horizontal"
android:paddingLeft="16dp"
android:id="@+id/organisation_nationality"
android:text="Germany"/>
<TextView
android:paddingTop="16dp"
android:text="Sector"
android:textStyle="bold"/>
<TextView
android:layout_width="0dip"
android:layout_gravity="fill_horizontal"
android:paddingLeft="16dp"
android:id="@+id/organisation_sector"
android:text="Software"/>
<TextView
android:paddingTop="16dp"
android:text="Users"
android:textStyle="bold"/>
<TextView
android:layout_width="0dip"
android:layout_gravity="fill_horizontal"
android:paddingLeft="16dp"
android:id="@+id/organisation_user_count"
android:text="0"/>
</GridLayout>
</android.support.v7.widget.LinearLayoutCompat>

View File

@ -1,19 +1,14 @@
<resources>
<string name="app_name">MISPauth</string>
<string name="app_name">MISPauth</string>
<string name="empty_ext_org_dataset">No External Organisations available</string>
<string name="empty_local_org_dataset">No Local Information Available</string>
<string name="empty_ext_org_dataset">No External Organisations available</string>
<string name="empty_local_org_dataset">No Local Information Available</string>
// Settings
// Settings
<string name="settings_server_url">Server URL</string>
<string name="settings_api_key">API Key</string>
<string name="title_activity_settings">Settings</string>
<string name="title_activity_sync">Synchronise</string>
// Preferences
<string name="key_server_url">key_server_url</string>
<string name="key_server_api_key">key_server_api_key</string>
<string name="settings_server_url">Server URL</string>
<string name="settings_api_key">API Key</string>
<string name="title_activity_settings">Settings</string>
<string name="title_activity_sync">Synchronise</string>
</resources>

View File

@ -1,4 +1,4 @@
package de.overview.wg.its.misp_authentificator;
package de.overview.wg.its.mispauth;
import org.junit.Test;
@ -11,7 +11,7 @@ import static org.junit.Assert.*;
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}

Binary file not shown.

View File

@ -1,4 +1,4 @@
#Tue May 22 17:01:34 CEST 2018
#Thu Jun 07 17:33:27 CEST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

100
gradlew vendored
View File

@ -1,4 +1,4 @@
#!/usr/bin/env sh
#!/usr/bin/env bash
##############################################################################
##
@ -6,6 +6,42 @@
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
@ -24,46 +60,6 @@ cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
@ -89,7 +85,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@ -154,19 +150,11 @@ if $cygwin ; then
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
APP_ARGS=$(save "$@")
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

14
gradlew.bat vendored
View File

@ -8,14 +8,14 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@ -46,9 +46,10 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
@ -59,6 +60,11 @@ set _SKIP=2
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line