@nocobase/plugin-auth 1.6.0-alpha.1 → 1.6.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- "use strict";(self.webpackChunk_nocobase_plugin_auth=self.webpackChunk_nocobase_plugin_auth||[]).push([["938"],{510:function(e,t,n){n.r(t),n.d(t,{Options:function(){return C},SignInForm:function(){return y},SignUpForm:function(){return P},useRedirect:function(){return m},useSignUp:function(){return O},useSignIn:function(){return f}});var r=n("772"),o=n("156"),i=n.n(o),a=n("573"),u=n("128"),c=n("505"),s=n(581);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}function m(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];var e,t,n=(0,u.useNavigate)();var r=(e=(0,u.useSearchParams)(),t=1,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(u)throw r}}return i}}(e,1)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return(0,o.useCallback)(function(){n(r.get("redirect")||"/admin",{replace:!0})},[n,r])}var f=function(e){var t=(0,c.useForm)(),n=(0,r.useAPIClient)(),o=m(),i=(0,r.useCurrentUserContext)().refreshAsync;return{run:function(){var r;return(r=function(){return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,function(r){switch(r.label){case 0:return[4,t.submit()];case 1:return r.sent(),[4,n.auth.signIn(t.values,e)];case 2:return r.sent(),[4,i()];case 3:return r.sent(),o(),[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){p(i,n,o,a,u,"next",e)}function u(e){p(i,n,o,a,u,"throw",e)}a(void 0)})})()}}},d={type:"object",name:"passwordForm","x-component":"FormV2",properties:{account:{type:"string","x-component":"Input","x-validator":'{{(value) => {\n if (!value) {\n return t("Please enter your username or email");\n }\n if (value.includes(\'@\')) {\n if (!/^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/.test(value)) {\n return t("Please enter a valid email");\n }\n } else {\n return /^[^@.<>"\'/]{1,50}$/.test(value) || t("Please enter a valid username");\n }\n }}}',"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Username/Email")}}',style:{}}},password:{type:"string","x-component":"Password",required:!0,"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Password")}}',style:{}}},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign in")}}',type:"void","x-component":"Action","x-component-props":{htmlType:"submit",block:!0,type:"primary",useAction:"{{ useBasicSignIn }}",style:{width:"100%"}}}}},signUp:{type:"void","x-component":"Link","x-component-props":{to:"{{ signUpLink }}"},"x-content":'{{t("Create an account")}}',"x-visible":"{{ allowSignUp }}"}}},y=function(e){var t=(0,a.o$)().t,o=e.authenticator,u=o.authType,c=o.name,l=o.options,p=!!(0,r.useLazy)(function(){return s("imported_-1ja1ffa_component",n.e("280").then(n.bind(n,492)))},"useSignUpForms")()[u]&&null!=l&&!!l.allowSignUp,m="/signup?name=".concat(c);return i().createElement(r.SchemaComponent,{schema:d,scope:{useBasicSignIn:function(){return f(c)},allowSignUp:p,signUpLink:m,t:t}})},b=n("875"),v=n("721"),h=n("238"),g=n("308");function w(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,i;r=e,o=t,i=n[t],o in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i})}return e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var O=function(e){var t=(0,u.useNavigate)(),n=(0,c.useForm)(),o=(0,r.useAPIClient)(),i=(0,h.useTranslation)().t;return{run:function(){var r;return(r=function(){var r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,function(a){switch(a.label){case 0:return[4,n.submit()];case 1:return a.sent(),[4,o.auth.signUp(n.values,null==e?void 0:e.authenticator)];case 2:return a.sent(),v.message.success((null==e?void 0:null===(r=e.message)||void 0===r?void 0:r.success)||i("Sign up successfully, and automatically jump to the sign in page")),setTimeout(function(){t("/signin")},2e3),[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){w(i,n,o,a,u,"next",e)}function u(e){w(i,n,o,a,u,"throw",e)}a(void 0)})})()}}},P=function(e){var t,n=e.authenticatorName,c=(0,a.o$)().t,s=(0,g.u)(n).options,l=s.signupForm,p=(0,o.useMemo)(function(){return l.filter(function(e){return e.show}).reduce(function(e,t){return e[t.field]=S(x({},t.uiSchema),{required:t.required,"x-decorator":"FormItem"}),e},{})},[l]);if(!(null==s?void 0:s.allowSignUp))return i().createElement(u.Navigate,{to:"/not-found",replace:!0});var m=(t=p,{type:"object",name:(0,b.uid)(),"x-component":"FormV2",properties:S(x({},t),{password:{type:"string",required:!0,title:'{{t("Password")}}',"x-component":"Password","x-decorator":"FormItem","x-component-props":{checkStrength:!0,style:{}},"x-reactions":[{dependencies:[".confirm_password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},confirm_password:{type:"string",required:!0,"x-component":"Password","x-decorator":"FormItem",title:'{{t("Confirm password")}}',"x-component-props":{style:{}},"x-reactions":[{dependencies:[".password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign up")}}',type:"void","x-component":"Action","x-component-props":{block:!0,type:"primary",htmlType:"submit",useAction:"{{ useBasicSignUp }}",style:{width:"100%"}}}}},link:{type:"void","x-component":"div",properties:{link:{type:"void","x-component":"Link","x-component-props":{to:"/signin"},"x-content":'{{t("Log in with an existing account")}}'}}}})});return i().createElement(r.SchemaComponent,{schema:m,scope:{useBasicSignUp:function(){return O({authenticator:n})},t:c}})},j=n("632");function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function F(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){k(e,t,n[t])})}return e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var I=function(){var e=(0,r.useRecord)(),t=(0,r.useCollectionManager)().getCollection("users").fields.filter(function(e){var t;return!e.hidden&&!e.target&&e.interface&&!(null===(t=e.uiSchema)||void 0===t?void 0:t["x-read-pretty"])}),n=t.map(function(e){var t;return{value:e.name,label:null===(t=e.uiSchema)||void 0===t?void 0:t.title}}),u=(0,o.useMemo)(function(){var n=((null===(u=e.options)||void 0===u?void 0:null===(a=u.public)||void 0===a?void 0:a.signupForm)||[]).filter(function(e){return t.find(function(t){return t.name===e.field})}),r=!0,o=!1,i=void 0;try{for(var a,u,c,s=t[Symbol.iterator]();!(r=(c=s.next()).done);r=!0)!function(){var e=c.value;!n.find(function(t){return t.field===e.name})&&n.push({field:e.name,show:"username"===e.name,required:"username"===e.name})}()}catch(e){o=!0,i=e}finally{try{!r&&null!=s.return&&s.return()}finally{if(o)throw i}}return n},[t,e]);return(0,o.useEffect)(function(){var t;e.options=A(F({},e.options),{public:A(F({},null===(t=e.options)||void 0===t?void 0:t.public),{signupForm:u})})},[e,u]),i().createElement(r.SchemaComponent,{components:{ArrayTable:j.ArrayTable},schema:{type:"void",properties:{signupForm:{title:'{{t("Sign up form")}}',type:"array","x-decorator":"FormItem","x-component":"ArrayTable","x-component-props":{bordered:!1},"x-validator":"{{ (value) => {\n const check = value?.some((item) => ['username', 'email'].includes(item.field) && item.show && item.required);\n if (!check) {\n return t('At least one of the username or email fields is required');\n }\n} }}",default:u,items:{type:"object","x-decorator":"ArrayItems.Item",properties:{column0:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:20,align:"center"},properties:{sort:{type:"void","x-component":"ArrayTable.SortHandle"}}},column1:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:100,title:(0,a.KQ)("Field")},properties:{field:{type:"string","x-decorator":"FormItem","x-component":"Select",enum:n,"x-read-pretty":!0}}},column2:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:80,title:(0,a.KQ)("Show")},properties:{show:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-reactions":{dependencies:[".required"],fulfill:{state:{value:"{{ $deps[0] || $self.value }}"}}}}}},column3:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:80,title:(0,a.KQ)("Required")},properties:{required:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-reactions":{dependencies:[".show"],fulfill:{state:{value:"{{ !$deps[0] ? false : $self.value }}"}}}}}}}}}}}})},C=function(){var e=(0,a.o$)().t;return i().createElement(r.SchemaComponent,{scope:{t:e},components:{Alert:v.Alert,SignupFormSettings:I,FormTab:j.FormTab},schema:{type:"object",properties:{notice:{type:"void","x-decorator":"FormItem","x-component":"Alert","x-component-props":{showIcon:!0,message:'{{t("The authentication allows users to sign in via username or email.")}}'}},public:{type:"object",properties:{collapse:{type:"void","x-component":"FormTab",properties:{basic:{type:"void","x-component":"FormTab.TabPane","x-component-props":{tab:(0,a.KQ)("Sign up settings")},properties:k({allowSignUp:{"x-decorator":"FormItem",type:"boolean",title:'{{t("Allow to sign up")}}',"x-component":"Checkbox",default:!0}},(0,b.uid)(),{type:"void","x-component":"SignupFormSettings"})}}}}}}}})}}}]);
10
+ "use strict";(self.webpackChunk_nocobase_plugin_auth=self.webpackChunk_nocobase_plugin_auth||[]).push([["938"],{510:function(e,t,n){n.r(t),n.d(t,{Options:function(){return C},SignInForm:function(){return y},SignUpForm:function(){return P},useRedirect:function(){return m},useSignUp:function(){return O},useSignIn:function(){return f}});var r=n("772"),o=n("156"),i=n.n(o),a=n("573"),u=n("128"),c=n("505"),s=n(581);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}function m(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];var e,t,n=(0,u.useNavigate)();var r=(e=(0,u.useSearchParams)(),t=1,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{!a&&null!=o.return&&o.return()}finally{if(u)throw r}}return i}}(e,1)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return(0,o.useCallback)(function(){n(r.get("redirect")||"/admin",{replace:!0})},[n,r])}var f=function(e){var t=(0,c.useForm)(),n=(0,r.useAPIClient)(),o=m(),i=(0,r.useCurrentUserContext)().refreshAsync;return{run:function(){var r;return(r=function(){return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,function(r){switch(r.label){case 0:return[4,t.submit()];case 1:return r.sent(),[4,n.auth.signIn(t.values,e)];case 2:return r.sent(),[4,i()];case 3:return r.sent(),o(),[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){p(i,n,o,a,u,"next",e)}function u(e){p(i,n,o,a,u,"throw",e)}a(void 0)})})()}}},d={type:"object",name:"passwordForm","x-component":"FormV2",properties:{account:{type:"string","x-component":"Input","x-validator":'{{(value) => {\n if (!value) {\n return t("Please enter your username or email");\n }\n if (value.includes(\'@\')) {\n if (!/^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/.test(value)) {\n return t("Please enter a valid email");\n }\n } else {\n return /^[^@.<>"\'/]{1,50}$/.test(value) || t("Please enter a valid username");\n }\n }}}',"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Username/Email")}}',style:{}}},password:{type:"string","x-component":"Password",required:!0,"x-decorator":"FormItem","x-component-props":{placeholder:'{{t("Password")}}',style:{}}},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign in")}}',type:"void","x-component":"Action","x-component-props":{htmlType:"submit",block:!0,type:"primary",useAction:"{{ useBasicSignIn }}",style:{width:"100%"}}}}},signUp:{type:"void","x-component":"Link","x-component-props":{to:"{{ signUpLink }}"},"x-content":'{{t("Create an account")}}',"x-visible":"{{ allowSignUp }}"}}},y=function(e){var t=(0,a.o$)().t,o=e.authenticator,u=o.authType,c=o.name,l=o.options,p=!!(0,r.useLazy)(function(){return s("imported_-1ja1ffa_component",n.e("280").then(n.bind(n,492)))},"useSignUpForms")()[u]&&null!=l&&!!l.allowSignUp,m="/signup?name=".concat(c);return i().createElement(r.SchemaComponent,{schema:d,scope:{useBasicSignIn:function(){return f(c)},allowSignUp:p,signUpLink:m,t:t}})},b=n("875"),v=n("721"),h=n("238"),g=n("308");function w(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r,o,i;r=e,o=t,i=n[t],o in r?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i})}return e}function S(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var O=function(e){var t=(0,u.useNavigate)(),n=(0,c.useForm)(),o=(0,r.useAPIClient)(),i=(0,h.useTranslation)().t;return{run:function(){var r;return(r=function(){var r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,function(a){switch(a.label){case 0:return[4,n.submit()];case 1:return a.sent(),[4,o.auth.signUp(n.values,null==e?void 0:e.authenticator)];case 2:return a.sent(),v.message.success((null==e?void 0:null===(r=e.message)||void 0===r?void 0:r.success)||i("Sign up successfully, and automatically jump to the sign in page")),setTimeout(function(){t("/signin")},2e3),[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){w(i,n,o,a,u,"next",e)}function u(e){w(i,n,o,a,u,"throw",e)}a(void 0)})})()}}},P=function(e){var t,n=e.authenticatorName,c=(0,a.o$)().t,s=(0,g.u)(n).options,l=s.signupForm,p=(0,o.useMemo)(function(){return l.filter(function(e){return e.show}).reduce(function(e,t){return e[t.field]=S(x({},t.uiSchema),{required:t.required,"x-decorator":"FormItem"}),e},{})},[l]);if(!(null==s?void 0:s.allowSignUp))return i().createElement(u.Navigate,{to:"/not-found",replace:!0});var m=(t=p,{type:"object",name:(0,b.uid)(),"x-component":"FormV2",properties:S(x({},t),{password:{type:"string",required:!0,title:'{{t("Password")}}',"x-component":"Password","x-decorator":"FormItem","x-validator":{password:!0},"x-component-props":{checkStrength:!0,style:{}},"x-reactions":[{dependencies:[".confirm_password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},confirm_password:{type:"string",required:!0,"x-component":"Password","x-decorator":"FormItem",title:'{{t("Confirm password")}}',"x-validator":{password:!0},"x-component-props":{style:{}},"x-reactions":[{dependencies:[".password"],fulfill:{state:{selfErrors:'{{$deps[0] && $self.value && $self.value !== $deps[0] ? t("Password mismatch") : ""}}'}}}]},actions:{type:"void","x-component":"div",properties:{submit:{title:'{{t("Sign up")}}',type:"void","x-component":"Action","x-component-props":{block:!0,type:"primary",htmlType:"submit",useAction:"{{ useBasicSignUp }}",style:{width:"100%"}}}}},link:{type:"void","x-component":"div",properties:{link:{type:"void","x-component":"Link","x-component-props":{to:"/signin"},"x-content":'{{t("Log in with an existing account")}}'}}}})});return i().createElement(r.SchemaComponent,{schema:m,scope:{useBasicSignUp:function(){return O({authenticator:n})},t:c}})},j=n("632");function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function F(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){k(e,t,n[t])})}return e}function A(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}var I=function(){var e=(0,r.useRecord)(),t=(0,r.useCollectionManager)().getCollection("users").fields.filter(function(e){var t;return!e.hidden&&!e.target&&e.interface&&!(null===(t=e.uiSchema)||void 0===t?void 0:t["x-read-pretty"])}),n=t.map(function(e){var t;return{value:e.name,label:null===(t=e.uiSchema)||void 0===t?void 0:t.title}}),u=(0,o.useMemo)(function(){var n=((null===(u=e.options)||void 0===u?void 0:null===(a=u.public)||void 0===a?void 0:a.signupForm)||[]).filter(function(e){return t.find(function(t){return t.name===e.field})}),r=!0,o=!1,i=void 0;try{for(var a,u,c,s=t[Symbol.iterator]();!(r=(c=s.next()).done);r=!0)!function(){var e=c.value;!n.find(function(t){return t.field===e.name})&&n.push({field:e.name,show:"username"===e.name,required:"username"===e.name})}()}catch(e){o=!0,i=e}finally{try{!r&&null!=s.return&&s.return()}finally{if(o)throw i}}return n},[t,e]);return(0,o.useEffect)(function(){var t;e.options=A(F({},e.options),{public:A(F({},null===(t=e.options)||void 0===t?void 0:t.public),{signupForm:u})})},[e,u]),i().createElement(r.SchemaComponent,{components:{ArrayTable:j.ArrayTable},schema:{type:"void",properties:{signupForm:{title:'{{t("Sign up form")}}',type:"array","x-decorator":"FormItem","x-component":"ArrayTable","x-component-props":{bordered:!1},"x-validator":"{{ (value) => {\n const check = value?.some((item) => ['username', 'email'].includes(item.field) && item.show && item.required);\n if (!check) {\n return t('At least one of the username or email fields is required');\n }\n} }}",default:u,items:{type:"object","x-decorator":"ArrayItems.Item",properties:{column0:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:20,align:"center"},properties:{sort:{type:"void","x-component":"ArrayTable.SortHandle"}}},column1:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:100,title:(0,a.KQ)("Field")},properties:{field:{type:"string","x-decorator":"FormItem","x-component":"Select",enum:n,"x-read-pretty":!0}}},column2:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:80,title:(0,a.KQ)("Show")},properties:{show:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-reactions":{dependencies:[".required"],fulfill:{state:{value:"{{ $deps[0] || $self.value }}"}}}}}},column3:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:80,title:(0,a.KQ)("Required")},properties:{required:{type:"boolean","x-decorator":"FormItem","x-component":"Checkbox","x-reactions":{dependencies:[".show"],fulfill:{state:{value:"{{ !$deps[0] ? false : $self.value }}"}}}}}}}}}}}})},C=function(){var e=(0,a.o$)().t;return i().createElement(r.SchemaComponent,{scope:{t:e},components:{Alert:v.Alert,SignupFormSettings:I,FormTab:j.FormTab},schema:{type:"object",properties:{notice:{type:"void","x-decorator":"FormItem","x-component":"Alert","x-component-props":{showIcon:!0,message:'{{t("The authentication allows users to sign in via username or email.")}}'}},public:{type:"object",properties:{collapse:{type:"void","x-component":"FormTab",properties:{basic:{type:"void","x-component":"FormTab.TabPane","x-component-props":{tab:(0,a.KQ)("Sign up settings")},properties:k({allowSignUp:{"x-decorator":"FormItem",type:"boolean",title:'{{t("Allow to sign up")}}',"x-component":"Checkbox",default:!0}},(0,b.uid)(),{type:"void","x-component":"SignupFormSettings"})}}}}}}}})}}}]);
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react-i18next"),require("@formily/antd-v5"),require("@formily/shared"),require("@nocobase/utils/client"),require("@nocobase/client"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("react-router-dom"),require("react"),require("@emotion/css")):"function"==typeof define&&define.amd?define("@nocobase/plugin-auth",["react-i18next","@formily/antd-v5","@formily/shared","@nocobase/utils/client","@nocobase/client","antd","@ant-design/icons","@formily/react","react-router-dom","react","@emotion/css"],e):"object"==typeof exports?exports["@nocobase/plugin-auth"]=e(require("react-i18next"),require("@formily/antd-v5"),require("@formily/shared"),require("@nocobase/utils/client"),require("@nocobase/client"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("react-router-dom"),require("react"),require("@emotion/css")):t["@nocobase/plugin-auth"]=e(t["react-i18next"],t["@formily/antd-v5"],t["@formily/shared"],t["@nocobase/utils/client"],t["@nocobase/client"],t.antd,t["@ant-design/icons"],t["@formily/react"],t["react-router-dom"],t.react,t["@emotion/css"])}(self,function(t,e,n,r,o,i,u,c,a,s,f){return function(){var l,p,d,h,y,b={437:function(t,e,n){"use strict";n.r(e),n.d(e,{AuthLayout:function(){return q},useSignIn:function(){return j},PluginAuthClient:function(){return O},AuthenticatorsContextProvider:function(){return k},default:function(){return C},AuthenticatorsContext:function(){return u.H},useAuthenticator:function(){return u.u}});var r=n("772"),o=n("584"),i=n("573"),u=n("308"),c=n(581);function a(t,e,n,r,o,i,u){try{var c=t[i](u),a=c.value}catch(t){n(t);return}c.done?e(a):Promise.resolve(a).then(r,o)}function s(t,e,n){return(s=h()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var o=new(Function.bind.apply(t,r));return n&&p(o,n.prototype),o}).apply(null,arguments)}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function l(t){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function p(t,e){return(p=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function d(t){var e="function"==typeof Map?new Map:void 0;return(d=function(t){var n;if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;if("function"!=typeof t)throw TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return s(t,arguments,l(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),p(r,t)})(t)}function h(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(h=function(){return!!t})()}var y=(0,r.lazy)(function(){return c("imported_gs6osn_component",n.e("890").then(n.bind(n,387)))},"AuthProvider").AuthProvider,b=(0,r.lazy)(function(){return c("imported_kl5khg_component",n.e("938").then(n.bind(n,510)))},"Options","SignInForm","SignUpForm"),m=b.Options,g=b.SignInForm,v=b.SignUpForm,_=(0,r.lazy)(function(){return c("imported_-1ja1ffa_component",n.e("280").then(n.bind(n,492)))},"AuthLayout","SignInPage","SignUpPage"),x=_.AuthLayout,S=_.SignInPage,P=_.SignUpPage,A=(0,r.lazy)(function(){return c("imported_10vpsc8_component",n.e("851").then(n.bind(n,264)))},"Authenticator").Authenticator,w=(0,r.lazy)(function(){return c("imported_-1ja1ffa_component",n.e("280").then(n.bind(n,492)))},"AuthenticatorsContextProvider","AuthLayout"),k=w.AuthenticatorsContextProvider,q=w.AuthLayout,O=function(t){var e,n,r;function u(){var t,e,n,r,i,c,a;return!function(t,e){if(!(t instanceof e))throw TypeError("Cannot call a class as a function")}(this,u),e=this,n=u,r=arguments,n=l(n),i=t=function(t,e){return e&&("object"===function(t){return t&&"undefined"!=typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}(e)||"function"==typeof e)?e:function(t){if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(e,h()?Reflect.construct(n,r||[],l(e).constructor):n.apply(e,r)),c="authTypes",a=new o.Registry,c in i?Object.defineProperty(i,c,{value:a,enumerable:!0,configurable:!0,writable:!0}):i[c]=a,t}return!function(t,e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&p(t,e)}(u,t),e=u,n=[{key:"registerType",value:function(t,e){this.authTypes.register(t,e)}},{key:"load",value:function(){var t,e=this;return(t=function(){return function(t,e){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=e.call(t,u)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}(this,function(t){return e.app.pluginSettingsManager.add(i.A7,{icon:"LoginOutlined",title:'{{t("Authentication", { ns: "'.concat(i.A7,'" })}}'),Component:A,aclSnippet:"pm.auth.authenticators"}),e.router.add("auth",{Component:"AuthLayout"}),e.router.add("auth.signin",{path:"/signin",Component:"SignInPage"}),e.router.add("auth.signup",{path:"/signup",Component:"SignUpPage"}),e.app.addComponents({AuthLayout:x,SignInPage:S,SignUpPage:P}),e.app.providers.unshift([y,{}]),e.registerType("Email/Password",{components:{SignInForm:g,SignUpForm:v,AdminSettingsForm:m}}),[2]})},function(){var e=this,n=arguments;return new Promise(function(r,o){var i=t.apply(e,n);function u(t){a(i,r,o,u,c,"next",t)}function c(t){a(i,r,o,u,c,"throw",t)}u(void 0)})})()}}],f(e.prototype,n),u}(d(r.Plugin)),j=function(t){return(0,r.useLazy)(function(){return c("imported_kl5khg_component",n.e("938").then(n.bind(n,510)))},"useSignIn")(t)},C=O},308:function(t,e,n){"use strict";n.d(e,{H:function(){return o},u:function(){return i}});var r=n(156),o=(0,r.createContext)([]);o.displayName="AuthenticatorsContext";var i=function(t){return(0,r.useContext)(o).find(function(e){return e.name===t})}},573:function(t,e,n){"use strict";n.d(e,{A7:function(){return i},KQ:function(){return c},o$:function(){return u}});var r=n(238),o=n(772),i="auth";function u(){return(0,r.useTranslation)([i,"client"],{nsMode:"fallback"})}function c(t){return o.i18n.t(t,{ns:[i,"client"],nsMode:"fallback"})}},581:function(t){t.exports=function(t,e){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(t,e),e}},482:function(t){"use strict";t.exports=u},964:function(t){"use strict";t.exports=f},632:function(t){"use strict";t.exports=e},505:function(t){"use strict";t.exports=c},875:function(t){"use strict";t.exports=n},772:function(t){"use strict";t.exports=o},584:function(t){"use strict";t.exports=r},721:function(t){"use strict";t.exports=i},156:function(t){"use strict";t.exports=s},238:function(e){"use strict";e.exports=t},128:function(t){"use strict";t.exports=a}},m={};function g(t){var e=m[t];if(void 0!==e)return e.exports;var n=m[t]={exports:{}};return b[t](n,n.exports,g),n.exports}return g.m=b,g.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return g.d(e,{a:e}),e},g.d=function(t,e){for(var n in e)g.o(e,n)&&!g.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},g.f={},g.e=function(t){return Promise.all(Object.keys(g.f).reduce(function(e,n){return g.f[n](t,e),e},[]))},g.u=function(t){return""+t+".index.js"},g.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},l={},p="@nocobase/plugin-auth:",g.l=function(t,e,n,r){if(l[t]){l[t].push(e);return}if(void 0!==n){for(var o,i,u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var a=u[c];if(a.getAttribute("src")==t||a.getAttribute("data-webpack")==p+n){o=a;break}}}!o&&(i=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,g.nc&&o.setAttribute("nonce",g.nc),o.setAttribute("data-webpack",p+n),o.src=t),l[t]=[e];var s=function(e,n){o.onerror=o.onload=null,clearTimeout(f);var r=l[t];if(delete l[t],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(t){return t(n)}),e)return e(n)},f=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),i&&document.head.appendChild(o)},g.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},g.p="/static/plugins/@nocobase/plugin-auth/dist/client/",d={909:0},g.f.j=function(t,e){var n=g.o(d,t)?d[t]:void 0;if(0!==n){if(n)e.push(n[2]);else{var r=new Promise(function(e,r){n=d[t]=[e,r]});e.push(n[2]=r);var o=g.p+g.u(t),i=Error();g.l(o,function(e){if(g.o(d,t)&&(0!==(n=d[t])&&(d[t]=void 0),n)){var r=e&&("load"===e.type?"missing":e.type),o=e&&e.target&&e.target.src;i.message="Loading chunk "+t+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+t,t)}}},h=function(t,e){var n=e[0],r=e[1],o=e[2],i,u,c=0;if(n.some(function(t){return 0!==d[t]})){for(i in r)g.o(r,i)&&(g.m[i]=r[i]);o&&o(g)}for(t&&t(e);c<n.length;c++)u=n[c],g.o(d,u)&&d[u]&&d[u][0](),d[u]=0},(y=self.webpackChunk_nocobase_plugin_auth=self.webpackChunk_nocobase_plugin_auth||[]).forEach(h.bind(null,0)),y.push=h.bind(null,y.push.bind(y)),g("437")}()});
10
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("react-i18next"),require("@formily/antd-v5"),require("@formily/shared"),require("@nocobase/utils/client"),require("@nocobase/client"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("react-router-dom"),require("react"),require("@emotion/css")):"function"==typeof define&&define.amd?define("@nocobase/plugin-auth",["react-i18next","@formily/antd-v5","@formily/shared","@nocobase/utils/client","@nocobase/client","antd","@ant-design/icons","@formily/react","react-router-dom","react","@emotion/css"],e):"object"==typeof exports?exports["@nocobase/plugin-auth"]=e(require("react-i18next"),require("@formily/antd-v5"),require("@formily/shared"),require("@nocobase/utils/client"),require("@nocobase/client"),require("antd"),require("@ant-design/icons"),require("@formily/react"),require("react-router-dom"),require("react"),require("@emotion/css")):t["@nocobase/plugin-auth"]=e(t["react-i18next"],t["@formily/antd-v5"],t["@formily/shared"],t["@nocobase/utils/client"],t["@nocobase/client"],t.antd,t["@ant-design/icons"],t["@formily/react"],t["react-router-dom"],t.react,t["@emotion/css"])}(self,function(t,e,n,r,o,i,u,c,a,s,f){return function(){var l,p,d,h,b,y,m={437:function(t,e,n){"use strict";n.r(e),n.d(e,{AuthLayout:function(){return j},useSignIn:function(){return O},PluginAuthClient:function(){return q},AuthenticatorsContextProvider:function(){return k},default:function(){return C},AuthenticatorsContext:function(){return u.H},useAuthenticator:function(){return u.u}});var r=n("772"),o=n("584"),i=n("573"),u=n("308"),c=n(581);function a(t,e,n,r,o,i,u){try{var c=t[i](u),a=c.value}catch(t){n(t);return}c.done?e(a):Promise.resolve(a).then(r,o)}function s(t,e,n){return(s=h()?Reflect.construct:function(t,e,n){var r=[null];r.push.apply(r,e);var o=new(Function.bind.apply(t,r));return n&&p(o,n.prototype),o}).apply(null,arguments)}function f(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function l(t){return(l=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function p(t,e){return(p=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function d(t){var e="function"==typeof Map?new Map:void 0;return(d=function(t){var n;if(null===t||(n=t,-1===Function.toString.call(n).indexOf("[native code]")))return t;if("function"!=typeof t)throw TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return s(t,arguments,l(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),p(r,t)})(t)}function h(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(h=function(){return!!t})()}var b=(0,r.lazy)(function(){return c("imported_gs6osn_component",n.e("890").then(n.bind(n,387)))},"AuthProvider").AuthProvider,y=(0,r.lazy)(function(){return c("imported_kl5khg_component",n.e("938").then(n.bind(n,510)))},"Options","SignInForm","SignUpForm"),m=y.Options,g=y.SignInForm,v=y.SignUpForm,_=(0,r.lazy)(function(){return c("imported_-1ja1ffa_component",n.e("280").then(n.bind(n,492)))},"AuthLayout","SignInPage","SignUpPage"),x=_.AuthLayout,w=_.SignInPage,S=_.SignUpPage,P=(0,r.lazy)(function(){return c("imported_10vpsc8_component",n.e("851").then(n.bind(n,264)))},"Authenticator").Authenticator,A=(0,r.lazy)(function(){return c("imported_-1ja1ffa_component",n.e("280").then(n.bind(n,492)))},"AuthenticatorsContextProvider","AuthLayout"),k=A.AuthenticatorsContextProvider,j=A.AuthLayout,q=function(t){var e,n,r;function u(){var t,e,n,r,i,c,a;return!function(t,e){if(!(t instanceof e))throw TypeError("Cannot call a class as a function")}(this,u),e=this,n=u,r=arguments,n=l(n),i=t=function(t,e){return e&&("object"===function(t){return t&&"undefined"!=typeof Symbol&&t.constructor===Symbol?"symbol":typeof t}(e)||"function"==typeof e)?e:function(t){if(void 0===t)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(e,h()?Reflect.construct(n,r||[],l(e).constructor):n.apply(e,r)),c="authTypes",a=new o.Registry,c in i?Object.defineProperty(i,c,{value:a,enumerable:!0,configurable:!0,writable:!0}):i[c]=a,t}return!function(t,e){if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&p(t,e)}(u,t),e=u,n=[{key:"registerType",value:function(t,e){this.authTypes.register(t,e)}},{key:"load",value:function(){var t,e=this;return(t=function(){return function(t,e){var n,r,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw TypeError("Generator is already executing.");for(;u;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,r=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!(o=(o=u.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){u.label=i[1];break}if(6===i[0]&&u.label<o[1]){u.label=o[1],o=i;break}if(o&&u.label<o[2]){u.label=o[2],u.ops.push(i);break}o[2]&&u.ops.pop(),u.trys.pop();continue}i=e.call(t,u)}catch(t){i=[6,t],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}(this,function(t){return e.app.pluginSettingsManager.add(i.A7,{icon:"LoginOutlined",title:'{{t("Authentication", { ns: "'.concat(i.A7,'" })}}'),Component:P,aclSnippet:"pm.auth.authenticators"}),e.router.add("auth",{Component:"AuthLayout"}),e.router.add("auth.signin",{path:"/signin",Component:"SignInPage"}),e.router.add("auth.signup",{path:"/signup",Component:"SignUpPage"}),e.app.addComponents({AuthLayout:x,SignInPage:w,SignUpPage:S}),e.app.providers.unshift([b,{}]),e.registerType("Email/Password",{components:{SignInForm:g,SignUpForm:v,AdminSettingsForm:m}}),[2]})},function(){var e=this,n=arguments;return new Promise(function(r,o){var i=t.apply(e,n);function u(t){a(i,r,o,u,c,"next",t)}function c(t){a(i,r,o,u,c,"throw",t)}u(void 0)})})()}}],f(e.prototype,n),u}(d(r.Plugin)),O=function(t){return(0,r.useLazy)(function(){return c("imported_kl5khg_component",n.e("938").then(n.bind(n,510)))},"useSignIn")(t)},C=q},308:function(t,e,n){"use strict";n.d(e,{H:function(){return o},u:function(){return i}});var r=n(156),o=(0,r.createContext)([]);o.displayName="AuthenticatorsContext";var i=function(t){return(0,r.useContext)(o).find(function(e){return e.name===t})}},573:function(t,e,n){"use strict";n.d(e,{A7:function(){return i},KQ:function(){return c},o$:function(){return u}});var r=n(238),o=n(772),i="auth";function u(){return(0,r.useTranslation)([i,"client"],{nsMode:"fallback"})}function c(t){return o.i18n.t(t,{ns:[i,"client"],nsMode:"fallback"})}},581:function(t){t.exports=function(t,e){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(t,e),e}},482:function(t){"use strict";t.exports=u},964:function(t){"use strict";t.exports=f},632:function(t){"use strict";t.exports=e},505:function(t){"use strict";t.exports=c},875:function(t){"use strict";t.exports=n},772:function(t){"use strict";t.exports=o},584:function(t){"use strict";t.exports=r},721:function(t){"use strict";t.exports=i},156:function(t){"use strict";t.exports=s},238:function(e){"use strict";e.exports=t},128:function(t){"use strict";t.exports=a}},g={};function v(t){var e=g[t];if(void 0!==e)return e.exports;var n=g[t]={exports:{}};return m[t](n,n.exports,v),n.exports}return v.m=m,v.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return v.d(e,{a:e}),e},v.d=function(t,e){for(var n in e)v.o(e,n)&&!v.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},v.f={},v.e=function(t){return Promise.all(Object.keys(v.f).reduce(function(e,n){return v.f[n](t,e),e},[]))},v.u=function(t){return""+({280:"6992b2fd9b0275b1",851:"1c5e32ff8bef5e4a",890:"43e9587ca4936ffe",938:"0091d4359312cb07"})[t]+".js"},v.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),v.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},l={},p="@nocobase/plugin-auth:",v.l=function(t,e,n,r){if(l[t]){l[t].push(e);return}if(void 0!==n){for(var o,i,u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var a=u[c];if(a.getAttribute("src")==t||a.getAttribute("data-webpack")==p+n){o=a;break}}}!o&&(i=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,v.nc&&o.setAttribute("nonce",v.nc),o.setAttribute("data-webpack",p+n),o.src=t),l[t]=[e];var s=function(e,n){o.onerror=o.onload=null,clearTimeout(f);var r=l[t];if(delete l[t],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(t){return t(n)}),e)return e(n)},f=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),i&&document.head.appendChild(o)},v.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},v.p=(!(d=window.__nocobase_public_path__||"/").endsWith("/")&&(d+="/"),d+"static/plugins/@nocobase/plugin-auth/dist/client/"),h={909:0},v.f.j=function(t,e){var n=v.o(h,t)?h[t]:void 0;if(0!==n){if(n)e.push(n[2]);else{var r=new Promise(function(e,r){n=h[t]=[e,r]});e.push(n[2]=r);var o=v.p+v.u(t),i=Error();v.l(o,function(e){if(v.o(h,t)&&(0!==(n=h[t])&&(h[t]=void 0),n)){var r=e&&("load"===e.type?"missing":e.type),o=e&&e.target&&e.target.src;i.message="Loading chunk "+t+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+t,t)}}},b=function(t,e){var n=e[0],r=e[1],o=e[2],i,u,c=0;if(n.some(function(t){return 0!==h[t]})){for(i in r)v.o(r,i)&&(v.m[i]=r[i]);o&&o(v)}for(t&&t(e);c<n.length;c++)u=n[c],v.o(h,u)&&h[u]&&h[u][0](),h[u]=0},(y=self.webpackChunk_nocobase_plugin_auth=self.webpackChunk_nocobase_plugin_auth||[]).forEach(b.bind(null,0)),y.push=b.bind(null,y.push.bind(y)),v("437")}()});
@@ -8,15 +8,15 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "1.6.0-alpha.1",
11
+ "@nocobase/client": "1.6.0-alpha.10",
12
12
  "react": "18.2.0",
13
- "@nocobase/utils": "1.6.0-alpha.1",
14
- "@nocobase/auth": "1.6.0-alpha.1",
15
- "@nocobase/database": "1.6.0-alpha.1",
13
+ "@nocobase/utils": "1.6.0-alpha.10",
14
+ "@nocobase/auth": "1.6.0-alpha.10",
15
+ "@nocobase/database": "1.6.0-alpha.10",
16
16
  "lodash": "4.17.21",
17
- "@nocobase/cache": "1.6.0-alpha.1",
18
- "@nocobase/server": "1.6.0-alpha.1",
19
- "@nocobase/test": "1.6.0-alpha.1",
17
+ "@nocobase/cache": "1.6.0-alpha.10",
18
+ "@nocobase/server": "1.6.0-alpha.10",
19
+ "@nocobase/test": "1.6.0-alpha.10",
20
20
  "@formily/antd-v5": "1.1.9",
21
21
  "antd": "5.12.8",
22
22
  "@formily/shared": "2.3.2",
@@ -25,5 +25,5 @@ module.exports = {
25
25
  "react-i18next": "11.18.6",
26
26
  "@emotion/css": "11.13.0",
27
27
  "@ant-design/icons": "5.2.6",
28
- "@nocobase/actions": "1.6.0-alpha.1"
28
+ "@nocobase/actions": "1.6.0-alpha.10"
29
29
  };
package/dist/index.d.ts CHANGED
@@ -6,4 +6,4 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
- export { AuthModel, BasicAuth, default } from './server';
9
+ export { AuthModel, BasicAuth, default, presetAuthType } from './server';
package/dist/index.js CHANGED
@@ -38,12 +38,14 @@ var src_exports = {};
38
38
  __export(src_exports, {
39
39
  AuthModel: () => import_server.AuthModel,
40
40
  BasicAuth: () => import_server.BasicAuth,
41
- default: () => import_server.default
41
+ default: () => import_server.default,
42
+ presetAuthType: () => import_server.presetAuthType
42
43
  });
43
44
  module.exports = __toCommonJS(src_exports);
44
45
  var import_server = __toESM(require("./server"));
45
46
  // Annotate the CommonJS export names for ESM import in node:
46
47
  0 && (module.exports = {
47
48
  AuthModel,
48
- BasicAuth
49
+ BasicAuth,
50
+ presetAuthType
49
51
  });
@@ -28,5 +28,6 @@
28
28
  "Show": "Show",
29
29
  "Sign up settings": "Sign up settings",
30
30
  "Sign up form": "Sign up form",
31
- "At least one of the username or email fields is required": "At least one of the username or email fields is required"
31
+ "At least one of the username or email fields is required": "At least one of the username or email fields is required",
32
+ "Password is not allowed to be changed": "Password is not allowed to be changed"
32
33
  }
@@ -28,5 +28,6 @@
28
28
  "Show": "显示",
29
29
  "Sign up settings": "注册设置",
30
30
  "Sign up form": "注册表单",
31
- "At least one of the username or email fields is required": "至少需要设置用户名或邮箱中的一个字段为必填字段"
31
+ "At least one of the username or email fields is required": "至少需要设置用户名或邮箱中的一个字段为必填字段",
32
+ "Password is not allowed to be changed": "密码不允许修改"
32
33
  }
@@ -1 +1 @@
1
- {"name":"cron","description":"Cron jobs for your node","version":"2.4.4","author":"Nick Campbell <nicholas.j.campbell@gmail.com> (https://github.com/ncb000gt)","bugs":{"url":"https://github.com/kelektiv/node-cron/issues"},"repository":{"type":"git","url":"https://github.com/kelektiv/node-cron.git"},"main":"lib/cron","scripts":{"lint":"eslint {lib,tests}/*.js","test":"jest --coverage","test:watch":"jest --watch --coverage","test:types":"tsd","prepare":"husky install","release":"semantic-release"},"types":"types/index.d.ts","dependencies":{"@types/luxon":"~3.3.0","luxon":"~3.3.0"},"devDependencies":{"@commitlint/cli":"~17.6.6","@insurgentlab/commitlint-config":"^18.1.0","@insurgentlab/conventional-changelog-preset":"~6.0.3","@semantic-release/changelog":"~6.0.x","@semantic-release/commit-analyzer":"~9.0.x","@semantic-release/git":"~10.0.x","@semantic-release/github":"~8.1.x","@semantic-release/npm":"~10.0.x","@semantic-release/release-notes-generator":"~11.0.x","chai":"~4.2.x","eslint":"~8.36.x","eslint-config-prettier":"^8.7.x","eslint-config-standard":"~17.0.x","eslint-plugin-import":"~2.27.x","eslint-plugin-jest":"~27.2.x","eslint-plugin-n":"~15.6.x","eslint-plugin-prettier":"~4.2.x","eslint-plugin-promise":"~6.1.x","husky":"^8.0.3","jest":"~29.5.x","prettier":"~2.8.x","semantic-release":"~21.0.x","sinon":"^15.0.x","tsd":"^0.28.1"},"keywords":["cron","node cron","node-cron","schedule","scheduler","cronjob","cron job"],"license":"MIT","contributors":["Brandon der Blätter <https://interlucid.com/contact/> (https://github.com/intcreator)","Romain Beauxis <toots@rastageeks.org> (https://github.com/toots)","James Padolsey <> (https://github.com/jamespadolsey)","Finn Herpich <fh@three-heads.de> (https://github.com/ErrorProne)","Clifton Cunningham <clifton.cunningham@gmail.com> (https://github.com/cliftonc)","Eric Abouaf <eric.abouaf@gmail.com> (https://github.com/neyric)","humanchimp <morphcham@gmail.com> (https://github.com/humanchimp)","Craig Condon <craig@spiceapps.com> (https://github.com/spiceapps)","Dan Bear <daniel@hulu.com> (https://github.com/danhbear)","Vadim Baryshev <vadimbaryshev@gmail.com> (https://github.com/baryshev)","Leandro Ferrari <lfthomaz@gmail.com> (https://github.com/lfthomaz)","Gregg Zigler <greggzigler@gmail.com> (https://github.com/greggzigler)","Jordan Abderrachid <jabderrachid@gmail.com> (https://github.com/jordanabderrachid)","Masakazu Matsushita <matsukaz@gmail.com> (matsukaz)","Christopher Lunt <me@kirisu.co.uk> (https://github.com/kirisu)"],"jest":{"collectCoverage":true,"collectCoverageFrom":["lib/*.js"],"coverageThreshold":{"global":{"statements":80,"branches":80,"functions":70,"lines":80}}},"files":["lib","types","CHANGELOG.md","LICENSE","README.md"],"_lastModified":"2024-12-03T15:32:30.428Z"}
1
+ {"name":"cron","description":"Cron jobs for your node","version":"2.4.4","author":"Nick Campbell <nicholas.j.campbell@gmail.com> (https://github.com/ncb000gt)","bugs":{"url":"https://github.com/kelektiv/node-cron/issues"},"repository":{"type":"git","url":"https://github.com/kelektiv/node-cron.git"},"main":"lib/cron","scripts":{"lint":"eslint {lib,tests}/*.js","test":"jest --coverage","test:watch":"jest --watch --coverage","test:types":"tsd","prepare":"husky install","release":"semantic-release"},"types":"types/index.d.ts","dependencies":{"@types/luxon":"~3.3.0","luxon":"~3.3.0"},"devDependencies":{"@commitlint/cli":"~17.6.6","@insurgentlab/commitlint-config":"^18.1.0","@insurgentlab/conventional-changelog-preset":"~6.0.3","@semantic-release/changelog":"~6.0.x","@semantic-release/commit-analyzer":"~9.0.x","@semantic-release/git":"~10.0.x","@semantic-release/github":"~8.1.x","@semantic-release/npm":"~10.0.x","@semantic-release/release-notes-generator":"~11.0.x","chai":"~4.2.x","eslint":"~8.36.x","eslint-config-prettier":"^8.7.x","eslint-config-standard":"~17.0.x","eslint-plugin-import":"~2.27.x","eslint-plugin-jest":"~27.2.x","eslint-plugin-n":"~15.6.x","eslint-plugin-prettier":"~4.2.x","eslint-plugin-promise":"~6.1.x","husky":"^8.0.3","jest":"~29.5.x","prettier":"~2.8.x","semantic-release":"~21.0.x","sinon":"^15.0.x","tsd":"^0.28.1"},"keywords":["cron","node cron","node-cron","schedule","scheduler","cronjob","cron job"],"license":"MIT","contributors":["Brandon der Blätter <https://interlucid.com/contact/> (https://github.com/intcreator)","Romain Beauxis <toots@rastageeks.org> (https://github.com/toots)","James Padolsey <> (https://github.com/jamespadolsey)","Finn Herpich <fh@three-heads.de> (https://github.com/ErrorProne)","Clifton Cunningham <clifton.cunningham@gmail.com> (https://github.com/cliftonc)","Eric Abouaf <eric.abouaf@gmail.com> (https://github.com/neyric)","humanchimp <morphcham@gmail.com> (https://github.com/humanchimp)","Craig Condon <craig@spiceapps.com> (https://github.com/spiceapps)","Dan Bear <daniel@hulu.com> (https://github.com/danhbear)","Vadim Baryshev <vadimbaryshev@gmail.com> (https://github.com/baryshev)","Leandro Ferrari <lfthomaz@gmail.com> (https://github.com/lfthomaz)","Gregg Zigler <greggzigler@gmail.com> (https://github.com/greggzigler)","Jordan Abderrachid <jabderrachid@gmail.com> (https://github.com/jordanabderrachid)","Masakazu Matsushita <matsukaz@gmail.com> (matsukaz)","Christopher Lunt <me@kirisu.co.uk> (https://github.com/kirisu)"],"jest":{"collectCoverage":true,"collectCoverageFrom":["lib/*.js"],"coverageThreshold":{"global":{"statements":80,"branches":80,"functions":70,"lines":80}}},"files":["lib","types","CHANGELOG.md","LICENSE","README.md"],"_lastModified":"2025-01-08T06:43:39.508Z"}
@@ -45,6 +45,12 @@ var auth_default = {
45
45
  // await next();
46
46
  // },
47
47
  changePassword: async (ctx, next) => {
48
+ const systemSettings = ctx.db.getRepository("systemSettings");
49
+ const settings = await systemSettings.findOne();
50
+ const enableChangePassword = settings.get("enableChangePassword");
51
+ if (enableChangePassword === false) {
52
+ ctx.throw(403, ctx.t("Password is not allowed to be changed", { ns: import_preset.namespace }));
53
+ }
48
54
  const {
49
55
  values: { oldPassword, newPassword, confirmPassword }
50
56
  } = ctx.action.params;
@@ -72,7 +72,10 @@ class BasicAuth extends import_auth.BaseAuth {
72
72
  const field = this.userCollection.getField("password");
73
73
  const valid = await field.verify(password, user.password);
74
74
  if (!valid) {
75
- ctx.throw(401, ctx.t("The username/email or password is incorrect, please re-enter", { ns: import_preset.namespace }));
75
+ ctx.throw(401, ctx.t("The username/email or password is incorrect, please re-enter", { ns: import_preset.namespace }), {
76
+ code: "INCORRECT_PASSWORD",
77
+ user
78
+ });
76
79
  }
77
80
  return user;
78
81
  }
@@ -34,6 +34,7 @@ var authenticators_default = (0, import_database.defineCollection)({
34
34
  dumpRules: {
35
35
  group: "third-party"
36
36
  },
37
+ migrationRules: ["overwrite", "skip"],
37
38
  shared: true,
38
39
  name: "authenticators",
39
40
  sortable: true,
@@ -34,6 +34,7 @@ var token_blacklist_default = (0, import_database.defineCollection)({
34
34
  dumpRules: {
35
35
  group: "log"
36
36
  },
37
+ migrationRules: ["schema-only", "skip"],
37
38
  shared: true,
38
39
  name: "tokenBlacklist",
39
40
  model: "TokenBlacklistModel",
@@ -35,6 +35,7 @@ var users_authenticators_default = (0, import_database.defineCollection)({
35
35
  group: "user"
36
36
  },
37
37
  shared: true,
38
+ migrationRules: ["schema-only", "overwrite", "skip"],
38
39
  name: "usersAuthenticators",
39
40
  model: "UserAuthModel",
40
41
  createdBy: true,
@@ -8,4 +8,5 @@
8
8
  */
9
9
  export { BasicAuth } from './basic-auth';
10
10
  export { AuthModel } from './model/authenticator';
11
+ export { presetAuthType } from '../preset';
11
12
  export { default } from './plugin';
@@ -38,14 +38,17 @@ var server_exports = {};
38
38
  __export(server_exports, {
39
39
  AuthModel: () => import_authenticator.AuthModel,
40
40
  BasicAuth: () => import_basic_auth.BasicAuth,
41
- default: () => import_plugin.default
41
+ default: () => import_plugin.default,
42
+ presetAuthType: () => import_preset.presetAuthType
42
43
  });
43
44
  module.exports = __toCommonJS(server_exports);
44
45
  var import_basic_auth = require("./basic-auth");
45
46
  var import_authenticator = require("./model/authenticator");
47
+ var import_preset = require("../preset");
46
48
  var import_plugin = __toESM(require("./plugin"));
47
49
  // Annotate the CommonJS export names for ESM import in node:
48
50
  0 && (module.exports = {
49
51
  AuthModel,
50
- BasicAuth
52
+ BasicAuth,
53
+ presetAuthType
51
54
  });
@@ -41,6 +41,7 @@ __export(plugin_exports, {
41
41
  });
42
42
  module.exports = __toCommonJS(plugin_exports);
43
43
  var import_server = require("@nocobase/server");
44
+ var import_utils = require("@nocobase/utils");
44
45
  var import_preset = require("../preset");
45
46
  var import_auth = __toESM(require("./actions/auth"));
46
47
  var import_authenticators = __toESM(require("./actions/authenticators"));
@@ -48,7 +49,6 @@ var import_basic_auth = require("./basic-auth");
48
49
  var import_authenticator = require("./model/authenticator");
49
50
  var import_storer = require("./storer");
50
51
  var import_token_blacklist = require("./token-blacklist");
51
- var import_utils = require("@nocobase/utils");
52
52
  class PluginAuthServer extends import_server.Plugin {
53
53
  cache;
54
54
  afterAdd() {
@@ -63,8 +63,10 @@ class PluginAuthServer extends import_server.Plugin {
63
63
  store: "memory"
64
64
  });
65
65
  const storer = new import_storer.Storer({
66
+ app: this.app,
66
67
  db: this.db,
67
- cache: this.cache
68
+ cache: this.cache,
69
+ authManager: this.app.authManager
68
70
  });
69
71
  this.app.authManager.setStorer(storer);
70
72
  if (!this.app.authManager.jwt.blacklist) {
@@ -127,11 +129,45 @@ class PluginAuthServer extends import_server.Plugin {
127
129
  this.app.on("cache:del:auth", async ({ userId }) => {
128
130
  await this.cache.del(`auth:${userId}`);
129
131
  });
132
+ this.app.on("ws:message:auth:token", async ({ clientId, payload }) => {
133
+ if (!payload || !payload.token || !payload.authenticator) {
134
+ this.app.emit(`ws:removeTag`, {
135
+ clientId,
136
+ tagKey: "userId"
137
+ });
138
+ return;
139
+ }
140
+ const auth = await this.app.authManager.get(payload.authenticator, {
141
+ getBearerToken: () => payload.token,
142
+ app: this.app,
143
+ db: this.app.db,
144
+ cache: this.app.cache,
145
+ logger: this.app.logger
146
+ });
147
+ const user = await auth.check();
148
+ if (!user) {
149
+ this.app.logger.error(`Invalid token: ${payload.token}`);
150
+ this.app.emit(`ws:removeTag`, {
151
+ clientId,
152
+ tagKey: "userId"
153
+ });
154
+ return;
155
+ }
156
+ this.app.emit(`ws:setTag`, {
157
+ clientId,
158
+ tagKey: "userId",
159
+ tagValue: user.id
160
+ });
161
+ this.app.emit(`ws:authorized`, {
162
+ clientId,
163
+ userId: user.id
164
+ });
165
+ });
130
166
  this.app.auditManager.registerActions([
131
167
  {
132
168
  name: "auth:signIn",
133
169
  getMetaData: async (ctx) => {
134
- var _a, _b, _c, _d, _e, _f;
170
+ var _a;
135
171
  let body = {};
136
172
  if (ctx.status === 200) {
137
173
  body = {
@@ -145,20 +181,10 @@ class PluginAuthServer extends import_server.Plugin {
145
181
  }
146
182
  return {
147
183
  request: {
148
- params: (_a = ctx.request) == null ? void 0 : _a.params,
149
184
  body: {
150
- ...(_b = ctx.request) == null ? void 0 : _b.body,
185
+ ...(_a = ctx.request) == null ? void 0 : _a.body,
151
186
  password: void 0
152
- },
153
- path: (_c = ctx.request) == null ? void 0 : _c.path,
154
- headers: {
155
- "x-authenticator": (_d = ctx.request) == null ? void 0 : _d.headers["x-authenticator"],
156
- "x-locale": (_e = ctx.request) == null ? void 0 : _e.headers["x-locale"],
157
- "x-timezone": (_f = ctx.request) == null ? void 0 : _f.headers["x-timezone"]
158
187
  }
159
- },
160
- response: {
161
- body
162
188
  }
163
189
  };
164
190
  },
@@ -193,26 +219,13 @@ class PluginAuthServer extends import_server.Plugin {
193
219
  {
194
220
  name: "auth:signUp",
195
221
  getMetaData: async (ctx) => {
196
- var _a, _b, _c, _d, _e, _f, _g;
222
+ var _a;
197
223
  return {
198
224
  request: {
199
- params: (_a = ctx.request) == null ? void 0 : _a.params,
200
225
  body: {
201
- ...(_b = ctx.request) == null ? void 0 : _b.body,
226
+ ...(_a = ctx.request) == null ? void 0 : _a.body,
202
227
  password: void 0,
203
228
  confirm_password: void 0
204
- },
205
- path: (_c = ctx.request) == null ? void 0 : _c.path,
206
- headers: {
207
- "x-authenticator": (_d = ctx.request) == null ? void 0 : _d.headers["x-authenticator"],
208
- "x-locale": (_e = ctx.request) == null ? void 0 : _e.headers["x-locale"],
209
- "x-timezone": (_f = ctx.request) == null ? void 0 : _f.headers["x-timezone"]
210
- }
211
- },
212
- response: {
213
- body: {
214
- ...(_g = ctx.response) == null ? void 0 : _g.body,
215
- token: void 0
216
229
  }
217
230
  }
218
231
  };
@@ -221,18 +234,9 @@ class PluginAuthServer extends import_server.Plugin {
221
234
  {
222
235
  name: "auth:changePassword",
223
236
  getMetaData: async (ctx) => {
224
- var _a, _b, _c;
225
237
  return {
226
238
  request: {
227
- params: ctx.request.params,
228
- query: ctx.request.query,
229
- body: {},
230
- path: ctx.request.path,
231
- headers: {
232
- "x-authenticator": (_a = ctx.request) == null ? void 0 : _a.headers["x-authenticator"],
233
- "x-locale": (_b = ctx.request) == null ? void 0 : _b.headers["x-locale"],
234
- "x-timezone": (_c = ctx.request) == null ? void 0 : _c.headers["x-timezone"]
235
- }
239
+ body: {}
236
240
  },
237
241
  response: {
238
242
  body: {}
@@ -6,18 +6,24 @@
6
6
  * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
- import { Storer as IStorer } from '@nocobase/auth';
9
+ import { AuthManager, Storer as IStorer } from '@nocobase/auth';
10
10
  import { Cache } from '@nocobase/cache';
11
11
  import { Database } from '@nocobase/database';
12
+ import { Application } from '@nocobase/server';
12
13
  import { AuthModel } from './model/authenticator';
13
14
  export declare class Storer implements IStorer {
14
15
  db: Database;
15
16
  cache: Cache;
17
+ app: Application;
18
+ authManager: AuthManager;
16
19
  key: string;
17
- constructor({ db, cache }: {
20
+ constructor({ app, db, cache, authManager, }: {
21
+ app?: Application;
18
22
  db: Database;
19
23
  cache: Cache;
24
+ authManager: AuthManager;
20
25
  });
26
+ renderJsonTemplate(authenticator: any): any;
21
27
  getCache(): Promise<AuthModel[]>;
22
28
  setCache(authenticators: AuthModel[]): Promise<void>;
23
29
  get(name: string): Promise<AuthModel>;
@@ -32,21 +32,45 @@ module.exports = __toCommonJS(storer_exports);
32
32
  class Storer {
33
33
  db;
34
34
  cache;
35
+ app;
36
+ authManager;
35
37
  key = "authenticators";
36
- constructor({ db, cache }) {
38
+ constructor({
39
+ app,
40
+ db,
41
+ cache,
42
+ authManager
43
+ }) {
44
+ this.app = app;
37
45
  this.db = db;
38
46
  this.cache = cache;
47
+ this.authManager = authManager;
39
48
  this.db.on("authenticators.afterSave", async (model) => {
40
49
  if (!model.enabled) {
41
50
  await this.cache.delValueInObject(this.key, model.name);
42
51
  return;
43
52
  }
44
- await this.cache.setValueInObject(this.key, model.name, model);
53
+ await this.cache.setValueInObject(this.key, model.name, this.renderJsonTemplate(model));
45
54
  });
46
55
  this.db.on("authenticators.afterDestroy", async (model) => {
47
56
  await this.cache.delValueInObject(this.key, model.name);
48
57
  });
49
58
  }
59
+ renderJsonTemplate(authenticator) {
60
+ var _a, _b;
61
+ if (!authenticator) {
62
+ return authenticator;
63
+ }
64
+ const $env = (_a = this.app) == null ? void 0 : _a.environment;
65
+ if (!$env) {
66
+ return authenticator;
67
+ }
68
+ const config = this.authManager.getAuthConfig(authenticator.authType);
69
+ authenticator.dataValues.options = $env.renderJsonTemplate(authenticator.dataValues.options, {
70
+ omit: (_b = config == null ? void 0 : config.auth) == null ? void 0 : _b["optionsKeysNotAllowedInEnv"]
71
+ });
72
+ return authenticator;
73
+ }
50
74
  async getCache() {
51
75
  const authenticators = await this.cache.get(this.key);
52
76
  if (!authenticators) {
@@ -56,7 +80,7 @@ class Storer {
56
80
  }
57
81
  async setCache(authenticators) {
58
82
  const obj = authenticators.reduce((obj2, authenticator) => {
59
- obj2[authenticator.name] = authenticator;
83
+ obj2[authenticator.name] = this.renderJsonTemplate(authenticator);
60
84
  return obj2;
61
85
  }, {});
62
86
  await this.cache.set(this.key, obj);
@@ -67,6 +91,7 @@ class Storer {
67
91
  const repo = this.db.getRepository("authenticators");
68
92
  authenticators = await repo.find({ filter: { enabled: true } });
69
93
  await this.setCache(authenticators);
94
+ authenticators = await this.getCache();
70
95
  }
71
96
  const authenticator = authenticators.find((authenticator2) => authenticator2.name === name);
72
97
  return authenticator || authenticators[0];
@@ -37,11 +37,22 @@ class TokenBlacklistService {
37
37
  try {
38
38
  this.bloomFilter = await plugin.app.cacheManager.createBloomFilter();
39
39
  await this.bloomFilter.reserve(this.cacheKey, 1e-3, 1e6);
40
- const data = await this.repo.find({ fields: ["token"], raw: true });
40
+ const data = await this.repo.find({
41
+ fields: ["token"],
42
+ filter: {
43
+ expiration: {
44
+ $dateAfter: /* @__PURE__ */ new Date()
45
+ }
46
+ },
47
+ raw: true
48
+ });
41
49
  const tokens = data.map((item) => item.token);
50
+ if (!tokens.length) {
51
+ return;
52
+ }
42
53
  await this.bloomFilter.mAdd(this.cacheKey, tokens);
43
54
  } catch (error) {
44
- plugin.app.logger.error("token-blacklist: create bloom filter failed", error);
55
+ plugin.app.logger.warn("token-blacklist: create bloom filter failed", error);
45
56
  this.bloomFilter = null;
46
57
  }
47
58
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-auth",
3
- "version": "1.6.0-alpha.1",
3
+ "version": "1.6.0-alpha.10",
4
4
  "main": "./dist/server/index.js",
5
5
  "homepage": "https://docs.nocobase.com/handbook/auth",
6
6
  "homepage.zh-CN": "https://docs-cn.nocobase.com/handbook/auth",
@@ -26,7 +26,7 @@
26
26
  "displayName.zh-CN": "用户认证",
27
27
  "description": "User authentication management, including password, SMS, and support for Single Sign-On (SSO) protocols, with extensibility.",
28
28
  "description.zh-CN": "用户认证管理,包括基础的密码认证、短信认证、SSO 协议的认证等,可扩展。",
29
- "gitHead": "a4c91015e34ec0c9a427451b5fbdfb5fedc4f3d7",
29
+ "gitHead": "8ba8204282be7bf6674ef427fdbe31caa65977d5",
30
30
  "keywords": [
31
31
  "Authentication"
32
32
  ]