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}