001// Generated by delombok at Mon Oct 12 23:00:28 BST 2020
002/*
003 *  Licensed to the Apache Software Foundation (ASF) under one
004 *  or more contributor license agreements.  See the NOTICE file
005 *  distributed with this work for additional information
006 *  regarding copyright ownership.  The ASF licenses this file
007 *  to you under the Apache License, Version 2.0 (the
008 *  "License"); you may not use this file except in compliance
009 *  with the License.  You may obtain a copy of the License at
010 *
011 *        http://www.apache.org/licenses/LICENSE-2.0
012 *
013 *  Unless required by applicable law or agreed to in writing,
014 *  software distributed under the License is distributed on an
015 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
016 *  KIND, either express or implied.  See the License for the
017 *  specific language governing permissions and limitations
018 *  under the License.
019 */
020package org.apache.isis.extensions.secman.api;
021
022import java.util.Set;
023import java.util.stream.Stream;
024import org.apache.isis.commons.internal.base._NullSafe;
025import lombok.NonNull;
026
027public class SecurityModuleConfig {
028    // -- ROLES
029    @NonNull
030    final String regularUserRoleName;
031    @NonNull
032    final String fixtureRoleName;
033    @NonNull
034    final String adminRoleName;
035    // -- ADMIN
036    @NonNull
037    final String adminUserName;
038    @NonNull
039    final String adminPassword;
040    /**
041     * cannot be removed via user interface
042     */
043    @NonNull
044    final String[] adminStickyPackagePermissions;
045    final Set<String> adminAdditionalPackagePermissions;
046    /**
047     * Delegated users, on first successful logon, are auto-created but disabled (by default).
048
049     * <p> 
050
051     * This option allows to override this behavior, such that authenticated 
052
053     * users are also auto-enabled.
054
055     * <p>
056
057     * default: false
058     */
059    final boolean autoEnableIfDelegatedAndAuthenticated;
060
061    // -- UTILITIES
062    public Stream<String> streamAdminPackagePermissions() {
063        return Stream.concat(_NullSafe.stream(adminStickyPackagePermissions), _NullSafe.stream(adminAdditionalPackagePermissions));
064    }
065
066    public boolean isStickyAdminPackage(String featureFqn) {
067        return _NullSafe.stream(adminStickyPackagePermissions).anyMatch(stickyPackage -> stickyPackage.equals(featureFqn));
068    }
069
070    @java.lang.SuppressWarnings("all")
071    private static String $default$regularUserRoleName() {
072        return "isis-module-security-regular-user";
073    }
074
075    @java.lang.SuppressWarnings("all")
076    private static String $default$fixtureRoleName() {
077        return "isis-module-security-fixtures";
078    }
079
080    @java.lang.SuppressWarnings("all")
081    private static String $default$adminRoleName() {
082        return "isis-module-security-admin";
083    }
084
085    @java.lang.SuppressWarnings("all")
086    private static String $default$adminUserName() {
087        return "isis-module-security-admin";
088    }
089
090    @java.lang.SuppressWarnings("all")
091    private static String $default$adminPassword() {
092        return "pass";
093    }
094
095    @java.lang.SuppressWarnings("all")
096    private static String[] $default$adminStickyPackagePermissions() {
097        return new String[] {"org.apache.isis.extensions.secman.api", "org.apache.isis.extensions.secman.model", "org.apache.isis.extensions.secman.jdo.dom"};
098    }
099
100    @java.lang.SuppressWarnings("all")
101    private static boolean $default$autoEnableIfDelegatedAndAuthenticated() {
102        return false;
103    }
104
105    @java.lang.SuppressWarnings("all")
106    SecurityModuleConfig(@NonNull final String regularUserRoleName, @NonNull final String fixtureRoleName, @NonNull final String adminRoleName, @NonNull final String adminUserName, @NonNull final String adminPassword, @NonNull final String[] adminStickyPackagePermissions, final Set<String> adminAdditionalPackagePermissions, final boolean autoEnableIfDelegatedAndAuthenticated) {
107        if (regularUserRoleName == null) {
108            throw new java.lang.NullPointerException("regularUserRoleName is marked non-null but is null");
109        }
110        if (fixtureRoleName == null) {
111            throw new java.lang.NullPointerException("fixtureRoleName is marked non-null but is null");
112        }
113        if (adminRoleName == null) {
114            throw new java.lang.NullPointerException("adminRoleName is marked non-null but is null");
115        }
116        if (adminUserName == null) {
117            throw new java.lang.NullPointerException("adminUserName is marked non-null but is null");
118        }
119        if (adminPassword == null) {
120            throw new java.lang.NullPointerException("adminPassword is marked non-null but is null");
121        }
122        if (adminStickyPackagePermissions == null) {
123            throw new java.lang.NullPointerException("adminStickyPackagePermissions is marked non-null but is null");
124        }
125        this.regularUserRoleName = regularUserRoleName;
126        this.fixtureRoleName = fixtureRoleName;
127        this.adminRoleName = adminRoleName;
128        this.adminUserName = adminUserName;
129        this.adminPassword = adminPassword;
130        this.adminStickyPackagePermissions = adminStickyPackagePermissions;
131        this.adminAdditionalPackagePermissions = adminAdditionalPackagePermissions;
132        this.autoEnableIfDelegatedAndAuthenticated = autoEnableIfDelegatedAndAuthenticated;
133    }
134
135
136    @java.lang.SuppressWarnings("all")
137    public static class SecurityModuleConfigBuilder {
138        @java.lang.SuppressWarnings("all")
139        private boolean regularUserRoleName$set;
140        @java.lang.SuppressWarnings("all")
141        private String regularUserRoleName$value;
142        @java.lang.SuppressWarnings("all")
143        private boolean fixtureRoleName$set;
144        @java.lang.SuppressWarnings("all")
145        private String fixtureRoleName$value;
146        @java.lang.SuppressWarnings("all")
147        private boolean adminRoleName$set;
148        @java.lang.SuppressWarnings("all")
149        private String adminRoleName$value;
150        @java.lang.SuppressWarnings("all")
151        private boolean adminUserName$set;
152        @java.lang.SuppressWarnings("all")
153        private String adminUserName$value;
154        @java.lang.SuppressWarnings("all")
155        private boolean adminPassword$set;
156        @java.lang.SuppressWarnings("all")
157        private String adminPassword$value;
158        @java.lang.SuppressWarnings("all")
159        private boolean adminStickyPackagePermissions$set;
160        @java.lang.SuppressWarnings("all")
161        private String[] adminStickyPackagePermissions$value;
162        @java.lang.SuppressWarnings("all")
163        private java.util.ArrayList<String> adminAdditionalPackagePermissions;
164        @java.lang.SuppressWarnings("all")
165        private boolean autoEnableIfDelegatedAndAuthenticated$set;
166        @java.lang.SuppressWarnings("all")
167        private boolean autoEnableIfDelegatedAndAuthenticated$value;
168
169        @java.lang.SuppressWarnings("all")
170        SecurityModuleConfigBuilder() {
171        }
172
173        @java.lang.SuppressWarnings("all")
174        public SecurityModuleConfig.SecurityModuleConfigBuilder regularUserRoleName(@NonNull final String regularUserRoleName) {
175            if (regularUserRoleName == null) {
176                throw new java.lang.NullPointerException("regularUserRoleName is marked non-null but is null");
177            }
178            this.regularUserRoleName$value = regularUserRoleName;
179            regularUserRoleName$set = true;
180            return this;
181        }
182
183        @java.lang.SuppressWarnings("all")
184        public SecurityModuleConfig.SecurityModuleConfigBuilder fixtureRoleName(@NonNull final String fixtureRoleName) {
185            if (fixtureRoleName == null) {
186                throw new java.lang.NullPointerException("fixtureRoleName is marked non-null but is null");
187            }
188            this.fixtureRoleName$value = fixtureRoleName;
189            fixtureRoleName$set = true;
190            return this;
191        }
192
193        @java.lang.SuppressWarnings("all")
194        public SecurityModuleConfig.SecurityModuleConfigBuilder adminRoleName(@NonNull final String adminRoleName) {
195            if (adminRoleName == null) {
196                throw new java.lang.NullPointerException("adminRoleName is marked non-null but is null");
197            }
198            this.adminRoleName$value = adminRoleName;
199            adminRoleName$set = true;
200            return this;
201        }
202
203        @java.lang.SuppressWarnings("all")
204        public SecurityModuleConfig.SecurityModuleConfigBuilder adminUserName(@NonNull final String adminUserName) {
205            if (adminUserName == null) {
206                throw new java.lang.NullPointerException("adminUserName is marked non-null but is null");
207            }
208            this.adminUserName$value = adminUserName;
209            adminUserName$set = true;
210            return this;
211        }
212
213        @java.lang.SuppressWarnings("all")
214        public SecurityModuleConfig.SecurityModuleConfigBuilder adminPassword(@NonNull final String adminPassword) {
215            if (adminPassword == null) {
216                throw new java.lang.NullPointerException("adminPassword is marked non-null but is null");
217            }
218            this.adminPassword$value = adminPassword;
219            adminPassword$set = true;
220            return this;
221        }
222
223        /**
224         * cannot be removed via user interface
225         * @return {@code this}.
226         */
227        @java.lang.SuppressWarnings("all")
228        public SecurityModuleConfig.SecurityModuleConfigBuilder adminStickyPackagePermissions(@NonNull final String[] adminStickyPackagePermissions) {
229            if (adminStickyPackagePermissions == null) {
230                throw new java.lang.NullPointerException("adminStickyPackagePermissions is marked non-null but is null");
231            }
232            this.adminStickyPackagePermissions$value = adminStickyPackagePermissions;
233            adminStickyPackagePermissions$set = true;
234            return this;
235        }
236
237        @java.lang.SuppressWarnings("all")
238        public SecurityModuleConfig.SecurityModuleConfigBuilder adminAdditionalPackagePermission(final String adminAdditionalPackagePermission) {
239            if (this.adminAdditionalPackagePermissions == null) this.adminAdditionalPackagePermissions = new java.util.ArrayList<String>();
240            this.adminAdditionalPackagePermissions.add(adminAdditionalPackagePermission);
241            return this;
242        }
243
244        @java.lang.SuppressWarnings("all")
245        public SecurityModuleConfig.SecurityModuleConfigBuilder adminAdditionalPackagePermissions(final java.util.Collection<? extends String> adminAdditionalPackagePermissions) {
246            if (adminAdditionalPackagePermissions == null) {
247                throw new java.lang.NullPointerException("adminAdditionalPackagePermissions cannot be null");
248            }
249            if (this.adminAdditionalPackagePermissions == null) this.adminAdditionalPackagePermissions = new java.util.ArrayList<String>();
250            this.adminAdditionalPackagePermissions.addAll(adminAdditionalPackagePermissions);
251            return this;
252        }
253
254        @java.lang.SuppressWarnings("all")
255        public SecurityModuleConfig.SecurityModuleConfigBuilder clearAdminAdditionalPackagePermissions() {
256            if (this.adminAdditionalPackagePermissions != null) this.adminAdditionalPackagePermissions.clear();
257            return this;
258        }
259
260        /**
261         * Delegated users, on first successful logon, are auto-created but disabled (by default).
262
263         * <p> 
264
265         * This option allows to override this behavior, such that authenticated 
266
267         * users are also auto-enabled.
268
269         * <p>
270
271         * default: false
272         * @return {@code this}.
273         */
274        @java.lang.SuppressWarnings("all")
275        public SecurityModuleConfig.SecurityModuleConfigBuilder autoEnableIfDelegatedAndAuthenticated(final boolean autoEnableIfDelegatedAndAuthenticated) {
276            this.autoEnableIfDelegatedAndAuthenticated$value = autoEnableIfDelegatedAndAuthenticated;
277            autoEnableIfDelegatedAndAuthenticated$set = true;
278            return this;
279        }
280
281        @java.lang.SuppressWarnings("all")
282        public SecurityModuleConfig build() {
283            java.util.Set<String> adminAdditionalPackagePermissions;
284            switch (this.adminAdditionalPackagePermissions == null ? 0 : this.adminAdditionalPackagePermissions.size()) {
285            case 0: 
286                adminAdditionalPackagePermissions = java.util.Collections.emptySet();
287                break;
288            case 1: 
289                adminAdditionalPackagePermissions = java.util.Collections.singleton(this.adminAdditionalPackagePermissions.get(0));
290                break;
291            default: 
292                adminAdditionalPackagePermissions = new java.util.LinkedHashSet<String>(this.adminAdditionalPackagePermissions.size() < 1073741824 ? 1 + this.adminAdditionalPackagePermissions.size() + (this.adminAdditionalPackagePermissions.size() - 3) / 3 : java.lang.Integer.MAX_VALUE);
293                adminAdditionalPackagePermissions.addAll(this.adminAdditionalPackagePermissions);
294                adminAdditionalPackagePermissions = java.util.Collections.unmodifiableSet(adminAdditionalPackagePermissions);
295            }
296            String regularUserRoleName$value = this.regularUserRoleName$value;
297            if (!this.regularUserRoleName$set) regularUserRoleName$value = SecurityModuleConfig.$default$regularUserRoleName();
298            String fixtureRoleName$value = this.fixtureRoleName$value;
299            if (!this.fixtureRoleName$set) fixtureRoleName$value = SecurityModuleConfig.$default$fixtureRoleName();
300            String adminRoleName$value = this.adminRoleName$value;
301            if (!this.adminRoleName$set) adminRoleName$value = SecurityModuleConfig.$default$adminRoleName();
302            String adminUserName$value = this.adminUserName$value;
303            if (!this.adminUserName$set) adminUserName$value = SecurityModuleConfig.$default$adminUserName();
304            String adminPassword$value = this.adminPassword$value;
305            if (!this.adminPassword$set) adminPassword$value = SecurityModuleConfig.$default$adminPassword();
306            String[] adminStickyPackagePermissions$value = this.adminStickyPackagePermissions$value;
307            if (!this.adminStickyPackagePermissions$set) adminStickyPackagePermissions$value = SecurityModuleConfig.$default$adminStickyPackagePermissions();
308            boolean autoEnableIfDelegatedAndAuthenticated$value = this.autoEnableIfDelegatedAndAuthenticated$value;
309            if (!this.autoEnableIfDelegatedAndAuthenticated$set) autoEnableIfDelegatedAndAuthenticated$value = SecurityModuleConfig.$default$autoEnableIfDelegatedAndAuthenticated();
310            return new SecurityModuleConfig(regularUserRoleName$value, fixtureRoleName$value, adminRoleName$value, adminUserName$value, adminPassword$value, adminStickyPackagePermissions$value, adminAdditionalPackagePermissions, autoEnableIfDelegatedAndAuthenticated$value);
311        }
312
313        @java.lang.Override
314        @java.lang.SuppressWarnings("all")
315        public java.lang.String toString() {
316            return "SecurityModuleConfig.SecurityModuleConfigBuilder(regularUserRoleName$value=" + this.regularUserRoleName$value + ", fixtureRoleName$value=" + this.fixtureRoleName$value + ", adminRoleName$value=" + this.adminRoleName$value + ", adminUserName$value=" + this.adminUserName$value + ", adminPassword$value=" + this.adminPassword$value + ", adminStickyPackagePermissions$value=" + java.util.Arrays.deepToString(this.adminStickyPackagePermissions$value) + ", adminAdditionalPackagePermissions=" + this.adminAdditionalPackagePermissions + ", autoEnableIfDelegatedAndAuthenticated$value=" + this.autoEnableIfDelegatedAndAuthenticated$value + ")";
317        }
318    }
319
320    @java.lang.SuppressWarnings("all")
321    public static SecurityModuleConfig.SecurityModuleConfigBuilder builder() {
322        return new SecurityModuleConfig.SecurityModuleConfigBuilder();
323    }
324
325    @NonNull
326    @java.lang.SuppressWarnings("all")
327    public String getRegularUserRoleName() {
328        return this.regularUserRoleName;
329    }
330
331    @NonNull
332    @java.lang.SuppressWarnings("all")
333    public String getFixtureRoleName() {
334        return this.fixtureRoleName;
335    }
336
337    @NonNull
338    @java.lang.SuppressWarnings("all")
339    public String getAdminRoleName() {
340        return this.adminRoleName;
341    }
342
343    @NonNull
344    @java.lang.SuppressWarnings("all")
345    public String getAdminUserName() {
346        return this.adminUserName;
347    }
348
349    @NonNull
350    @java.lang.SuppressWarnings("all")
351    public String getAdminPassword() {
352        return this.adminPassword;
353    }
354
355    /**
356     * cannot be removed via user interface
357     */
358    @NonNull
359    @java.lang.SuppressWarnings("all")
360    public String[] getAdminStickyPackagePermissions() {
361        return this.adminStickyPackagePermissions;
362    }
363
364    @java.lang.SuppressWarnings("all")
365    public Set<String> getAdminAdditionalPackagePermissions() {
366        return this.adminAdditionalPackagePermissions;
367    }
368
369    /**
370     * Delegated users, on first successful logon, are auto-created but disabled (by default).
371
372     * <p> 
373
374     * This option allows to override this behavior, such that authenticated 
375
376     * users are also auto-enabled.
377
378     * <p>
379
380     * default: false
381     */
382    @java.lang.SuppressWarnings("all")
383    public boolean isAutoEnableIfDelegatedAndAuthenticated() {
384        return this.autoEnableIfDelegatedAndAuthenticated;
385    }
386}