summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/blinkt/openvpn/views/RemoteCNPreference.java
blob: 388f892b9f36dc7d4b39d64db77e78ac3f4509a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package de.blinkt.openvpn.views;

import android.content.Context;
import android.preference.DialogPreference;
import android.util.AttributeSet;
import android.util.Pair;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import de.blinkt.openvpn.R;
import de.blinkt.openvpn.VpnProfile;

public class RemoteCNPreference extends DialogPreference {


	private Spinner mSpinner;
	private EditText mEditText;
	private int mDNType;
	private String mDn;
	private TextView mRemoteTLSNote;
	//private ScrollView mScrollView;

	public RemoteCNPreference(Context context, AttributeSet attrs) {
		super(context, attrs);
		setDialogLayoutResource(R.layout.tlsremote);

	}

	@Override
	protected void onBindDialogView(View view) {

		super.onBindDialogView(view);

		mEditText = (EditText) view.findViewById(R.id.tlsremotecn);
		mSpinner = (Spinner) view.findViewById(R.id.x509verifytype);
		mRemoteTLSNote = (TextView) view.findViewById(R.id.tlsremotenote);
		//mScrollView = (ScrollView) view.findViewById(R.id.tlsremotescroll);
		if(mDn!=null)
			mEditText.setText(mDn);

		populateSpinner();

	}



	public String getCNText() {
		return mDn;
	}

	public int getAuthtype() {
		return mDNType;
	}

	public void setDN(String dn) {
		mDn = dn;
		if(mEditText!=null)
			mEditText.setText(dn);
	}

	public void setAuthType(int x509authtype) {
		mDNType = x509authtype;
		if (mSpinner!=null)
			populateSpinner();
	}

	@Override
	protected void onDialogClosed(boolean positiveResult) {
		super.onDialogClosed(positiveResult);

		if (positiveResult) {
			String dn = mEditText.getText().toString();
			int authtype = getAuthTypeFromSpinner();
			if (callChangeListener(new Pair<Integer, String>(authtype, dn))) {
				mDn = dn;
				mDNType = authtype;
			}
		}
	}
	
	private void populateSpinner() {
		ArrayAdapter<String> authtypes = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item);
		authtypes.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

		authtypes.add(getContext().getString(R.string.complete_dn));
		authtypes.add(getContext().getString(R.string.rdn));
		authtypes.add(getContext().getString(R.string.rdn_prefix));
		if ((mDNType == VpnProfile.X509_VERIFY_TLSREMOTE || mDNType == VpnProfile.X509_VERIFY_TLSREMOTE_COMPAT_NOREMAPPING)
				&& !(mDn==null || "".equals(mDn))) {
			authtypes.add(getContext().getString(R.string.tls_remote_deprecated));
			mRemoteTLSNote.setVisibility(View.VISIBLE);
		} else {
			mRemoteTLSNote.setVisibility(View.GONE);
		}
		mSpinner.setAdapter(authtypes);
		mSpinner.setSelection(getSpinnerPositionFromAuthTYPE());
	}
	
	private int getSpinnerPositionFromAuthTYPE() {
		switch (mDNType) {
		case VpnProfile.X509_VERIFY_TLSREMOTE_DN:
			return 0;
		case VpnProfile.X509_VERIFY_TLSREMOTE_RDN:
			return 1;
		case VpnProfile.X509_VERIFY_TLSREMOTE_RDN_PREFIX:
			return 2;
		case VpnProfile.X509_VERIFY_TLSREMOTE_COMPAT_NOREMAPPING:
		case VpnProfile.X509_VERIFY_TLSREMOTE:
			if (mDn==null || "".equals(mDn))
				return 1;
			else
				return 3;


		default:
			return 0;
		}
	}
	
	private int getAuthTypeFromSpinner() {
		int pos = mSpinner.getSelectedItemPosition();
		switch (pos) {
		case 0:
			return VpnProfile.X509_VERIFY_TLSREMOTE_DN;
		case 1:
			return VpnProfile.X509_VERIFY_TLSREMOTE_RDN;
		case 2:
			return VpnProfile.X509_VERIFY_TLSREMOTE_RDN_PREFIX;
		case 3:
			// This is the tls-remote entry, only visible if mDntype is a
			// tls-remote type
			return mDNType;
		default:
			return VpnProfile.X509_VERIFY_TLSREMOTE;
		}
	}

}