110
my $name = $self->param('name');
111
my $openVPN = EBox::Global->modInstance('openvpn');
112
my $client = $openVPN->client($name);
115
my $anyPropiertyParam = any @clientPropierties;
117
my @mutatorsParams = grep { $_ eq $anyPropiertyParam } @{ $self->params() };
118
my $anyParamWithUpload = any(qw(caCertificatePath certificatePath certificateKey));
120
foreach my $attr (@mutatorsParams) {
121
my $value = $self->param($attr);
122
next if $value eq '';
124
if ($attr eq $anyParamWithUpload) {
125
$value = $self->upload($attr); # value must be the file path, not the
130
if ($client->$attr() ne $attr) {
131
my $mutatorName = "set\u$attr";
132
my $mutator_r = $client->can($mutatorName);
133
defined $mutator_r or throw EBox::Exceptions::Internal "$mutatorName not found in client object";
135
$mutator_r->($client, $value);
140
if ($self->param('serverAddr') || $self->param('serverPort')) {
141
my ($newServerAddr, $newServerPort) = ($self->param('serverAddr'), $self->param('serverPort'));
142
my ($oldServerAddr, $oldServerPort) = $self->_getServerPropierties($client);
144
my $serverAddr = defined $newServerAddr ? $newServerAddr : $oldServerAddr;
145
my $serverPort = defined $newServerPort ? $newServerPort : $oldServerPort;
147
my @newServers = ([$serverAddr, $serverPort],);
148
$client->setServers(\@newServers);
153
$self->setMsg(__x("Client {name} configuration updated", name => $name) );
154
$self->{chain} = 'OpenVPN/Index';
157
$self->setMsg( __('There are no changes to be saved'));
119
my ($self, $name, $client) = @_;
121
$self->_editClientCertificates($client);
122
$self->_editClientProperties($client);
123
$self->_editServerProperties($client);
125
if ($self->_changed) {
126
$self->setMsg(__x("Client {name} configuration updated", name => $name) );
127
$self->{chain} = 'OpenVPN/Index';
130
$self->setMsg( __('There are no changes to be saved'));
136
sub _editClientProperties
138
my ($self, $client) = @_;
140
my $anyPropiertyParam = any @clientPropierties;
142
my @mutatorsParams = grep { $_ eq $anyPropiertyParam } @{ $self->params() };
143
my $anyParamWithUpload = any(@clientCertificates);
145
foreach my $attr (@mutatorsParams) {
146
my $value = $self->param($attr);
147
next if $value eq '';
149
if ($client->$attr() ne $attr) {
150
my $mutatorName = "set\u$attr";
151
my $mutator_r = $client->can($mutatorName);
152
defined $mutator_r or throw EBox::Exceptions::Internal "$mutatorName not found in client object";
154
$mutator_r->($client, $value);
155
$self->_setAsChanged();
161
sub _editClientCertificates
163
my ($self, $client) = @_;
165
# check if all certificate params have value
166
my $certParamCount = grep {
168
} @clientCertificates;
170
if ($certParamCount == 0) {
171
# no changes in clients certificates
174
elsif ($certParamCount < @clientCertificates) {
175
throw EBox::Exceptions::External(
176
__('Certificate files cannot be changed in isolation. You must change all files at the same time')
182
my $caCert = $self->upload('caCertificate');
183
my $cert = $self->upload('certificate');
184
my $key = $self->upload('certificateKey');
186
$client->setCertificateFiles($caCert, $cert, $key);
188
$self->_setAsChanged();
191
sub _editServerProperties
193
my ($self, $client) = @_;
195
if ($self->param('serverAddr') || $self->param('serverPort')) {
196
my ($newServerAddr, $newServerPort) = ($self->param('serverAddr'), $self->param('serverPort'));
197
my ($oldServerAddr, $oldServerPort) = $self->_getServerPropierties($client);
199
my $serverAddr = defined $newServerAddr ? $newServerAddr : $oldServerAddr;
200
my $serverPort = defined $newServerPort ? $newServerPort : $oldServerPort;
202
my @newServers = ([$serverAddr, $serverPort],);
203
$client->setServers(\@newServers);
205
$self->_setAsChanged();
213
$self->{changed} = 1;