Centralize/unify validation of configurations
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
23fdb72eda
commit
a828e83399
@ -113,18 +113,13 @@ public class ConfigEditFragment extends BaseConfigFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void saveConfig() {
|
private void saveConfig() {
|
||||||
final String errorMessage = localConfig.validate();
|
|
||||||
final VpnService service = VpnService.getInstance();
|
final VpnService service = VpnService.getInstance();
|
||||||
if (errorMessage != null) {
|
|
||||||
Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_SHORT).show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
if (getCurrentConfig() != null)
|
if (getCurrentConfig() != null)
|
||||||
service.update(getCurrentConfig().getName(), localConfig);
|
service.update(getCurrentConfig().getName(), localConfig);
|
||||||
else
|
else
|
||||||
service.add(localConfig);
|
service.add(localConfig);
|
||||||
} catch (final IllegalStateException e) {
|
} catch (final IllegalArgumentException | IllegalStateException e) {
|
||||||
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import android.service.quicksettings.TileService;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.wireguard.config.Config;
|
import com.wireguard.config.Config;
|
||||||
|
import com.wireguard.config.Peer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
@ -367,8 +368,15 @@ public class VpnService extends Service
|
|||||||
// When adding a config, "old file" and "new file" are the same thing.
|
// When adding a config, "old file" and "new file" are the same thing.
|
||||||
oldName = knownConfig != null ? knownConfig.getName() : newName;
|
oldName = knownConfig != null ? knownConfig.getName() : newName;
|
||||||
this.shouldConnect = shouldConnect;
|
this.shouldConnect = shouldConnect;
|
||||||
|
if (newName == null || !Config.isNameValid(newName))
|
||||||
|
throw new IllegalArgumentException("This configuration does not have a valid name");
|
||||||
if (isAddOrRename() && configurations.containsKey(newName))
|
if (isAddOrRename() && configurations.containsKey(newName))
|
||||||
throw new IllegalStateException("Config " + newName + " already exists");
|
throw new IllegalStateException("Configuration " + newName + " already exists");
|
||||||
|
if (newConfig.getInterface().getPublicKey() == null)
|
||||||
|
throw new IllegalArgumentException("This configuration must have a valid keypair");
|
||||||
|
for (final Peer peer : newConfig.getPeers())
|
||||||
|
if (peer.getPublicKey() == null || peer.getPublicKey().isEmpty())
|
||||||
|
throw new IllegalArgumentException("Each peer must have a valid public key");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -40,7 +40,7 @@ public class Config extends BaseObservable
|
|||||||
public static final int NAME_MAX_LENGTH = 16;
|
public static final int NAME_MAX_LENGTH = 16;
|
||||||
private static final Pattern PATTERN = Pattern.compile("^[a-zA-Z0-9_=+.-]{1,16}$");
|
private static final Pattern PATTERN = Pattern.compile("^[a-zA-Z0-9_=+.-]{1,16}$");
|
||||||
|
|
||||||
private static boolean isNameValid(final String name) {
|
public static boolean isNameValid(final String name) {
|
||||||
return name.length() <= NAME_MAX_LENGTH && PATTERN.matcher(name).matches();
|
return name.length() <= NAME_MAX_LENGTH && PATTERN.matcher(name).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,14 +180,6 @@ public class Config extends BaseObservable
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String validate() {
|
|
||||||
if (name == null || !isNameValid(name))
|
|
||||||
return "This configuration does not have a valid name.";
|
|
||||||
if (iface.getPublicKey() == null)
|
|
||||||
return "This configuration does not have a valid keypair.";
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(final Parcel dest, final int flags) {
|
public void writeToParcel(final Parcel dest, final int flags) {
|
||||||
dest.writeParcelable(iface, flags);
|
dest.writeParcelable(iface, flags);
|
||||||
|
Loading…
Reference in New Issue
Block a user