InternalAdminAuthentication.java

/*
 * Copyright (C) 2023 B3Partners B.V.
 *
 * SPDX-License-Identifier: MIT
 */

package org.tailormap.api.security;

import java.util.Collection;
import java.util.List;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.tailormap.api.persistence.Group;

public class InternalAdminAuthentication implements Authentication {
  public static final InternalAdminAuthentication INSTANCE = new InternalAdminAuthentication();

  /**
   * Allow usage of secured methods such as JpaRepositories as admin, for example on startup or in background tasks.
   */
  public static void setInSecurityContext() {
    SecurityContext context = SecurityContextHolder.getContext();
    context.setAuthentication(INSTANCE);
    SecurityContextHolder.setContext(context);
  }

  public static void clearSecurityContextAuthentication() {
    SecurityContext context = SecurityContextHolder.getContext();
    context.setAuthentication(null);
    SecurityContextHolder.setContext(context);
  }

  @Override
  public Collection<? extends GrantedAuthority> getAuthorities() {
    return List.of(new SimpleGrantedAuthority(Group.ADMIN));
  }

  @Override
  public Object getCredentials() {
    return null;
  }

  @Override
  public Object getDetails() {
    return null;
  }

  @Override
  public Object getPrincipal() {
    return null;
  }

  @Override
  public boolean isAuthenticated() {
    return true;
  }

  @Override
  public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
    throw new IllegalArgumentException();
  }

  @Override
  public String getName() {
    return "backend-internal-admin";
  }
}