mirror of
https://github.com/moparisthebest/Yaaic
synced 2025-01-09 12:48:00 -05:00
(Authentication) GUI for NickServ and SASL
This commit is contained in:
parent
571090aa13
commit
2fde7559e3
@ -88,6 +88,10 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
android:name=".activity.UserActivity"
|
android:name=".activity.UserActivity"
|
||||||
android:theme="@android:style/Theme.Dialog">
|
android:theme="@android:style/Theme.Dialog">
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".activity.AuthenticationActivity"
|
||||||
|
android:theme="@android:style/Theme.Dialog">
|
||||||
|
</activity>
|
||||||
<service android:name=".irc.IRCService"></service>
|
<service android:name=".irc.IRCService"></service>
|
||||||
</application>
|
</application>
|
||||||
<uses-sdk android:minSdkVersion="4" />
|
<uses-sdk android:minSdkVersion="4" />
|
||||||
|
@ -1,4 +1,24 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2011 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
|
@ -1,4 +1,24 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2011 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/host"
|
android:id="@+id/host"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
|
95
application/res/layout/authentication.xml
Normal file
95
application/res/layout/authentication.xml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2011 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:padding="5dp">
|
||||||
|
<TextView
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Yaaic will authenticate you with these services after connect."
|
||||||
|
android:padding="5dp" />
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/nickserv_checkbox"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Authenticate with Nickserv" />
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/nickserv_label_password"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Nickserv password"
|
||||||
|
android:enabled="false" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/nickserv_password"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:enabled="false"
|
||||||
|
android:password="true" />
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/sasl_checkbox"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Authenticate via SASL" />
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/sasl_label_username"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="SASL username"
|
||||||
|
android:enabled="false" />
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/sasl_username"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:enabled="false" />
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/sasl_label_password"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="SASL password"
|
||||||
|
android:enabled="false"/>
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/sasl_password"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:enabled="false"
|
||||||
|
android:password="true" />
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/ok"
|
||||||
|
android:text="@string/action_ok"
|
||||||
|
android:minWidth="90dp" />
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/cancel"
|
||||||
|
android:text="@string/action_cancel"
|
||||||
|
android:minWidth="90dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
@ -152,6 +152,11 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
android:padding="3dp"
|
android:padding="3dp"
|
||||||
android:layout_margin="2dp" />
|
android:layout_margin="2dp" />
|
||||||
|
<Button
|
||||||
|
android:id="@+id/authentication"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/authentication" />
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/channels"
|
android:id="@+id/channels"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
<string name="realname">Real Name</string>
|
<string name="realname">Real Name</string>
|
||||||
|
|
||||||
<string name="server">Server</string>
|
<string name="server">Server</string>
|
||||||
|
<string name="authentication">Authentication</string>
|
||||||
<string name="channel">Channel</string>
|
<string name="channel">Channel</string>
|
||||||
<string name="channels">Channels</string>
|
<string name="channels">Channels</string>
|
||||||
<string name="commands">Commands</string>
|
<string name="commands">Commands</string>
|
||||||
|
@ -28,6 +28,7 @@ import org.yaaic.R;
|
|||||||
import org.yaaic.Yaaic;
|
import org.yaaic.Yaaic;
|
||||||
import org.yaaic.db.Database;
|
import org.yaaic.db.Database;
|
||||||
import org.yaaic.exception.ValidationException;
|
import org.yaaic.exception.ValidationException;
|
||||||
|
import org.yaaic.model.Authentication;
|
||||||
import org.yaaic.model.Extra;
|
import org.yaaic.model.Extra;
|
||||||
import org.yaaic.model.Identity;
|
import org.yaaic.model.Identity;
|
||||||
import org.yaaic.model.Server;
|
import org.yaaic.model.Server;
|
||||||
@ -56,8 +57,10 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
private static final int REQUEST_CODE_CHANNELS = 1;
|
private static final int REQUEST_CODE_CHANNELS = 1;
|
||||||
private static final int REQUEST_CODE_COMMANDS = 2;
|
private static final int REQUEST_CODE_COMMANDS = 2;
|
||||||
private static final int REQUEST_CODE_ALIASES = 3;
|
private static final int REQUEST_CODE_ALIASES = 3;
|
||||||
|
private static final int REQUEST_CODE_AUTHENTICATION = 4;
|
||||||
|
|
||||||
private Server server;
|
private Server server;
|
||||||
|
private Authentication authentication;
|
||||||
private ArrayList<String> aliases;
|
private ArrayList<String> aliases;
|
||||||
private ArrayList<String> channels;
|
private ArrayList<String> channels;
|
||||||
private ArrayList<String> commands;
|
private ArrayList<String> commands;
|
||||||
@ -71,6 +74,8 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
setContentView(R.layout.serveradd);
|
setContentView(R.layout.serveradd);
|
||||||
|
|
||||||
|
authentication = new Authentication();
|
||||||
aliases = new ArrayList<String>();
|
aliases = new ArrayList<String>();
|
||||||
channels = new ArrayList<String>();
|
channels = new ArrayList<String>();
|
||||||
commands = new ArrayList<String>();
|
commands = new ArrayList<String>();
|
||||||
@ -80,6 +85,7 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
((Button) findViewById(R.id.aliases)).setOnClickListener(this);
|
((Button) findViewById(R.id.aliases)).setOnClickListener(this);
|
||||||
((Button) findViewById(R.id.channels)).setOnClickListener(this);
|
((Button) findViewById(R.id.channels)).setOnClickListener(this);
|
||||||
((Button) findViewById(R.id.commands)).setOnClickListener(this);
|
((Button) findViewById(R.id.commands)).setOnClickListener(this);
|
||||||
|
((Button) findViewById(R.id.authentication)).setOnClickListener(this);
|
||||||
|
|
||||||
Spinner spinner = (Spinner) findViewById(R.id.charset);
|
Spinner spinner = (Spinner) findViewById(R.id.charset);
|
||||||
String[] charsets = getResources().getStringArray(R.array.charsets);
|
String[] charsets = getResources().getStringArray(R.array.charsets);
|
||||||
@ -95,6 +101,7 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
aliases.addAll(server.getIdentity().getAliases());
|
aliases.addAll(server.getIdentity().getAliases());
|
||||||
this.channels = db.getChannelsByServerId(server.getId());
|
this.channels = db.getChannelsByServerId(server.getId());
|
||||||
this.commands = db.getCommandsByServerId(server.getId());
|
this.commands = db.getCommandsByServerId(server.getId());
|
||||||
|
this.authentication = server.getAuthentication();
|
||||||
db.close();
|
db.close();
|
||||||
|
|
||||||
// Set server values
|
// Set server values
|
||||||
@ -153,6 +160,12 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
case REQUEST_CODE_COMMANDS:
|
case REQUEST_CODE_COMMANDS:
|
||||||
commands = data.getExtras().getStringArrayList(Extra.COMMANDS);
|
commands = data.getExtras().getStringArrayList(Extra.COMMANDS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case REQUEST_CODE_AUTHENTICATION:
|
||||||
|
authentication.setSaslUsername(data.getExtras().getString(Extra.SASL_USER));
|
||||||
|
authentication.setSaslPassword(data.getExtras().getString(Extra.SASL_PASSWORD));
|
||||||
|
authentication.setNickservPassword(data.getExtras().getString(Extra.NICKSERV_PASSWORD));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,6 +182,14 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
startActivityForResult(aliasIntent, REQUEST_CODE_ALIASES);
|
startActivityForResult(aliasIntent, REQUEST_CODE_ALIASES);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case R.id.authentication:
|
||||||
|
Intent authIntent = new Intent(this, AuthenticationActivity.class);
|
||||||
|
authIntent.putExtra(Extra.NICKSERV_PASSWORD, authentication.getNickservPassword());
|
||||||
|
authIntent.putExtra(Extra.SASL_USER, authentication.getSaslUsername());
|
||||||
|
authIntent.putExtra(Extra.SASL_PASSWORD, authentication.getSaslPassword());
|
||||||
|
startActivityForResult(authIntent, REQUEST_CODE_AUTHENTICATION);
|
||||||
|
break;
|
||||||
|
|
||||||
case R.id.channels:
|
case R.id.channels:
|
||||||
Intent channelIntent = new Intent(this, AddChannelActivity.class);
|
Intent channelIntent = new Intent(this, AddChannelActivity.class);
|
||||||
channelIntent.putExtra(Extra.CHANNELS, channels);
|
channelIntent.putExtra(Extra.CHANNELS, channels);
|
||||||
@ -220,16 +241,9 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
);
|
);
|
||||||
|
|
||||||
Server server = getServerFromView();
|
Server server = getServerFromView();
|
||||||
long serverId = db.addServer(
|
server.setAuthentication(authentication);
|
||||||
server.getTitle(),
|
|
||||||
server.getHost(),
|
long serverId = db.addServer(server, (int) identityId);
|
||||||
server.getPort(),
|
|
||||||
server.getPassword(),
|
|
||||||
false, // auto connect
|
|
||||||
server.useSSL(),
|
|
||||||
identityId,
|
|
||||||
server.getCharset()
|
|
||||||
);
|
|
||||||
|
|
||||||
db.setChannels((int) serverId, channels);
|
db.setChannels((int) serverId, channels);
|
||||||
db.setCommands((int) serverId, commands);
|
db.setCommands((int) serverId, commands);
|
||||||
@ -255,17 +269,8 @@ public class AddServerActivity extends Activity implements OnClickListener
|
|||||||
int identityId = db.getIdentityIdByServerId(serverId);
|
int identityId = db.getIdentityIdByServerId(serverId);
|
||||||
|
|
||||||
Server server = getServerFromView();
|
Server server = getServerFromView();
|
||||||
db.updateServer(
|
server.setAuthentication(authentication);
|
||||||
serverId,
|
db.updateServer(serverId, server, identityId);
|
||||||
server.getTitle(),
|
|
||||||
server.getHost(),
|
|
||||||
server.getPort(),
|
|
||||||
server.getPassword(),
|
|
||||||
false, // auto connect
|
|
||||||
server.useSSL(),
|
|
||||||
identityId,
|
|
||||||
server.getCharset()
|
|
||||||
);
|
|
||||||
|
|
||||||
Identity identity = getIdentityFromView();
|
Identity identity = getIdentityFromView();
|
||||||
db.updateIdentity(
|
db.updateIdentity(
|
||||||
|
159
application/src/org/yaaic/activity/AuthenticationActivity.java
Normal file
159
application/src/org/yaaic/activity/AuthenticationActivity.java
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2011 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.activity;
|
||||||
|
|
||||||
|
import org.yaaic.R;
|
||||||
|
import org.yaaic.model.Extra;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Authentication activity for entering nickserv / sasl usernames and password
|
||||||
|
* for a given server.
|
||||||
|
*
|
||||||
|
* @author Sebastian Kaspari <sebastian@yaaic.org>
|
||||||
|
*/
|
||||||
|
public class AuthenticationActivity extends Activity implements OnCheckedChangeListener, OnClickListener
|
||||||
|
{
|
||||||
|
private CheckBox nickservCheckbox;
|
||||||
|
private TextView nickservPasswordLabel;
|
||||||
|
private EditText nickservPasswordEditText;
|
||||||
|
|
||||||
|
private CheckBox saslCheckbox;
|
||||||
|
private TextView saslUsernameLabel;
|
||||||
|
private EditText saslUsernameEditText;
|
||||||
|
private TextView saslPasswordLabel;
|
||||||
|
private EditText saslPasswordEditText;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On create
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
{
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
|
||||||
|
setContentView(R.layout.authentication);
|
||||||
|
|
||||||
|
nickservCheckbox = (CheckBox) findViewById(R.id.nickserv_checkbox);
|
||||||
|
nickservPasswordLabel = (TextView) findViewById(R.id.nickserv_label_password);
|
||||||
|
nickservPasswordEditText = (EditText) findViewById(R.id.nickserv_password);
|
||||||
|
|
||||||
|
saslCheckbox = (CheckBox) findViewById(R.id.sasl_checkbox);
|
||||||
|
saslUsernameLabel = (TextView) findViewById(R.id.sasl_label_username);
|
||||||
|
saslUsernameEditText = (EditText) findViewById(R.id.sasl_username);
|
||||||
|
saslPasswordLabel = (TextView) findViewById(R.id.sasl_label_password);
|
||||||
|
saslPasswordEditText = (EditText) findViewById(R.id.sasl_password);
|
||||||
|
|
||||||
|
nickservCheckbox.setOnCheckedChangeListener(this);
|
||||||
|
saslCheckbox.setOnCheckedChangeListener(this);
|
||||||
|
|
||||||
|
Bundle extras = getIntent().getExtras();
|
||||||
|
|
||||||
|
if (extras != null) {
|
||||||
|
String nickservPassword = extras.getString(Extra.NICKSERV_PASSWORD);
|
||||||
|
|
||||||
|
if (nickservPassword != null && nickservPassword.length() > 0) {
|
||||||
|
nickservCheckbox.setChecked(true);
|
||||||
|
nickservPasswordEditText.setText(nickservPassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
String saslUsername = extras.getString(Extra.SASL_USER);
|
||||||
|
String saslPassword = extras.getString(Extra.SASL_PASSWORD);
|
||||||
|
|
||||||
|
if (saslUsername != null && saslUsername.length() > 0) {
|
||||||
|
saslCheckbox.setChecked(true);
|
||||||
|
saslUsernameEditText.setText(saslUsername);
|
||||||
|
saslPasswordEditText.setText(saslPassword);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((Button) findViewById(R.id.ok)).setOnClickListener(this);
|
||||||
|
((Button) findViewById(R.id.cancel)).setOnClickListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On checkbox changed
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
|
||||||
|
{
|
||||||
|
switch (buttonView.getId()) {
|
||||||
|
case R.id.nickserv_checkbox:
|
||||||
|
nickservPasswordLabel.setEnabled(isChecked);
|
||||||
|
nickservPasswordEditText.setEnabled(isChecked);
|
||||||
|
|
||||||
|
if (!isChecked) {
|
||||||
|
nickservPasswordEditText.setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R.id.sasl_checkbox:
|
||||||
|
saslUsernameLabel.setEnabled(isChecked);
|
||||||
|
saslUsernameEditText.setEnabled(isChecked);
|
||||||
|
saslPasswordLabel.setEnabled(isChecked);
|
||||||
|
saslPasswordEditText.setEnabled(isChecked);
|
||||||
|
|
||||||
|
if (!isChecked) {
|
||||||
|
saslUsernameEditText.setText("");
|
||||||
|
saslPasswordEditText.setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On click on button
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onClick(View v)
|
||||||
|
{
|
||||||
|
switch (v.getId()) {
|
||||||
|
case R.id.ok:
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.putExtra(Extra.NICKSERV_PASSWORD, nickservPasswordEditText.getText().toString());
|
||||||
|
intent.putExtra(Extra.SASL_USER, saslUsernameEditText.getText().toString());
|
||||||
|
intent.putExtra(Extra.SASL_PASSWORD, saslPasswordEditText.getText().toString());
|
||||||
|
setResult(RESULT_OK, intent);
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R.id.cancel:
|
||||||
|
setResult(RESULT_CANCELED);
|
||||||
|
finish();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -24,6 +24,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.yaaic.model.Authentication;
|
||||||
import org.yaaic.model.Identity;
|
import org.yaaic.model.Identity;
|
||||||
import org.yaaic.model.Server;
|
import org.yaaic.model.Server;
|
||||||
import org.yaaic.model.Status;
|
import org.yaaic.model.Status;
|
||||||
@ -43,7 +44,7 @@ import android.database.sqlite.SQLiteOpenHelper;
|
|||||||
public class Database extends SQLiteOpenHelper
|
public class Database extends SQLiteOpenHelper
|
||||||
{
|
{
|
||||||
private static final String DATABASE_NAME = "servers.db";
|
private static final String DATABASE_NAME = "servers.db";
|
||||||
private static final int DATABASE_VERSION = 4;
|
private static final int DATABASE_VERSION = 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new helper for database access
|
* Create a new helper for database access
|
||||||
@ -70,7 +71,10 @@ public class Database extends SQLiteOpenHelper
|
|||||||
+ ServerConstants.AUTOCONNECT + " BOOLEAN, "
|
+ ServerConstants.AUTOCONNECT + " BOOLEAN, "
|
||||||
+ ServerConstants.USE_SSL + " BOOLEAN, "
|
+ ServerConstants.USE_SSL + " BOOLEAN, "
|
||||||
+ ServerConstants.CHARSET + " TEXT, "
|
+ ServerConstants.CHARSET + " TEXT, "
|
||||||
+ ServerConstants.IDENTITY + " INTEGER"
|
+ ServerConstants.IDENTITY + " INTEGER, "
|
||||||
|
+ ServerConstants.NICKSERV_PASSWORD + " TEXT, "
|
||||||
|
+ ServerConstants.SASL_USERNAME + " TEXT, "
|
||||||
|
+ ServerConstants.SASL_PASSWORD + " TEXT"
|
||||||
+ ");"
|
+ ");"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -145,32 +149,41 @@ public class Database extends SQLiteOpenHelper
|
|||||||
+ AliasConstants.IDENTITY + " INTEGER"
|
+ AliasConstants.IDENTITY + " INTEGER"
|
||||||
+ ");"
|
+ ");"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
oldVersion = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldVersion == 4) {
|
||||||
|
// Add authentication fields to database
|
||||||
|
db.execSQL("ALTER TABLE " + ServerConstants.TABLE_NAME + " ADD " + ServerConstants.NICKSERV_PASSWORD + " TEXT AFTER " + ServerConstants.CHARSET + ";");
|
||||||
|
db.execSQL("ALTER TABLE " + ServerConstants.TABLE_NAME + " ADD " + ServerConstants.SASL_USERNAME + " TEXT AFTER " + ServerConstants.NICKSERV_PASSWORD + ";");
|
||||||
|
db.execSQL("ALTER TABLE " + ServerConstants.TABLE_NAME + " ADD " + ServerConstants.SASL_PASSWORD + " TEXT AFTER " + ServerConstants.SASL_USERNAME + ";");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new server to the database
|
* Add a new server to the database
|
||||||
*
|
*
|
||||||
* @param title Unique title of the server
|
* @param server The server to add.
|
||||||
* @param host Hostname of the server
|
* @param identityId The id of the assigned identity
|
||||||
* @param port Port (default: 3337)
|
|
||||||
* @param password Password if needed
|
|
||||||
* @param autoConnect Autoconnect to this server on startup?
|
|
||||||
* @param useSSL Does the server use SSL?
|
|
||||||
* @param identityId The id of the identity record
|
|
||||||
*/
|
*/
|
||||||
public long addServer(String title, String host, int port, String password, boolean autoConnect, boolean useSSL, long identityId, String charset)
|
public long addServer(Server server, int identityId)
|
||||||
{
|
{
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
values.put(ServerConstants.TITLE, title);
|
values.put(ServerConstants.TITLE, server.getTitle());
|
||||||
values.put(ServerConstants.HOST, host);
|
values.put(ServerConstants.HOST, server.getHost());
|
||||||
values.put(ServerConstants.PORT, port);
|
values.put(ServerConstants.PORT, server.getPort());
|
||||||
values.put(ServerConstants.PASSWORD, password);
|
values.put(ServerConstants.PASSWORD, server.getPassword());
|
||||||
values.put(ServerConstants.AUTOCONNECT, autoConnect);
|
values.put(ServerConstants.AUTOCONNECT, false);
|
||||||
values.put(ServerConstants.USE_SSL, useSSL);
|
values.put(ServerConstants.USE_SSL, server.useSSL());
|
||||||
values.put(ServerConstants.IDENTITY, identityId);
|
values.put(ServerConstants.IDENTITY, identityId);
|
||||||
values.put(ServerConstants.CHARSET, charset);
|
values.put(ServerConstants.CHARSET, server.getCharset());
|
||||||
|
|
||||||
|
Authentication authentication = server.getAuthentication();
|
||||||
|
values.put(ServerConstants.NICKSERV_PASSWORD, authentication.getNickservPassword());
|
||||||
|
values.put(ServerConstants.SASL_USERNAME, authentication.getSaslUsername());
|
||||||
|
values.put(ServerConstants.SASL_PASSWORD, authentication.getSaslPassword());
|
||||||
|
|
||||||
return this.getWritableDatabase().insert(ServerConstants.TABLE_NAME, null, values);
|
return this.getWritableDatabase().insert(ServerConstants.TABLE_NAME, null, values);
|
||||||
}
|
}
|
||||||
@ -178,27 +191,28 @@ public class Database extends SQLiteOpenHelper
|
|||||||
/**
|
/**
|
||||||
* Update the server record in the database
|
* Update the server record in the database
|
||||||
*
|
*
|
||||||
* @param serverId
|
* @param serverId The primary key of the server to update.
|
||||||
* @param title Unique title of the server
|
* @param server The server to update.
|
||||||
* @param host Hostname of the server
|
|
||||||
* @param port Port (default: 3337)
|
|
||||||
* @param password Password if needed
|
|
||||||
* @param autoConnect Autoconnect to this server on startup?
|
|
||||||
* @param useSSL Does the server use SSL?
|
|
||||||
* @param identityId The identity of the server record
|
* @param identityId The identity of the server record
|
||||||
*/
|
*/
|
||||||
public void updateServer(int serverId, String title, String host, int port, String password, boolean autoConnect, boolean useSSL, long identityId, String charset)
|
public void updateServer(int serverId, Server server, int identityId)
|
||||||
{
|
{
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
values.put(ServerConstants.TITLE, title);
|
values.put(ServerConstants.TITLE, server.getTitle());
|
||||||
values.put(ServerConstants.HOST, host);
|
values.put(ServerConstants.HOST, server.getHost());
|
||||||
values.put(ServerConstants.PORT, port);
|
values.put(ServerConstants.PORT, server.getPort());
|
||||||
values.put(ServerConstants.PASSWORD, password);
|
values.put(ServerConstants.PASSWORD, server.getPassword());
|
||||||
values.put(ServerConstants.AUTOCONNECT, autoConnect);
|
values.put(ServerConstants.AUTOCONNECT, false);
|
||||||
values.put(ServerConstants.USE_SSL, useSSL);
|
values.put(ServerConstants.USE_SSL, server.useSSL());
|
||||||
values.put(ServerConstants.IDENTITY, identityId);
|
values.put(ServerConstants.IDENTITY, identityId);
|
||||||
values.put(ServerConstants.CHARSET, charset);
|
values.put(ServerConstants.CHARSET, server.getCharset());
|
||||||
|
|
||||||
|
Authentication authentication = server.getAuthentication();
|
||||||
|
|
||||||
|
values.put(ServerConstants.NICKSERV_PASSWORD, authentication.getNickservPassword());
|
||||||
|
values.put(ServerConstants.SASL_USERNAME, authentication.getSaslUsername());
|
||||||
|
values.put(ServerConstants.SASL_PASSWORD, authentication.getSaslPassword());
|
||||||
|
|
||||||
this.getWritableDatabase().update(
|
this.getWritableDatabase().update(
|
||||||
ServerConstants.TABLE_NAME,
|
ServerConstants.TABLE_NAME,
|
||||||
@ -417,6 +431,12 @@ public class Database extends SQLiteOpenHelper
|
|||||||
|
|
||||||
server.setStatus(Status.DISCONNECTED);
|
server.setStatus(Status.DISCONNECTED);
|
||||||
|
|
||||||
|
Authentication authentication = new Authentication();
|
||||||
|
authentication.setNickservPassword(cursor.getString(cursor.getColumnIndex(ServerConstants.NICKSERV_PASSWORD)));
|
||||||
|
authentication.setSaslUsername(cursor.getString(cursor.getColumnIndex(ServerConstants.SASL_USERNAME)));
|
||||||
|
authentication.setSaslPassword(cursor.getString(cursor.getColumnIndex(ServerConstants.SASL_PASSWORD)));
|
||||||
|
server.setAuthentication(authentication);
|
||||||
|
|
||||||
// Load identity for server
|
// Load identity for server
|
||||||
Identity identity = this.getIdentityById(cursor.getInt(cursor.getColumnIndex(ServerConstants.IDENTITY)));
|
Identity identity = this.getIdentityById(cursor.getInt(cursor.getColumnIndex(ServerConstants.IDENTITY)));
|
||||||
server.setIdentity(identity);
|
server.setIdentity(identity);
|
||||||
|
@ -40,6 +40,9 @@ public interface ServerConstants extends BaseColumns
|
|||||||
public static final String USE_SSL = "useSSL";
|
public static final String USE_SSL = "useSSL";
|
||||||
public static final String CHARSET = "charset";
|
public static final String CHARSET = "charset";
|
||||||
public static final String IDENTITY = "identity";
|
public static final String IDENTITY = "identity";
|
||||||
|
public static final String NICKSERV_PASSWORD = "nickserv_password";
|
||||||
|
public static final String SASL_USERNAME = "sasl_username";
|
||||||
|
public static final String SASL_PASSWORD = "sasl_password";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All fields of the table
|
* All fields of the table
|
||||||
@ -53,6 +56,9 @@ public interface ServerConstants extends BaseColumns
|
|||||||
AUTOCONNECT,
|
AUTOCONNECT,
|
||||||
USE_SSL,
|
USE_SSL,
|
||||||
CHARSET,
|
CHARSET,
|
||||||
IDENTITY
|
IDENTITY,
|
||||||
|
NICKSERV_PASSWORD,
|
||||||
|
SASL_USERNAME,
|
||||||
|
SASL_PASSWORD
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
125
application/src/org/yaaic/model/Authentication.java
Normal file
125
application/src/org/yaaic/model/Authentication.java
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
Yaaic - Yet Another Android IRC Client
|
||||||
|
|
||||||
|
Copyright 2009-2011 Sebastian Kaspari
|
||||||
|
|
||||||
|
This file is part of Yaaic.
|
||||||
|
|
||||||
|
Yaaic is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Yaaic is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.yaaic.model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Authentication credentials for a server.
|
||||||
|
*
|
||||||
|
* @author Sebastian Kaspari <sebastian@yaaic.org>
|
||||||
|
*/
|
||||||
|
public class Authentication
|
||||||
|
{
|
||||||
|
private String saslUsername;
|
||||||
|
private String saslPassword;
|
||||||
|
private String nickservPassword;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this instance have credentials for Nickserv authentication?
|
||||||
|
*
|
||||||
|
* @return True if nickserv credentials are present, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean hasNickservCredentials()
|
||||||
|
{
|
||||||
|
return this.nickservPassword != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this instance have credentials for SASL authentication?
|
||||||
|
*
|
||||||
|
* @return True if nickserv credentials are present, false otherwise.
|
||||||
|
*/
|
||||||
|
public boolean hasSaslCredentials()
|
||||||
|
{
|
||||||
|
return this.saslUsername != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the username for SASL authentication.
|
||||||
|
*
|
||||||
|
* @param saslUsername
|
||||||
|
*/
|
||||||
|
public void setSaslUsername(String saslUsername)
|
||||||
|
{
|
||||||
|
if (saslUsername == "") {
|
||||||
|
saslUsername = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.saslUsername = saslUsername;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the password for SASL authentication.
|
||||||
|
*
|
||||||
|
* @param saslPassword
|
||||||
|
*/
|
||||||
|
public void setSaslPassword(String saslPassword)
|
||||||
|
{
|
||||||
|
if (saslPassword == "") {
|
||||||
|
saslPassword = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.saslPassword = saslPassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the password for Nickserv authentication.
|
||||||
|
*
|
||||||
|
* @param nickservPassword
|
||||||
|
*/
|
||||||
|
public void setNickservPassword(String nickservPassword)
|
||||||
|
{
|
||||||
|
if (nickservPassword == "") {
|
||||||
|
nickservPassword = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.nickservPassword = nickservPassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the username for SASL authentication.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getSaslUsername()
|
||||||
|
{
|
||||||
|
return saslUsername;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the password for SASL authentication.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getSaslPassword()
|
||||||
|
{
|
||||||
|
return saslPassword;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the password for Nickserv authentication.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getNickservPassword()
|
||||||
|
{
|
||||||
|
return nickservPassword;
|
||||||
|
}
|
||||||
|
}
|
@ -37,4 +37,8 @@ public class Extra
|
|||||||
public static final String MESSAGE = "message";
|
public static final String MESSAGE = "message";
|
||||||
public static final String USER = "user";
|
public static final String USER = "user";
|
||||||
public static final String ACTION = "action";
|
public static final String ACTION = "action";
|
||||||
|
|
||||||
|
public static final String NICKSERV_PASSWORD = "nickserv_password";
|
||||||
|
public static final String SASL_USER = "sasl_user";
|
||||||
|
public static final String SASL_PASSWORD = "sasl_password";
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ public class Message
|
|||||||
|
|
||||||
/* normal message, this is the default */
|
/* normal message, this is the default */
|
||||||
public static final int TYPE_MESSAGE = 0;
|
public static final int TYPE_MESSAGE = 0;
|
||||||
|
|
||||||
/* join, part or quit */
|
/* join, part or quit */
|
||||||
public static final int TYPE_MISC = 1;
|
public static final int TYPE_MISC = 1;
|
||||||
|
|
||||||
|
@ -40,7 +40,9 @@ public class Server
|
|||||||
private String password;
|
private String password;
|
||||||
private String charset;
|
private String charset;
|
||||||
private boolean useSSL = false;
|
private boolean useSSL = false;
|
||||||
|
|
||||||
private Identity identity;
|
private Identity identity;
|
||||||
|
private Authentication authentication;
|
||||||
|
|
||||||
private final LinkedHashMap<String, Conversation> conversations = new LinkedHashMap<String, Conversation>();
|
private final LinkedHashMap<String, Conversation> conversations = new LinkedHashMap<String, Conversation>();
|
||||||
private ArrayList<String> autoJoinChannels;
|
private ArrayList<String> autoJoinChannels;
|
||||||
@ -69,6 +71,16 @@ public class Server
|
|||||||
this.identity = identity;
|
this.identity = identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the authentication methods for this server
|
||||||
|
*
|
||||||
|
* @param authentication
|
||||||
|
*/
|
||||||
|
public void setAuthentication(Authentication authentication)
|
||||||
|
{
|
||||||
|
this.authentication = authentication;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the identity for this server
|
* Get the identity for this server
|
||||||
*
|
*
|
||||||
@ -79,6 +91,16 @@ public class Server
|
|||||||
return identity;
|
return identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the authentication methods for this server;
|
||||||
|
*
|
||||||
|
* @return authentication
|
||||||
|
*/
|
||||||
|
public Authentication getAuthentication()
|
||||||
|
{
|
||||||
|
return authentication;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get unique id of server
|
* Get unique id of server
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user