next-ims-lti-ssl
Version:
Next.js LTI middleware with SSL
2 lines (1 loc) • 1.43 kB
JavaScript
import d from"ims-lti";import S from"body-parser";import{useCookie as y}from"next-cookie";var l=(e,t)=>{let r=e.headers["x-forwarded-proto"]||(e.connection.encrypted?"https":"http");return e.protocol=r,e},u=async(e,t)=>new Promise(r=>{S.urlencoded({extended:!0})(e,t,()=>{S.json()(e,t,()=>{r({req:e,res:t})})})}),p=e=>{let t;try{return t=Buffer.from(Buffer.from(e).toString("base64")).toString("base64"),t}catch(r){return p(JSON.stringify({error:r}))}},x=e=>{let t;try{return t=Buffer.from(Buffer.from(e,"base64").toString(),"base64").toString(),t}catch(r){return JSON.stringify({error:r})}},h=({ctx:e,request:t,key:r,secret:f,persist:n,cookieOptions:s})=>new Promise(i=>{let c=new d.Provider(r,f);c.valid_request(t,(g,a)=>{let o=y(e);if(a){if(n){let m=p(JSON.stringify(c.body));o.set("HEp8hAsCelpLI3EX",m,{maxAge:1e3*60*60*24*365,path:"/",...s})}i(c.body)}else{if(n){let m=p(JSON.stringify({error:g}));o.set("HEp8hAsCelpLI3EX",m,{maxAge:1e3*60*60*24*365,path:"/",...s})}i({error:g})}})}),C=async({ctx:e,key:t,secret:r,persist:f,cookieOptions:n={}})=>{let{req:s,res:i}=e;if(s.method==="POST"){let a=l(s,i),{req:o}=await u(a,i);return await h({ctx:e,request:o,key:t,secret:r,persist:f,cookieOptions:n})}if(f){let a=y(e);try{return JSON.parse(x(a.get("HEp8hAsCelpLI3EX")))||{}}catch(o){return{error:o}}}let c=y(e),g=p(JSON.stringify({}));return c.set("HEp8hAsCelpLI3EX",g,{maxAge:0,path:"/",...n}),{}},k=C;export{k as default};