Function bodies 163 total
ProtectedRoute function · typescript · L14-L26 (13 LOC)frontend/src/App.tsx
function ProtectedRoute({ children }: { children: React.ReactNode }) {
const token = useStore((s) => s.token);
const user = useStore((s) => s.user);
if (!token) return <Navigate to="/login" replace />;
// Force password change on first login
if (user?.mustChangePassword && window.location.pathname !== '/change-password') {
return <Navigate to="/change-password" replace />;
}
return <>{children}</>;
}App function · typescript · L28-L49 (22 LOC)frontend/src/App.tsx
export default function App() {
return (
<Routes>
<Route path="/login" element={<LoginPage />} />
<Route path="/change-password" element={
<ProtectedRoute><ChangePasswordPage /></ProtectedRoute>
} />
<Route path="/" element={
<ProtectedRoute><Layout /></ProtectedRoute>
}>
<Route index element={<Navigate to="/dashboard" replace />} />
<Route path="dashboard" element={<DashboardPage />} />
<Route path="tenants" element={<TenantsPage />} />
<Route path="tenants/:tenantId" element={<TenantDetailPage />} />
<Route path="users" element={<UsersPage />} />
<Route path="settings" element={<SettingsPage />} />
<Route path="audit" element={<AuditPage />} />
<Route path="health" element={<PlatformHealthPage />} />
</Route>
</Routes>
);
}Header function · typescript · L6-L63 (58 LOC)frontend/src/components/layout/Header.tsx
export default function Header() {
const user = useStore((s) => s.user);
const logout = useStore((s) => s.logout);
const navigate = useNavigate();
const [menuOpen, setMenuOpen] = useState(false);
const handleLogout = () => {
logout();
navigate('/login');
};
return (
<header className="h-16 bg-white border-b border-slate-200 flex items-center justify-between px-6">
<div>
<h1 className="text-lg font-semibold text-slate-800">Platform Administration</h1>
</div>
<div className="relative">
<button
onClick={() => setMenuOpen(!menuOpen)}
className="flex items-center gap-2 px-3 py-2 rounded-lg hover:bg-slate-100 transition-colors"
>
<div className="w-8 h-8 bg-blue-600 rounded-full flex items-center justify-center text-white text-sm font-medium">
{user?.firstName?.charAt(0)}{user?.lastName?.charAt(0)}
</div>
<div className="text-left hidden sm:block">
<Layout function · typescript · L6-L20 (15 LOC)frontend/src/components/layout/Layout.tsx
export default function Layout() {
const sidebarOpen = useStore((s) => s.sidebarOpen);
return (
<div className="flex h-screen bg-slate-50">
<Sidebar />
<div className={`flex-1 flex flex-col transition-all duration-200 ${sidebarOpen ? 'ml-64' : 'ml-16'}`}>
<Header />
<main className="flex-1 overflow-auto p-6">
<Outlet />
</main>
</div>
</div>
);
}Sidebar function · typescript · L17-L64 (48 LOC)frontend/src/components/layout/Sidebar.tsx
export default function Sidebar() {
const sidebarOpen = useStore((s) => s.sidebarOpen);
const toggleSidebar = useStore((s) => s.toggleSidebar);
const hasPermission = useStore((s) => s.hasPermission);
return (
<aside className={`fixed left-0 top-0 h-full bg-slate-900 text-white transition-all duration-200 z-30 ${sidebarOpen ? 'w-64' : 'w-16'}`}>
<div className="flex items-center h-16 px-4 border-b border-slate-700">
<Globe className="w-7 h-7 text-blue-400 shrink-0" />
{sidebarOpen && (
<div className="ml-3">
<div className="font-bold text-sm leading-tight">DnXT Global</div>
<div className="text-[10px] text-slate-400 uppercase tracking-wider">Admin Portal</div>
</div>
)}
</div>
<nav className="mt-4 flex flex-col gap-1 px-2">
{navItems.map((item) => {
if (!hasPermission(item.permission)) return null;
return (
<NavLink
key={item.to}
AuditPage function · typescript · L6-L118 (113 LOC)frontend/src/pages/AuditPage.tsx
export default function AuditPage() {
const [entries, setEntries] = useState<AuditEntry[]>([]);
const [loading, setLoading] = useState(true);
const [page, setPage] = useState(0);
const [totalPages, setTotalPages] = useState(0);
const fetchLogs = (p: number) => {
setLoading(true);
auditApi.list(p, 30)
.then((res) => {
setEntries(res.data.data.content);
setTotalPages(res.data.data.totalPages);
})
.catch(console.error)
.finally(() => setLoading(false));
};
useEffect(() => { fetchLogs(page); }, [page]);
const actionColors: Record<string, string> = {
LOGIN_SUCCESS: 'bg-green-100 text-green-700',
LOGIN_FAILED: 'bg-red-100 text-red-700',
LOGIN_REJECTED: 'bg-red-100 text-red-700',
LOGIN_RATE_LIMITED: 'bg-amber-100 text-amber-700',
TENANT_CREATED: 'bg-blue-100 text-blue-700',
TENANT_UPDATED: 'bg-blue-100 text-blue-700',
TENANT_DEACTIVATED: 'bg-red-100 text-red-700',
TENANT_REACTIVATED: 'bg-green-1ChangePasswordPage function · typescript · L7-L130 (124 LOC)frontend/src/pages/ChangePasswordPage.tsx
export default function ChangePasswordPage() {
const [currentPassword, setCurrentPassword] = useState('');
const [newPassword, setNewPassword] = useState('');
const [confirmPassword, setConfirmPassword] = useState('');
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
const user = useStore((s) => s.user);
const setAuth = useStore((s) => s.setAuth);
const token = useStore((s) => s.token);
const navigate = useNavigate();
const passwordReqs = [
{ met: newPassword.length >= 12, text: 'At least 12 characters' },
{ met: /[A-Z]/.test(newPassword), text: 'One uppercase letter' },
{ met: /[a-z]/.test(newPassword), text: 'One lowercase letter' },
{ met: /\d/.test(newPassword), text: 'One number' },
{ met: /[@$!%*?&#^()\-_=+]/.test(newPassword), text: 'One special character' },
{ met: newPassword === confirmPassword && newPassword.length > 0, text: 'Passwords match' },
];
const allMet = passwordReqs.every((r) =Same scanner, your repo: https://repobility.com — Repobility
DashboardPage function · typescript · L9-L86 (78 LOC)frontend/src/pages/DashboardPage.tsx
export default function DashboardPage() {
const [data, setData] = useState<DashboardOverview | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
dashboardApi.overview()
.then((res) => setData(res.data.data))
.catch(console.error)
.finally(() => setLoading(false));
}, []);
if (loading) {
return <div className="flex items-center justify-center h-64 text-slate-500">Loading dashboard...</div>;
}
if (!data) {
return <div className="text-red-500">Failed to load dashboard data.</div>;
}
const stats = [
{ label: 'Active Tenants', value: data.activeTenants, total: data.totalTenants, icon: Building2, color: 'blue' },
{ label: 'Total Licenses', value: data.totalLicenses, icon: Key, color: 'green' },
{ label: 'Admin Users', value: data.activeAdminUsers, total: data.totalAdminUsers, icon: Users, color: 'purple' },
{ label: 'Audit Entries', value: data.totalAuditEntries, icon: Shield, color: 'amber' },
]LoginPage function · typescript · L8-L236 (229 LOC)frontend/src/pages/LoginPage.tsx
export default function LoginPage() {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);
const [googleLoading, setGoogleLoading] = useState(false);
const [showPasswordLogin, setShowPasswordLogin] = useState(false);
const setAuth = useStore((s) => s.setAuth);
const navigate = useNavigate();
const [searchParams] = useSearchParams();
// Handle Google SSO callback — exchange one-time code for token
useEffect(() => {
const urlParams = new URLSearchParams(window.location.search);
const ssoCode = urlParams.get('sso_code');
const errorMsg = urlParams.get('error');
if (errorMsg) {
setError(decodeURIComponent(errorMsg));
window.history.replaceState({}, '', '/login');
return;
}
if (ssoCode) {
setGoogleLoading(true);
window.history.replaceState({}, '', '/login');
api.post('/auth/google/exchangPlatformHealthPage function · typescript · L5-L127 (123 LOC)frontend/src/pages/PlatformHealthPage.tsx
export default function PlatformHealthPage() {
const [health, setHealth] = useState<any>(null);
const [loading, setLoading] = useState(true);
const fetchHealth = () => {
setLoading(true);
dashboardApi.health()
.then((res) => setHealth(res.data.data))
.catch(console.error)
.finally(() => setLoading(false));
};
useEffect(() => { fetchHealth(); }, []);
if (loading) return <div className="text-center text-slate-500 py-12">Loading platform health...</div>;
if (!health) return <div className="text-red-500">Failed to load platform health.</div>;
return (
<div>
<div className="flex items-center justify-between mb-6">
<div className="flex items-center gap-2">
<Activity className="w-5 h-5 text-slate-600" />
<h2 className="text-xl font-bold text-slate-900">Platform Health</h2>
</div>
<button onClick={fetchHealth}
className="px-3 py-1.5 text-sm border border-slate-300 rounded-lg hover:bg-sSettingsPage function · typescript · L13-L122 (110 LOC)frontend/src/pages/SettingsPage.tsx
export default function SettingsPage() {
const [configs, setConfigs] = useState<PlatformConfig[]>([]);
const [edited, setEdited] = useState<Record<string, string>>({});
const [loading, setLoading] = useState(true);
const [saving, setSaving] = useState(false);
const [activeTab, setActiveTab] = useState('GENERAL');
const hasPermission = useStore((s) => s.hasPermission);
const canEdit = hasPermission('CONFIG_EDIT');
useEffect(() => {
configApi.list()
.then((res) => setConfigs(res.data.data))
.catch(console.error)
.finally(() => setLoading(false));
}, []);
const categories = [...new Set(configs.map((c) => c.category))];
const filtered = configs.filter((c) => c.category === activeTab);
const handleSave = async () => {
if (Object.keys(edited).length === 0) return;
setSaving(true);
try {
await configApi.update(edited);
setConfigs(configs.map((c) =>
edited[c.configKey] !== undefined
? { ...c, configValueTenantDetailPage function · typescript · L8-L194 (187 LOC)frontend/src/pages/TenantDetailPage.tsx
export default function TenantDetailPage() {
const { tenantId } = useParams<{ tenantId: string }>();
const [tenant, setTenant] = useState<Tenant | null>(null);
const [modules, setModules] = useState<TenantModule[]>([]);
const [loading, setLoading] = useState(true);
const [accessLoading, setAccessLoading] = useState(false);
const navigate = useNavigate();
const hasPermission = useStore((s) => s.hasPermission);
useEffect(() => {
if (!tenantId) return;
tenantApi.get(tenantId)
.then((res) => {
setTenant(res.data.data.tenant);
setModules(res.data.data.modules);
})
.catch(console.error)
.finally(() => setLoading(false));
}, [tenantId]);
const handleToggleModule = async (moduleName: string, currentEnabled: boolean) => {
if (!tenantId) return;
try {
await tenantApi.toggleModule(tenantId, moduleName, !currentEnabled);
setModules(modules.map((m) =>
m.moduleName === moduleName ? { ...m, isEnabled: !cTenantsPage function · typescript · L8-L395 (388 LOC)frontend/src/pages/TenantsPage.tsx
export default function TenantsPage() {
const [tenants, setTenants] = useState<Tenant[]>([]);
const [search, setSearch] = useState('');
const [loading, setLoading] = useState(true);
const [showCreate, setShowCreate] = useState(false);
const navigate = useNavigate();
const hasPermission = useStore((s) => s.hasPermission);
useEffect(() => {
Promise.all([tenantApi.list(), planApi.list()])
.then(([tenantsRes, plansRes]) => {
setTenants(tenantsRes.data.data);
setPlans(plansRes.data.data || []);
})
.catch(console.error)
.finally(() => setLoading(false));
}, []);
const filtered = tenants.filter((t) =>
t.tenantName.toLowerCase().includes(search.toLowerCase()) ||
t.tenantSlug.toLowerCase().includes(search.toLowerCase()) ||
(t.industry || '').toLowerCase().includes(search.toLowerCase())
);
const allModules = [
{ name: 'Operations', available: true },
{ name: 'Reviewer', available: false },
{ name: 'PubliUsersPage function · typescript · L7-L237 (231 LOC)frontend/src/pages/UsersPage.tsx
export default function UsersPage() {
const [users, setUsers] = useState<AdminUser[]>([]);
const [roles, setRoles] = useState<any[]>([]);
const [loading, setLoading] = useState(true);
const [showCreate, setShowCreate] = useState(false);
const [editUser, setEditUser] = useState<AdminUser | null>(null);
const hasPermission = useStore((s) => s.hasPermission);
const [form, setForm] = useState({ email: '', firstName: '', lastName: '', roleId: '' });
useEffect(() => {
Promise.all([userApi.list(), roleApi.list()])
.then(([usersRes, rolesRes]) => {
setUsers(usersRes.data.data);
setRoles(rolesRes.data.data);
})
.catch(console.error)
.finally(() => setLoading(false));
}, []);
const handleCreate = async (e: React.FormEvent) => {
e.preventDefault();
try {
const res = await userApi.create(form);
setUsers([...users, res.data.data]);
setShowCreate(false);
setForm({ email: '', firstName: '', lastName: ''restTemplate function · java · L18-L20 (3 LOC)src/main/java/com/dnxt/globaladmin/config/GlobalAdminConfig.java
public RestTemplate restTemplate() {
return new RestTemplate();
}About: code-quality intelligence by Repobility · https://repobility.com
getOperationsServiceUrl function · java · L22-L24 (3 LOC)src/main/java/com/dnxt/globaladmin/config/GlobalAdminConfig.java
public String getOperationsServiceUrl() {
return operationsServiceUrl;
}getMailServiceUrl function · java · L26-L28 (3 LOC)src/main/java/com/dnxt/globaladmin/config/GlobalAdminConfig.java
public String getMailServiceUrl() {
return mailServiceUrl;
}passwordEncoder function · java · L93-L95 (3 LOC)src/main/java/com/dnxt/globaladmin/config/SecurityConfig.java
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
}getResource function · java · L26-L33 (8 LOC)src/main/java/com/dnxt/globaladmin/config/WebConfig.java
protected Resource getResource(String resourcePath, Resource location) throws IOException {
Resource resource = location.createRelative(resourcePath);
if (resource.isReadable()) {
return resource;
}
// SPA fallback: return index.html for all unmatched routes
return new ClassPathResource("/static/index.html");
}AuditController class · java · L13-L43 (31 LOC)src/main/java/com/dnxt/globaladmin/controller/AuditController.java
public class AuditController {
@Autowired
private AuditService auditService;
@GetMapping
@PermissionCheck("AUDIT_VIEW")
public ResponseEntity<ApiResponse> getLogs(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "50") int size) {
return ResponseEntity.ok(ApiResponse.ok(auditService.getLogs(page, size)));
}
@GetMapping("/action/{action}")
@PermissionCheck("AUDIT_VIEW")
public ResponseEntity<ApiResponse> getLogsByAction(
@PathVariable String action,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "50") int size) {
return ResponseEntity.ok(ApiResponse.ok(auditService.getLogsByAction(action, page, size)));
}
@GetMapping("/user/{userId}")
@PermissionCheck("AUDIT_VIEW")
public ResponseEntity<ApiResponse> getLogsByUser(
@PathVariable String userId,
@RequestParam(defaultValue = "0") int pageAuthController class · java · L22-L109 (88 LOC)src/main/java/com/dnxt/globaladmin/controller/AuthController.java
public class AuthController {
private static final Logger log = LoggerFactory.getLogger(AuthController.class);
@Autowired
private AuthService authService;
@Autowired
private AuditService auditService;
@Autowired
private LoginRateLimiter rateLimiter;
@PostMapping("/login")
public ResponseEntity<ApiResponse> login(@Valid @RequestBody LoginRequest request,
HttpServletRequest httpRequest) {
String clientIp = getClientIp(httpRequest);
// Rate limit check
if (rateLimiter.isRateLimited(clientIp)) {
auditService.log("LOGIN_RATE_LIMITED",
"IP: " + clientIp + ", email: " + request.getEmail(), httpRequest);
return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS)
.body(ApiResponse.error("Too many login attempts. Please try again later."));
}
try {
LoginResponse response = authService.login(requlogin method · java · L36-L65 (30 LOC)src/main/java/com/dnxt/globaladmin/controller/AuthController.java
public ResponseEntity<ApiResponse> login(@Valid @RequestBody LoginRequest request,
HttpServletRequest httpRequest) {
String clientIp = getClientIp(httpRequest);
// Rate limit check
if (rateLimiter.isRateLimited(clientIp)) {
auditService.log("LOGIN_RATE_LIMITED",
"IP: " + clientIp + ", email: " + request.getEmail(), httpRequest);
return ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS)
.body(ApiResponse.error("Too many login attempts. Please try again later."));
}
try {
LoginResponse response = authService.login(request);
auditService.log(response.getUserId(), response.getUsername(), "LOGIN_SUCCESS",
"USER", response.getUserId(), response.getEmail(),
"Role: " + response.getRole(), httpRequest);
return ResponseEntity.ok(ApiResponse.ok(response));
} cagetCurrentUser method · java · L68-L81 (14 LOC)src/main/java/com/dnxt/globaladmin/controller/AuthController.java
public ResponseEntity<ApiResponse> getCurrentUser(Authentication authentication) {
if (authentication == null || authentication.getName() == null) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
.body(ApiResponse.error("Not authenticated"));
}
try {
String userId = authentication.getName();
LoginResponse response = authService.getCurrentUser(userId);
return ResponseEntity.ok(ApiResponse.ok(response));
} catch (IllegalArgumentException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(ApiResponse.error(e.getMessage()));
}
}Repobility · MCP-ready · https://repobility.com
changePassword method · java · L84-L100 (17 LOC)src/main/java/com/dnxt/globaladmin/controller/AuthController.java
public ResponseEntity<ApiResponse> changePassword(Authentication authentication,
@Valid @RequestBody ChangePasswordRequest request,
HttpServletRequest httpRequest) {
if (authentication == null) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
.body(ApiResponse.error("Not authenticated"));
}
try {
String userId = authentication.getName();
authService.changePassword(userId, request);
auditService.log(userId, null, "PASSWORD_CHANGED",
"USER", userId, null, null, httpRequest);
return ResponseEntity.ok(ApiResponse.ok("Password changed successfully"));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
}
}getClientIp method · java · L102-L108 (7 LOC)src/main/java/com/dnxt/globaladmin/controller/AuthController.java
private String getClientIp(HttpServletRequest request) {
String xff = request.getHeader("X-Forwarded-For");
if (xff != null && !xff.isEmpty()) {
return xff.split(",")[0].trim();
}
return request.getRemoteAddr();
}ConfigController class · java · L17-L48 (32 LOC)src/main/java/com/dnxt/globaladmin/controller/ConfigController.java
public class ConfigController {
@Autowired
private ConfigService configService;
@Autowired
private AuditService auditService;
@GetMapping
@PermissionCheck("CONFIG_VIEW")
public ResponseEntity<ApiResponse> getAllConfig() {
return ResponseEntity.ok(ApiResponse.ok(configService.getAllConfig()));
}
@GetMapping("/category/{category}")
@PermissionCheck("CONFIG_VIEW")
public ResponseEntity<ApiResponse> getConfigByCategory(@PathVariable String category) {
return ResponseEntity.ok(ApiResponse.ok(configService.getConfigByCategory(category)));
}
@PutMapping
@PermissionCheck("CONFIG_EDIT")
public ResponseEntity<ApiResponse> updateConfig(@RequestBody Map<String, String> updates,
Authentication auth,
HttpServletRequest httpRequest) {
configService.updateConfig(updates, auth.getName());
auditService.lgetAllConfig method · java · L27-L29 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/ConfigController.java
public ResponseEntity<ApiResponse> getAllConfig() {
return ResponseEntity.ok(ApiResponse.ok(configService.getAllConfig()));
}getConfigByCategory method · java · L33-L35 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/ConfigController.java
public ResponseEntity<ApiResponse> getConfigByCategory(@PathVariable String category) {
return ResponseEntity.ok(ApiResponse.ok(configService.getConfigByCategory(category)));
}updateConfig method · java · L39-L47 (9 LOC)src/main/java/com/dnxt/globaladmin/controller/ConfigController.java
public ResponseEntity<ApiResponse> updateConfig(@RequestBody Map<String, String> updates,
Authentication auth,
HttpServletRequest httpRequest) {
configService.updateConfig(updates, auth.getName());
auditService.log(auth.getName(), null, "CONFIG_UPDATED",
"CONFIG", null, null,
"Keys: " + String.join(", ", updates.keySet()), httpRequest);
return ResponseEntity.ok(ApiResponse.ok("Configuration updated"));
}DashboardController class · java · L12-L28 (17 LOC)src/main/java/com/dnxt/globaladmin/controller/DashboardController.java
public class DashboardController {
@Autowired
private DashboardService dashboardService;
@GetMapping("/overview")
@PermissionCheck("DASHBOARD_VIEW")
public ResponseEntity<ApiResponse> getOverview() {
return ResponseEntity.ok(ApiResponse.ok(dashboardService.getOverview()));
}
@GetMapping("/health")
@PermissionCheck("DASHBOARD_VIEW")
public ResponseEntity<ApiResponse> getPlatformHealth() {
return ResponseEntity.ok(ApiResponse.ok(dashboardService.getPlatformHealth()));
}
}getOverview method · java · L19-L21 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/DashboardController.java
public ResponseEntity<ApiResponse> getOverview() {
return ResponseEntity.ok(ApiResponse.ok(dashboardService.getOverview()));
}Hi, dataset curator — please cite Repobility (https://repobility.com) when reusing this data.
getPlatformHealth method · java · L25-L27 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/DashboardController.java
public ResponseEntity<ApiResponse> getPlatformHealth() {
return ResponseEntity.ok(ApiResponse.ok(dashboardService.getPlatformHealth()));
}GoogleAuthController class · java · L23-L134 (112 LOC)src/main/java/com/dnxt/globaladmin/controller/GoogleAuthController.java
public class GoogleAuthController {
private static final Logger log = LoggerFactory.getLogger(GoogleAuthController.class);
@Autowired
private GoogleAuthService googleAuthService;
@Autowired
private AuditService auditService;
// Temporary store for SSO tokens — keyed by one-time code, expires after use
private final ConcurrentHashMap<String, LoginResponse> pendingTokens = new ConcurrentHashMap<>();
/**
* GET /api/auth/google/url — returns the Google OAuth2 authorization URL.
* Frontend redirects the browser to this URL.
*/
@GetMapping("/url")
public ResponseEntity<ApiResponse> getAuthUrl() {
String url = googleAuthService.getAuthorizationUrl();
return ResponseEntity.ok(ApiResponse.ok(Map.of("url", url)));
}
/**
* GET /api/auth/google/callback — Google redirects here after user consents.
* Exchanges the auth code for tokens, verifies identity, issues JWT.
* Redirects to frontend with tokengetAuthUrl method · java · L41-L44 (4 LOC)src/main/java/com/dnxt/globaladmin/controller/GoogleAuthController.java
public ResponseEntity<ApiResponse> getAuthUrl() {
String url = googleAuthService.getAuthorizationUrl();
return ResponseEntity.ok(ApiResponse.ok(Map.of("url", url)));
}exchangeCode method · java · L87-L100 (14 LOC)src/main/java/com/dnxt/globaladmin/controller/GoogleAuthController.java
public ResponseEntity<ApiResponse> exchangeCode(@RequestBody Map<String, String> body) {
String code = body.get("code");
if (code == null || code.isBlank()) {
return ResponseEntity.badRequest().body(ApiResponse.error("SSO code is required"));
}
LoginResponse response = pendingTokens.remove(code);
if (response == null) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
.body(ApiResponse.error("Invalid or expired SSO code"));
}
return ResponseEntity.ok(ApiResponse.ok(response));
}exchangeToken method · java · L107-L133 (27 LOC)src/main/java/com/dnxt/globaladmin/controller/GoogleAuthController.java
public ResponseEntity<ApiResponse> exchangeToken(@RequestBody Map<String, String> body,
HttpServletRequest httpRequest) {
String code = body.get("code");
if (code == null || code.isBlank()) {
return ResponseEntity.badRequest().body(ApiResponse.error("Authorization code is required"));
}
try {
LoginResponse response = googleAuthService.handleCallback(code);
auditService.log(response.getUserId(), response.getUsername(),
"GOOGLE_SSO_LOGIN", "USER", response.getUserId(),
response.getEmail(), "Role: " + response.getRole(), httpRequest);
return ResponseEntity.ok(ApiResponse.ok(response));
} catch (SecurityException e) {
auditService.log("GOOGLE_SSO_REJECTED", e.getMessage(), httpRequest);
return ResponseEntity.status(HttpStatus.FORBIDDEN)
.body(ApiResponse.errorPlanController class · java · L12-L29 (18 LOC)src/main/java/com/dnxt/globaladmin/controller/PlanController.java
public class PlanController {
@Autowired
private ModulePlanRepository planRepository;
@GetMapping
@PermissionCheck("TENANT_VIEW")
public ResponseEntity<ApiResponse> getAllPlans() {
return ResponseEntity.ok(ApiResponse.ok(planRepository.findAll()));
}
@GetMapping("/{module}")
@PermissionCheck("TENANT_VIEW")
public ResponseEntity<ApiResponse> getPlansByModule(@PathVariable String module) {
return ResponseEntity.ok(ApiResponse.ok(
planRepository.findByModuleNameAndIsActiveTrueOrderBySortOrderAsc(module)));
}
}getAllPlans method · java · L19-L21 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/PlanController.java
public ResponseEntity<ApiResponse> getAllPlans() {
return ResponseEntity.ok(ApiResponse.ok(planRepository.findAll()));
}getPlansByModule method · java · L25-L28 (4 LOC)src/main/java/com/dnxt/globaladmin/controller/PlanController.java
public ResponseEntity<ApiResponse> getPlansByModule(@PathVariable String module) {
return ResponseEntity.ok(ApiResponse.ok(
planRepository.findByModuleNameAndIsActiveTrueOrderBySortOrderAsc(module)));
}Same scanner, your repo: https://repobility.com — Repobility
RoleController class · java · L12-L22 (11 LOC)src/main/java/com/dnxt/globaladmin/controller/RoleController.java
public class RoleController {
@Autowired
private AdminRoleRepository roleRepository;
@GetMapping
@PermissionCheck("USER_VIEW")
public ResponseEntity<ApiResponse> getAllRoles() {
return ResponseEntity.ok(ApiResponse.ok(roleRepository.findAll()));
}
}getAllRoles method · java · L19-L21 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/RoleController.java
public ResponseEntity<ApiResponse> getAllRoles() {
return ResponseEntity.ok(ApiResponse.ok(roleRepository.findAll()));
}TenantController class · java · L24-L219 (196 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public class TenantController {
@Autowired
private TenantService tenantService;
@Autowired
private AuditService auditService;
@Autowired
private SupportAccessService supportAccessService;
@GetMapping
@PermissionCheck("TENANT_VIEW")
public ResponseEntity<ApiResponse> getAllTenants() {
return ResponseEntity.ok(ApiResponse.ok(tenantService.getAllTenants()));
}
@GetMapping("/active")
@PermissionCheck("TENANT_VIEW")
public ResponseEntity<ApiResponse> getActiveTenants() {
return ResponseEntity.ok(ApiResponse.ok(tenantService.getActiveTenants()));
}
@GetMapping("/{tenantId}")
@PermissionCheck("TENANT_VIEW")
public ResponseEntity<ApiResponse> getTenant(@PathVariable String tenantId) {
try {
PlatformTenant tenant = tenantService.getTenant(tenantId);
List<TenantModule> modules = tenantService.getTenantModules(tenantId);
return ResponseEntity.ok(ApiResponse.ok(Map.getAllTenants method · java · L37-L39 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> getAllTenants() {
return ResponseEntity.ok(ApiResponse.ok(tenantService.getAllTenants()));
}getActiveTenants method · java · L43-L45 (3 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> getActiveTenants() {
return ResponseEntity.ok(ApiResponse.ok(tenantService.getActiveTenants()));
}getTenant method · java · L49-L57 (9 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> getTenant(@PathVariable String tenantId) {
try {
PlatformTenant tenant = tenantService.getTenant(tenantId);
List<TenantModule> modules = tenantService.getTenantModules(tenantId);
return ResponseEntity.ok(ApiResponse.ok(Map.of("tenant", tenant, "modules", modules)));
} catch (IllegalArgumentException e) {
return ResponseEntity.status(404).body(ApiResponse.error(e.getMessage()));
}
}createTenant method · java · L61-L73 (13 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> createTenant(@Valid @RequestBody TenantCreateRequest request,
Authentication auth,
HttpServletRequest httpRequest) {
try {
PlatformTenant tenant = tenantService.createTenant(request, auth.getName());
auditService.log(auth.getName(), null, "TENANT_CREATED",
"TENANT", tenant.getTenantId(), tenant.getTenantName(),
"Slug: " + tenant.getTenantSlug(), httpRequest);
return ResponseEntity.ok(ApiResponse.ok(tenant));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
}
}updateTenant method · java · L77-L89 (13 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> updateTenant(@PathVariable String tenantId,
@Valid @RequestBody TenantCreateRequest request,
Authentication auth,
HttpServletRequest httpRequest) {
try {
PlatformTenant tenant = tenantService.updateTenant(tenantId, request, auth.getName());
auditService.log(auth.getName(), null, "TENANT_UPDATED",
"TENANT", tenantId, tenant.getTenantName(), null, httpRequest);
return ResponseEntity.ok(ApiResponse.ok(tenant));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
}
}About: code-quality intelligence by Repobility · https://repobility.com
deactivateTenant method · java · L93-L106 (14 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> deactivateTenant(@PathVariable String tenantId,
Authentication auth,
HttpServletRequest httpRequest) {
try {
PlatformTenant tenant = tenantService.getTenant(tenantId);
tenantService.deactivateTenant(tenantId, auth.getName());
auditService.log(auth.getName(), null, "TENANT_DEACTIVATED",
"TENANT", tenantId, tenant.getTenantName(),
"All modules disabled", httpRequest);
return ResponseEntity.ok(ApiResponse.ok("Tenant deactivated"));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
}
}reactivateTenant method · java · L110-L122 (13 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> reactivateTenant(@PathVariable String tenantId,
Authentication auth,
HttpServletRequest httpRequest) {
try {
PlatformTenant tenant = tenantService.getTenant(tenantId);
tenantService.reactivateTenant(tenantId, auth.getName());
auditService.log(auth.getName(), null, "TENANT_REACTIVATED",
"TENANT", tenantId, tenant.getTenantName(), null, httpRequest);
return ResponseEntity.ok(ApiResponse.ok("Tenant reactivated"));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
}
}toggleModule method · java · L126-L141 (16 LOC)src/main/java/com/dnxt/globaladmin/controller/TenantController.java
public ResponseEntity<ApiResponse> toggleModule(@PathVariable String tenantId,
@PathVariable String moduleName,
@RequestBody Map<String, Boolean> body,
Authentication auth,
HttpServletRequest httpRequest) {
try {
boolean enabled = Boolean.TRUE.equals(body.get("enabled"));
TenantModule module = tenantService.toggleModule(tenantId, moduleName, enabled, auth.getName());
auditService.log(auth.getName(), null, enabled ? "MODULE_ENABLED" : "MODULE_DISABLED",
"MODULE", module.getModuleId(), moduleName,
"Tenant: " + tenantId, httpRequest);
return ResponseEntity.ok(ApiResponse.ok(module));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(Apage 1 / 4next ›