Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

اضافه شدن قابلیت اوررایت یا تغییر ادرس یو آر ال های پیشفرض #65

Merged
merged 13 commits into from
Jul 14, 2023

Conversation

MrMRM1
Copy link
Contributor

@MrMRM1 MrMRM1 commented Jun 11, 2023

در پروژه گاهی این نیاز وجود دارد که برای هر قسمت از برنامه app های جداگانه ای ایجاد شود حال اگر بخواهیم از این کتابخانه در یکی از app های داخلی مانند اپ api و سپس داخل payment استفاده کنیم برنامه دچار اختلال شده و درست عمل نمیکند. (منظور داخل payment/urls.py )
یا گاهی لازم است که توابع go_to_bank_gateway یا callback_view داخلی را با توجه به نیاز پروژه overwrite شوند
با توجه به این نیازمندی ها با ایجاد تغییراتی اجازه تغییر مسیر اصلی این توابع به پروژه اضافه میشود تا کاربر با نیازی که احساس میکند توابع خاص خود را ایجاد کرده یا مسیر قرار گیری url ها را تنظیم نماید.

@ali-zahedi
Copy link
Owner

ali-zahedi commented Jun 14, 2023

@MrMRM1
سلام و ادب.
اولا ممنون بابت زمانی که گذاشتید. در حال حاضر و به صورت سطحی که نگاه کردم چند نکته بنظر میرسه:
۱- بنظر این دو متغیر به هم وابسته هستند. در صورتی که کاربری یک متغیر رو ست کنه وضعیت دومی به چه شکل میشه و باعث بروز مشکل میشه.
۲- کاربر ممکنه فانکشنالیتی درونی بسته رو تغییر بده که منجر به عدم جامعیت میشه.

بنظر باید دنبال مسیری گشت که بشه اسکوپ اولیه رو ست کرد. به عنوان مثلا پرفیکس یا چیزی با این سبک.

@MrMRM1
Copy link
Contributor Author

MrMRM1 commented Jun 14, 2023

سلام وقت بخیر
کاربر حتما لازم نیست توابع را اوررایت کنه میتونه از همون توابع قبلی و حتی ادرس های قبلی استفاده کنه ( درصورت ست نکردن این تنظیم از تنظیمات پیشفرض استفاده میشه ) ولی در پروژه های بزرگ که نیازمند این است که url ها تفکیک بشند و یک نظم مشخصی در url ها باشد برنامه به مشکل میخورده مثلا
-myproject
--urls.py
--myapp
----urls.py
------payment
------urls.py
اگر کاربر بخواهد از کتابخونه در قسمت myapp/payment/urls استفاده کند مشکل ایجاد میشه با تغییر دادن مسیر پیشفرض به
myapp:payment:go-to-bank-gateway
myapp:payment:callback
مشکل رفع میشه
حتی اگر کاربر نیاز داشته باشه فایل redirect_to_bank.html رو شخصی سازی کنه باز هم به مشکل میخوره و باید view های اضافه بنویسه تا این کار کوچیک رو انجام بده
البته میشه برای بهتر شدن کار بجای گرفتن دومسیر تکراری در تنظیمات فقط یک بار مسیر url رو دریافت کرد مثلا myapp:payment
اگر این روش، روش مناسبی نیست باید دنبال سبک دیگه ای بود ولی خب این قابلیت برای شخصی سازی بیشتر نیاز هست.

@ali-zahedi
Copy link
Owner

@MrMRM1 سلام و وقت بخیر.
ابتدا بابت تاخیر عذر خواهی میکنم. مشکل شخصی داشتم که دسترسی من و محدود کرده بود.
در مورد نیم اسپیس یو آر ال موافقم ولی در مورد تفکیکش به ازای هر یو آر ال بنظر مشکلاتی رو میتونه بهمراه داشته باشه که بالاتر اشاره کردم.
در مورد شخصی سازی redirect_to_bank.html سوالی که برام پیش اومد این بود که چه شخصی سازی ای در این صفحه قرار هست انجام بگیره. چون شخصی سازی در این لول میتونه بریکینگ چین رو بهمراه داشته باشه. این نظر در مورد ویو هایی که صحبت شد هم صادق هست.

جمع بندی: در حال حاضر اگه موافق باشین، اگه تغییرات یو آر ال رو ببرید در لول اپلیکیشن من میتونم این مرج ریکوئست رو مرج کنم. (یا یک مرج ریکوئست جدا ایجاد کنید)

myapp:payment

پانوشت: اگه بنظرتون من نکات رو متوجه نشدم میتونیم با هم جلسه ای رو ست کنیم و صحبت کنیم. ایمیل من رو میتونید توی پروفایل گیت هاب پیدا کنید و باهم جلسه رو ست کنیم.

@MrMRM1
Copy link
Contributor Author

MrMRM1 commented Jul 7, 2023

سلام وقت بخیر
خواهش میکنم
درمورد بریکینگ چین درست میگین ولی تنظیمات پیشفرض همون تنظیمات قبلی هست و تا کسی نیاز نداشته باشه تغییری داخل عملکرد کتابخونه حس نمیکنه، برای شخصی سازی redirect_to_bank.html چون تابع go_to_bank_gateway مشکل امینتی داره مهاجم میتونه با استفاده از سایت ما کاربر رو گمراه کنه و به هر سایت و ادرسی که مدنظرش هست کاربر رو هدایت کنه
mysite.com/bankgateways/go-to-bank-gateway/?url=google.com
برای مثال کاربر با کلیک کردن روی این لینک که ادرس سایت مورد اعتمادش هست وارد گوگل میشه، این سایت میتونه هرسایتی باشه و حتی مهاجم میتونه متود درخواست رو هم تعیین کنه و این خطرناکه
برای رفع این مشکل ابتدا فکر میکردم با تغییر تابع go_to_bank_gateway و شخصی سازی میشه جلو این مشکل رو گرفت ولی خب پیچیدگی زیاد میشه برای همین متد جدیدی اضافه کردم IS_SAFE_GET_GATEWAY_PAYMENT که باعث میشه جلو این مشکل امنیتی گرفته بشه و توسعه دهنده توانایی اینو داشته باشه که هر تغییری در صفحه هدایت به بانک ایجاد کنه (تغییرات از نظر ظاهری یا هرچیز دیگه)

اگر با این توضیحات متوجه منظور من نشدید. خوشحال میشم جلسه ای داشته باشیم تا از تجربیات شما استفاده کنم.

@ali-zahedi
Copy link
Owner

@MrMRM1
به درستی مورد رو اشاره کردید.
چطور میتونیم این مورد رو داخل پکیج حل کنیم؟ بدون اینکه یه سری پیاده سازی رو بندازیم سمت کاربر؟
چون الان اتفاقی که میفته صرفا با این متغیر ما این متد رو غیر فعال میکنیم تا جایی که متوجه شدم و هیچ چیزی جایگزینش نمیکنیم و توسعه دهنده باید این مسیر رو بره.
یا من درست متوجه نشدم؟

@MrMRM1
Copy link
Contributor Author

MrMRM1 commented Jul 7, 2023

مشکل رو حل کردم پیاده سازی ها هم انجام شده وقتی این قابلیت فعال بشه متد go_to_bank_gateway از دسترس خارج میشه و کاربر تمام مراحل رو مثل قبل میره و هیچ تفاوتی نداره فقط بجای استفاده ازbank.redirect_gateway() که هنگام فعال شدن قابلیت امن از دسترس خارج میشه باید از متد bank.get_gateway() استفاده کنه که دیتای مورد نیاز مثل url درگاه برای کاربر برگشت داده میشه که حالا هرطور که نیاز داره میتونه استفاده کنه مثلا :
context = bank.get_gateway()
return render(request, 'redirect_to_bank.html', context=context)
در این حالت کاربر میتونه حتی صفحه html رو هم طبق نیاز پروژه شخصی سازی کنه برای مثال لوگو خودشو قرار بده یا یک دکمه برای تایید و ادامه بزاره و .....
توضیحات بیشتر و نحوه استفاده رو داخل فایل README.md قرار دادم

@ali-zahedi
Copy link
Owner

@MrMRM1
ممنون بابت توضیحات خوبتون.
بنظرم اگر یو آر ال رو بزاریم در لول اپ تغییر بکنه بهتر خواهد بود.
همچنین لطفا
https://github.com/MrMRM1/az-iranian-bank-gateways/blob/0b7e71e31af8c6e88cac9439c393837a3f249c30/azbankgateways/views/samples.py#L31

این فایل رو هم چک کنین که تغییر یو آر ال و فعال کردن حالت سمپل باعث از کار افتادن این بخش نشه.

بعدش، به نظر مشکلی نیست و میتونه مرج بشه.

باز هم مجدد متشکر بابت زحماتی که کشیدین

Updated README with contributions from MrMRM1

* Added link to MrMRM1's security issue resolution (ali-zahedi#65 (comment))
* Mentioned MrMRM1's addition of the ability to overwrite or change default URL addresses.
@ali-zahedi
Copy link
Owner

@MrMRM1
همچنین اگر در اینجا
برای اسپیسینگ یو آر ال آپدیت صورت بگیرد عالی میشه.

@MrMRM1
Copy link
Contributor Author

MrMRM1 commented Jul 14, 2023

سلام وقت بخیر
تغییرات لازم رو در قسمت مربوط به حالت سمپل ایجاد کردم تا در هنگام فعال بودن IS_SAFE_GET_GATEWAY_PAYMENT این قابلیت از دسترس خارج نشود
ویک اپشن جدید اضافه کردم برای کسانی که نیاز ندارند توابع داخلی مثل go_to_bank_gateway یا callback را اوررایت کنند فقط به این نیاز دارند که محل قرار گیری url ها داخل اپ جداگانه ای باشد
با استفاده از CUSTOM_APP میتوان اینکار را انجام داد مثال :
'CUSTOM_APP' : 'api:payment'
و دیگر لازم نیست برای هر سه مورد جداگانه مسیر را مشخص کرد برای مثال url ها بصورت زیر میشوند.
/api/payment/bankgateways/go_to_bank_gateway/

@ali-zahedi ali-zahedi merged commit 4b769cf into ali-zahedi:develop Jul 14, 2023
admiral9200 added a commit to admiral9200/az-iranian-bank-gateways that referenced this pull request Aug 19, 2023
Updated README with contributions from MrMRM1

* Added link to MrMRM1's security issue resolution (ali-zahedi/az-iranian-bank-gateways#65 (comment))
* Mentioned MrMRM1's addition of the ability to overwrite or change default URL addresses.
Copy link

🎉 This PR is included in version 2.0.0-alpha.1 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants