1 line
9.2 KiB
JavaScript
1 line
9.2 KiB
JavaScript
(()=>{var e={};e.id=3525,e.ids=[3525],e.modules={3295:e=>{"use strict";e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11723:e=>{"use strict";e.exports=require("querystring")},12269:(e,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0})},12412:e=>{"use strict";e.exports=require("assert")},14985:e=>{"use strict";e.exports=require("dns")},16743:(e,r,s)=>{"use strict";s.r(r),s.d(r,{patchFetch:()=>h,routeModule:()=>m,serverHooks:()=>g,workAsyncStorage:()=>_,workUnitAsyncStorage:()=>f});var t={};s.r(t),s.d(t,{GET:()=>d});var o=s(96559),a=s(48088),n=s(37719),i=s(32190),c=s(19854),l=s(26690),u=s(79464),p=s(36781);async function d(e){try{let e=await (0,c.getServerSession)(l.N);if(!e?.user?.id)return i.NextResponse.json({error:"Unauthorized"},{status:401});if(!e.user.role.includes("admin"))return i.NextResponse.json({error:"Admin access required"},{status:403});let r=(0,p.nr)(),s=await r.keys("email:credentials:*");console.log(`Found ${s.length} credential records in Redis`);let t={total:s.length,processed:0,success:0,errors:[]};for(let e of s){t.processed++;try{let s=e.split(":")[2];if(!s){t.errors.push(`Invalid key format: ${e}`);continue}let o=await r.get(e);if(!o){t.errors.push(`No data found for key: ${e}`);continue}let a=JSON.parse(o);console.log(`Processing credentials for user ${s}`,{email:a.email,host:a.host}),await u.z.user.findUnique({where:{id:s},select:{id:!0}})||(console.log(`User ${s} not found, creating placeholder`),await u.z.user.create({data:{id:s,email:a.email||"placeholder@example.com",password:"PLACEHOLDER_HASH_CHANGE_THIS"}}),console.log(`Created placeholder user ${s}`));let n=await u.z.mailCredentials.findFirst({where:{userId:s,email:a.email}});n?await u.z.mailCredentials.update({where:{id:n.id},data:{password:a.encryptedPassword||"encrypted_placeholder",host:a.host,port:a.port,...void 0!==a.secure&&{secure:a.secure},...a.smtp_host&&{smtp_host:a.smtp_host},...a.smtp_port&&{smtp_port:a.smtp_port},...void 0!==a.smtp_secure&&{smtp_secure:a.smtp_secure},...a.display_name&&{display_name:a.display_name},...a.color&&{color:a.color}}}):await u.z.mailCredentials.create({data:{userId:s,email:a.email,password:a.encryptedPassword||"encrypted_placeholder",host:a.host,port:a.port,...void 0!==a.secure&&{secure:a.secure},...a.smtp_host&&{smtp_host:a.smtp_host},...a.smtp_port&&{smtp_port:a.smtp_port},...void 0!==a.smtp_secure&&{smtp_secure:a.smtp_secure},...a.display_name&&{display_name:a.display_name},...a.color&&{color:a.color}}}),t.success++,console.log(`Successfully restored credentials for user ${s}`)}catch(s){let r=s instanceof Error?s.message:String(s);t.errors.push(`Error processing ${e}: ${r}`),console.error(`Error processing ${e}:`,s)}}return i.NextResponse.json({message:"Credential restoration process completed",results:t})}catch(e){return console.error("Error in restore credentials route:",e),i.NextResponse.json({error:"Failed to restore credentials",details:e instanceof Error?e.message:String(e)},{status:500})}}let m=new o.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/admin/restore-credentials/route",pathname:"/api/admin/restore-credentials",filename:"route",bundlePath:"app/api/admin/restore-credentials/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/admin/restore-credentials/route.ts",nextConfigOutput:"",userland:t}),{workAsyncStorage:_,workUnitAsyncStorage:f,serverHooks:g}=m;function h(){return(0,n.patchFetch)({workAsyncStorage:_,workUnitAsyncStorage:f})}},19854:(e,r,s)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var t={};Object.defineProperty(r,"default",{enumerable:!0,get:function(){return a.default}});var o=s(12269);Object.keys(o).forEach(function(e){!("default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e))&&(e in r&&r[e]===o[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return o[e]}}))});var a=function(e,r){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var s=n(r);if(s&&s.has(e))return s.get(e);var t={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&({}).hasOwnProperty.call(e,a)){var i=o?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(t,a,i):t[a]=e[a]}return t.default=e,s&&s.set(e,t),t}(s(35426));function n(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,s=new WeakMap;return(n=function(e){return e?s:r})(e)}Object.keys(a).forEach(function(e){!("default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e))&&(e in r&&r[e]===a[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return a[e]}}))})},21820:e=>{"use strict";e.exports=require("os")},25037:(e,r,s)=>{"use strict";s.d(r,{_:()=>o});var t=s(70762);let o=t.z.object({NODE_ENV:t.z.enum(["development","test","production"]).default("development"),DATABASE_URL:t.z.string().url(),NEWSDB_URL:t.z.string().regex(/^postgresql:\/\//,"Must be a valid PostgreSQL URL"),NEWS_API_URL:t.z.string().url(),KEYCLOAK_CLIENT_ID:t.z.string(),KEYCLOAK_CLIENT_SECRET:t.z.string(),KEYCLOAK_REALM:t.z.string(),KEYCLOAK_ISSUER:t.z.string().url(),LEANTIME_TOKEN:t.z.string(),LEANTIME_API_URL:t.z.string().url(),ROCKET_CHAT_TOKEN:t.z.string(),ROCKET_CHAT_USER_ID:t.z.string()}).parse(process.env)},26690:(e,r,s)=>{"use strict";s.d(r,{N:()=>i});var t=s(1926),o=s(10591);function a(e){let r=process.env[e];if(!r)throw Error(`Missing required environment variable: ${e}`);return r}async function n(e){try{let r=await fetch(`${process.env.KEYCLOAK_ISSUER}/protocol/openid-connect/token`,{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:process.env.KEYCLOAK_CLIENT_ID,client_secret:process.env.KEYCLOAK_CLIENT_SECRET,grant_type:"refresh_token",refresh_token:e.refreshToken||""}),method:"POST"}),s=await r.json();if(!r.ok)throw s;return{...e,accessToken:s.access_token,refreshToken:s.refresh_token??e.refreshToken,accessTokenExpires:Date.now()+1e3*s.expires_in}}catch(r){return console.error("Error refreshing access token:",r),{...e,error:"RefreshAccessTokenError"}}}let i={providers:[(0,t.A)({clientId:a("KEYCLOAK_CLIENT_ID"),clientSecret:a("KEYCLOAK_CLIENT_SECRET"),issuer:a("KEYCLOAK_ISSUER"),authorization:{params:{scope:"openid profile email roles"}},profile(e){console.log("Keycloak profile callback:",{rawProfile:e,rawRoles:e.roles,realmAccess:e.realm_access,groups:e.groups});let r=e.realm_access?.roles||[];console.log("Profile callback raw roles:",r);let s=r.map(e=>e.replace(/^ROLE_/,"").toLowerCase());return console.log("Profile callback cleaned roles:",s),{id:e.sub,name:e.name??e.preferred_username,email:e.email,first_name:e.given_name??"",last_name:e.family_name??"",username:e.preferred_username??e.email?.split("@")[0]??"",role:s}}})],session:{strategy:"jwt",maxAge:2592e3},callbacks:{async jwt({token:e,account:r,profile:s}){if(r&&s){let t=(s.realm_access?.roles||[]).map(e=>e.replace(/^ROLE_/,"").toLowerCase());e.accessToken=r.access_token??"",e.refreshToken=r.refresh_token??"",e.accessTokenExpires=r.expires_at??0,e.sub=s.sub,e.role=t,e.username=s.preferred_username??"",e.first_name=s.given_name??"",e.last_name=s.family_name??""}else if(e.accessToken)try{let r=(0,o.s)(e.accessToken);r.realm_access?.roles&&(e.role=r.realm_access.roles.map(e=>e.replace(/^ROLE_/,"").toLowerCase()))}catch(e){console.error("Error decoding token:",e)}return Date.now()<1e3*e.accessTokenExpires?e:n(e)},async session({session:e,token:r}){if(r.error)throw Error(r.error);let s=Array.isArray(r.role)?r.role:[];return e.user={id:r.sub??"",email:r.email??null,name:r.name??null,image:null,username:r.username??"",first_name:r.first_name??"",last_name:r.last_name??"",role:s,nextcloudInitialized:!1},e.accessToken=r.accessToken,e}},pages:{signIn:"/signin",error:"/signin"},debug:!1}},27910:e=>{"use strict";e.exports=require("stream")},28354:e=>{"use strict";e.exports=require("util")},29294:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},34631:e=>{"use strict";e.exports=require("tls")},41204:e=>{"use strict";e.exports=require("string_decoder")},44870:e=>{"use strict";e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:e=>{"use strict";e.exports=require("crypto")},55591:e=>{"use strict";e.exports=require("https")},63033:e=>{"use strict";e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},74075:e=>{"use strict";e.exports=require("zlib")},78335:()=>{},79428:e=>{"use strict";e.exports=require("buffer")},79464:(e,r,s)=>{"use strict";s.d(r,{z:()=>a});var t=s(96330),o=s(25037);let a=globalThis.prisma||new t.PrismaClient({datasources:{db:{url:o._.DATABASE_URL}},log:["query"]})},79551:e=>{"use strict";e.exports=require("url")},81630:e=>{"use strict";e.exports=require("http")},83997:e=>{"use strict";e.exports=require("tty")},91645:e=>{"use strict";e.exports=require("net")},94735:e=>{"use strict";e.exports=require("events")},96330:e=>{"use strict";e.exports=require("@prisma/client")},96487:()=>{}};var r=require("../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[4243,5419,580,8794,1642,762,6781],()=>s(16743));module.exports=t})(); |